and add it to PC17 as well
[spider.git] / perl / DXProt.pm
index 741e4b3342ec9415d9d5e08d1c9d4f0f5f8cf78e..c039659bd96dbfab15373c542cf92578f449e503 100644 (file)
@@ -197,7 +197,10 @@ sub normal
                        }
                        
                        # if this is a 'nodx' node then ignore it
-                       last SWITCH if grep $field[7] =~ /^$_/,  @DXProt::nodx_node;
+                       if (grep $field[7] =~ /^$_/,  @DXProt::nodx_node) {
+                               dbg('chan', "Bad DXNode, dropped");
+                               return;
+                       }
                        
                        # convert the date to a unix date
                        my $d = cltounix($field[3], $field[4]);
@@ -310,20 +313,26 @@ sub normal
                
                if ($pcno == 16) {              # add a user
                        my $node = DXCluster->get_exact($field[1]); 
+                       my $dxchan;
+                       if (!$node && ($dxchan = DXChannel->get($field[1]))) {
+                               # add it to the node table if it isn't present and it's
+                               # connected locally
+                               $node = DXNode->new($dxchan, $field[1], 0, 1, 5400);
+                               broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate};
+                               
+                       }
                        return unless $node; # ignore if havn't seen a PC19 for this one yet
                        return unless $node->isa('DXNode');
                        if ($node->dxchan != $self) {
                                dbg('chan', "LOOP: $field[1] came in on wrong channel");
                                return;
                        }
-                       my $dxchan;
                        if (($dxchan = DXChannel->get($field[1])) && $dxchan != $self) {
                                dbg('chan', "LOOP: $field[1] connected locally");
                                return;
                        }
                        my $i;
-                       
-                       
+                                               
                        for ($i = 2; $i < $#field; $i++) {
                                my ($call, $confmode, $here) = $field[$i] =~ /^(\S+) (\S) (\d)/o;
                                next if !$call || length $call < 3 || length $call > 8;
@@ -351,13 +360,20 @@ sub normal
                
                if ($pcno == 17) {              # remove a user
                        my $node = DXCluster->get_exact($field[2]);
+                       my $dxchan;
+                       if (!$node && ($dxchan = DXChannel->get($field[2]))) {
+                               # add it to the node table if it isn't present and it's
+                               # connected locally
+                               $node = DXNode->new($dxchan, $field[2], 0, 1, 5400);
+                               broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate};
+                               return;
+                       }
                        return unless $node;
                        return unless $node->isa('DXNode');
                        if ($node->dxchan != $self) {
                                dbg('chan', "LOOP: $field[2] came in on wrong channel");
                                return;
                        }
-                       my $dxchan;
                        if (($dxchan = DXChannel->get($field[2])) && $dxchan != $self) {
                                dbg('chan', "LOOP: $field[2] connected locally");
                                return;
@@ -911,7 +927,7 @@ sub send_announce
                        ($filter, $hops) = Filter::it($dxchan->{annfilter}, @_, $self->{call} );
                        next unless $filter;
                } 
-               if ($dxchan->is_ak1a && $field[1] ne $main::mycall) {  # i.e not specifically routed to me
+               if ($dxchan->is_ak1a && $_[1] ne $main::mycall) {  # i.e not specifically routed to me
                        next if $dxchan == $self;
                        if ($hops) {
                                $routeit = $line;