X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=cd229c0f2d113370a11869e7d06de450efc76edb;hb=29595789c0470bfbdcd0e34f9cc9391aa0a994de;hp=e2e8e983998a75f2b137a313f9b043af65714a25;hpb=c6552c92e3a9e3741b68305bfc43124020b57c19;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index e2e8e983..cd229c0f 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -405,6 +405,12 @@ sub handle_16 return; } + # isolate now means only accept stuff from this call only + if ($self->{isolate} && $ncall ne $self->{call}) { + dbg("PCPROT: $self->{call} isolated, $ncall ignored") if isdbg('chanerr'); + return; + } + my $parent = Route::Node::get($ncall); if ($parent) { @@ -503,6 +509,12 @@ sub handle_17 return; } + # isolate now means only accept stuff from this call only + if ($self->{isolate} && $ncall ne $self->{call}) { + dbg("PCPROT: $self->{call} isolated, $ncall ignored") if isdbg('chanerr'); + return; + } + RouteDB::delete($ncall, $self->{call}); my $uref = Route::User::get($ucall); @@ -684,6 +696,12 @@ sub handle_19 } } + # isolate now means only accept stuff from this call only + if ($self->{isolate} && $call ne $self->{call}) { + dbg("PCPROT: $self->{call} isolated, $call ignored") if isdbg('chanerr'); + next; + } + my $user = check_add_node($call); # if (eph_dup($genline)) { @@ -787,11 +805,16 @@ sub handle_21 eph_del_regex("^PC1[679].*$call"); # if I get a PC21 from the same callsign as self then ignore it - if ($call eq $self->call) { + if ($call eq $self->{call}) { dbg("PCPROT: self referencing PC21 from $self->{call}"); return; } + # for the above reason and also because of the check for PC21s coming + # in for self->call from outside being ignored further down + # we don't need any isolation code here, because we will never + # act on a PC21 with self->call in it. + RouteDB::delete($call, $self->{call}); my $parent = Route::Node::get($self->{call}); @@ -1430,7 +1453,7 @@ sub check_pc9x_t } elsif ($create) { $parent = Route::Node->new($call); } - $parent->lastid->{$pc} = $t; + $parent->lastid->{$pc} = $t if $parent; return $parent; } @@ -1526,6 +1549,9 @@ sub handle_92 } } elsif ($sort eq 'A' || $sort eq 'D' || $sort eq 'C') { + # remember the last channel we arrived on + $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; + # this is the main route section # here is where all the routes are created and destroyed @@ -1570,6 +1596,7 @@ sub handle_92 } $parent = check_pc9x_t($call, $t, 92) || return; $parent->via_pc92(1); + $parent->PC92C_dxchan($self->{call}); } } else { dbg("PCPROT: must be mycall or external node as first entry, ignored") if isdbg('chanerr'); @@ -1578,6 +1605,7 @@ sub handle_92 $parent->here(Route::here($here)); $parent->version($version) if $version && $version > $parent->version; $parent->build($build) if $build && $build > $parent->build; + $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; shift @ent; } } @@ -1606,11 +1634,9 @@ sub handle_92 # we only reset obscounts on config records $oparent->reset_obs; - $oparent->PC92C_dxchan($self->{call}) unless $self->{call} eq $oparent->call; dbg("ROUTE: reset obscount on $pcall now " . $oparent->obscount) if isdbg('obscount'); if ($oparent != $parent) { $parent->reset_obs; - $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; dbg("ROUTE: reset obscount on $parent->{call} now " . $parent->obscount) if isdbg('obscount'); }