1. added grepdbg program (so you can search your debug files and get times
[spider.git] / perl / DXProt.pm
index 9519c004dee7f6f924ebcb6345fed3fb66ef368d..16b67023a7f09d579ff8bfd01ac2246f3188f74a 100644 (file)
@@ -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]);
                        }