X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=2fe92625701aec7d7b57674acdc08adf3ca274ec;hb=ae02a87834832860eb88eff1ee6dd40f3d814443;hp=118743e1f23ff03e5da83279c3c90ba8086b90ef;hpb=31fca8dfb43587fe8f7b6bb657bfa654e7a8566b;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 118743e1..2fe92625 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -647,8 +647,6 @@ sub normal unless ($parent) { my $nl = $pc19list{$ncall}; - delete $pc19list{$ncall} if $nl; # whatever happens - it goes - if ($nl && @field > 3) { # 3 because of the hop count! # this is a new (remembered) node, now attach it to me if it isn't in filtered @@ -672,7 +670,7 @@ sub normal $parent = Route::Node::get($_->[0]); $dxchan = $parent->dxchan if $parent; if ($dxchan && $dxchan ne $self) { - dbg("PCPROT: PC16 from $self->{call} trying to alter locally connected $ncall, ignored!") if isdbg('chanerr'); + dbg("PCPROT: PC19 from $self->{call} trying to alter locally connected $ncall, ignored!") if isdbg('chanerr'); $parent = undef; } if ($parent) { @@ -687,9 +685,14 @@ sub normal # route the pc19 - this will cause 'stuttering PC19s' for a while $self->route_pc19(@nrout) if @nrout ; $parent = Route::Node::get($ncall); + unless ($parent) { + dbg("PCPROT: lost $ncall after sending PC19 for it?"); + return; + } } else { return; } + delete $pc19list{$ncall}; } } else { dbg("PCPROT: Node $ncall not in config") if isdbg('chanerr'); @@ -730,11 +733,12 @@ sub normal my $flags = Route::here($here)|Route::conf($conf); if ($r) { + my $au = $r->addparent($parent); if ($r->flags != $flags) { $r->flags($flags); - push @rout, $r; + $au = $r; } - $r->addparent($parent); + push @rout, $r if $au; } else { push @rout, $parent->add_user($call, $flags); } @@ -912,6 +916,7 @@ sub normal my $new = Route->new($call); # throw away if ($self->in_filter_route($new)) { my $ar = $parent->add($call, $ver, $flags); + $user->wantroutepc19(1) unless defined $user->wantroutepc19; push @rout, $ar if $ar; } else { next; @@ -1140,7 +1145,9 @@ sub normal if ($pcno == 41) { # user info my $call = $field[1]; - if (eph_dup($line, $eph_info_restime)) { + my $l = $line; + $l =~ s/[\x00-\x20\x7f-\xff]+//g; # remove all funny characters and spaces for dup checking + if (eph_dup($l, $eph_info_restime)) { dbg("PCPROT: dupe") if isdbg('chanerr'); return; } @@ -1893,8 +1900,8 @@ sub disconnect $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op"))); } - # get rid of any PC16/17/19/21s - eph_del_regex("^PC(?:1[679]|21).*$call"); + # get rid of any PC16/17/19 + eph_del_regex("^PC1[679]*$call"); # do routing stuff, remove me from routing table my $node = Route::Node::get($call); @@ -1905,7 +1912,7 @@ sub disconnect # and all my ephemera as well for (@rout) { my $c = $_->call; - eph_del_regex("^PC(?:1[679]|21).*$c"); + eph_del_regex("^PC1[679].*$c"); } } @@ -1919,7 +1926,7 @@ sub disconnect } # and the ephemera - eph_del_regex("^PC(?:1[679]|21).*$k"); + eph_del_regex("^PC1[679].*$k"); } # unbusy and stop and outgoing mail