X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=ba79e43e0419ffab6a528e62123ba5ae41886929;hb=89643eba546b3cda9ba83a527919fad79651b858;hp=5ab4186b2c64cb6e8082f5b57800a4c61dc30a82;hpb=49a14209678e26e31b2a9c89aec330c1a7a87b80;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 5ab4186b..ba79e43e 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -349,6 +349,18 @@ sub normal $to = $field[2]; } + # if this is a 'nodx' node then ignore it + if ($badnode->in($field[6]) || ($via && $badnode->in($via))) { + dbg("PCPROT: Bad Node, dropped") if isdbg('chanerr'); + return; + } + + # if this is a 'bad spotter' user then ignore it + if ($badspotter->in($from)) { + dbg("PCPROT: Bad Spotter, dropped") if isdbg('chanerr'); + return; + } + # if we are converting announces to talk is it a dup? if ($ann_to_talk) { if (AnnTalk::is_talk_candidate($from, $field[3]) && AnnTalk::dup($from, $to, $field[3])) { @@ -549,6 +561,18 @@ sub normal } } + # if this is a 'nodx' node then ignore it + if ($badnode->in($field[5])) { + dbg("PCPROT: Bad Node, dropped") if isdbg('chanerr'); + return; + } + + # if this is a 'bad spotter' user then ignore it + if ($badspotter->in($field[1])) { + dbg("PCPROT: Bad Spotter, dropped") if isdbg('chanerr'); + return; + } + if ($field[2] eq '*' || $field[2] eq $main::mycall) { @@ -668,11 +692,6 @@ sub normal my $ncall = $field[2]; my $ucall = $field[1]; - if (eph_dup($line)) { - dbg("PCPROT: dup PC17 detected") if isdbg('chanerr'); - return; - } - eph_del_regex("^PC16\\^$ncall.*$ucall"); if ($ncall eq $main::mycall) { @@ -701,6 +720,12 @@ sub normal return unless $self->in_filter_route($parent); $parent->del_user($uref); + + if (eph_dup($line)) { + dbg("PCPROT: dup PC17 detected") if isdbg('chanerr'); + return; + } + $self->route_pc17($parent, $uref); return; } @@ -755,7 +780,7 @@ sub normal my $dxchan = DXChannel->get($call); if ($dxchan && $dxchan != $self) { dbg("PCPROT: PC19 from $self->{call} trying to alter wrong locally connected $call, ignored!") if isdbg('chanerr'); - return; + next; } # update it if required @@ -825,11 +850,8 @@ sub normal if ($pcno == 21) { # delete a cluster from the list my $call = uc $field[1]; - if (eph_dup($line)) { - dbg("PCPROT: dup PC21 detected") if isdbg('chanerr'); - return; - } - + eph_del_regex("^PC1[79].*$call"); + # if I get a PC21 from the same callsign as self then treat it # as a PC39: I have gone away if ($call eq $self->call) { @@ -837,8 +859,6 @@ sub normal return; } - eph_del_regex("^PC1[79].*$call"); - my @rout; my $parent = Route::Node::get($self->{call}); unless ($parent) { @@ -867,6 +887,11 @@ sub normal return; } +# if (eph_dup($line)) { +# dbg("PCPROT: dup PC21 detected") if isdbg('chanerr'); +# return; +# } + $self->route_pc21(@rout) if @rout; return; }