X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=16b67023a7f09d579ff8bfd01ac2246f3188f74a;hb=9da1742219a27b1c02fd57794412088e4d7b3d1d;hp=9519c004dee7f6f924ebcb6345fed3fb66ef368d;hpb=3eb9538d135d9ff21d8ce7c0e0c6b3e6d7fb59a9;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 9519c004..16b67023 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -31,7 +31,7 @@ use strict; use vars qw($me $pc11_max_age $pc11_dup_age $pc23_dup_age %spotdup %wwvdup $last_hour %pings %rcmds %nodehops @baddx $baddxfn $pc12_dup_age - %anndup); + %anndup $allowzero); $me = undef; # the channel id for this cluster $pc11_max_age = 1*3600; # the maximum age for an incoming 'real-time' pc11 @@ -319,7 +319,8 @@ sub normal dbg('chan', "LOOP: $field[1] came in on wrong channel"); return; } - if (DXChannel->get($field[1])) { + my $dxchan; + if (($dxchan = DXChannel->get($field[1])) && $dxchan != $self) { dbg('chan', "LOOP: $field[1] connected locally"); return; } @@ -359,7 +360,8 @@ sub normal dbg('chan', "LOOP: $field[2] came in on wrong channel"); return; } - if (DXChannel->get($field[2])) { + my $dxchan; + if (($dxchan = DXChannel->get($field[2])) && $dxchan != $self) { dbg('chan', "LOOP: $field[2] connected locally"); return; } @@ -383,11 +385,14 @@ sub normal my $call = uc $field[$i+1]; my $confmode = $field[$i+2]; my $ver = $field[$i+3]; + + $ver = 5400 if !$ver && $allowzero; # now check the call over my $node = DXCluster->get_exact($call); if ($node) { - if (DXChannel->get($call)) { + my $dxchan; + if (($dxchan = DXChannel->get($call)) && $dxchan != $self) { dbg('chan', "LOOP: $call connected locally"); } if ($node->dxchan != $self) { @@ -454,7 +459,8 @@ sub normal dbg('chan', "LOOP: $call come in on wrong channel"); return; } - if (DXChannel->get($call)) { + my $dxchan; + if (($dxchan = DXChannel->get($call)) && $dxchan != $self) { dbg('chan', "LOOP: $call connected locally"); return; } @@ -657,6 +663,7 @@ sub normal if ($pcno == 50) { # keep alive/user list my $node = DXCluster->get_exact($field[1]); if ($node) { + return unless $node->isa('DXNode'); return unless $node->dxchan == $self; $node->update_users($field[2]); }