fix pc16
[spider.git] / perl / DXProt.pm
index 629d9cb7c5952757537bb8ed9e697473184a4207..d0985052685fd21ab94a43699326454d0e58c24e 100644 (file)
@@ -718,7 +718,7 @@ sub handle_16
 
        # if there is a parent, proceed, otherwise if there is a latent PC19 in the PC19list, 
        # fix it up in the routing tables and issue it forth before the PC16
-       unless ($parent) {
+       if ($parent) {
                $dxchan = $parent->dxchan;
                if ($dxchan && $dxchan ne $self) {
                        dbg("PCPROT: PC16 from $self->{call} trying to alter locally connected $ncall, ignored!") if isdbg('chanerr');
@@ -733,10 +733,10 @@ sub handle_16
        }
 
        # is he under the control of the new protocol?
-       if ($parent && $parent->np) {
-               dbg("PCPROT: $ncall aranea node, ignored") if isdbg('chanerr');
-               return;
-       }
+#      if ($parent && $parent->np) {
+#              dbg("PCPROT: $ncall aranea node, ignored") if isdbg('chanerr');
+#              return;
+#      }
                
        my $i;
        my @rout;
@@ -822,38 +822,37 @@ sub handle_17
        my $uref = Route::User::get($ucall);
        unless ($uref) {
                dbg("PCPROT: Route::User $ucall not in config") if isdbg('chanerr');
+               return;
        }
        my $parent = Route::Node::get($ncall);
        unless ($parent) {
                dbg("PCPROT: Route::Node $ncall not in config") if isdbg('chanerr');
+               return;
        }                       
 
-       $dxchan = $parent->dxchan if $parent;
+       $dxchan = $parent->dxchan;
        if ($dxchan && $dxchan ne $self) {
                dbg("PCPROT: PC17 from $self->{call} trying to alter locally connected $ncall, ignored!") if isdbg('chanerr');
                return;
        }
 
        # is he under the control of the new protocol?
-       if ($parent && $parent->np) {
-               dbg("PCPROT: $ncall aranea node, ignored") if isdbg('chanerr');
-               return;
-       }
+#      if ($parent && $parent->np) {
+#              dbg("PCPROT: $ncall aranea node, ignored") if isdbg('chanerr');
+#              return;
+#      }
 
        # input filter if required and then remove user if present
-       if ($parent) {
+       if ($parent && !$parent->np) {
 #              return unless $self->in_filter_route($parent);  
                $parent->del_user($uref) if $uref;
-       } else {
-               $parent = Route->new($ncall);  # throw away
-       }
+       } 
 
        if (eph_dup($line)) {
                dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
                return;
        }
 
-       $uref = Route->new($ucall) unless $uref; # throw away
        $self->route_pc17($origin, $line, $parent, $uref) if (DXChannel::get($parent->call) || $parent->np);
 }
                
@@ -1033,7 +1032,7 @@ sub handle_19
        }
 
        # we only output information that we regard as reliable
-       @rout = grep {$_ && (DXChannel::get{$_->{call}} || $_->np) } @rout;
+       @rout = grep {$_ && (DXChannel::get($_->{call}) || $_->np) } @rout;
        $self->route_pc19($origin, $line, @rout) if @rout;
 }
                
@@ -1122,7 +1121,7 @@ sub handle_21
                return;
        }
 
-       @rout = grep {$_ && (DXChannel::get{$_->{call}} || $_->np) } @rout;
+       @rout = grep {$_ && (DXChannel::get($_->{call}) || $_->np) } @rout;
        $self->route_pc21($origin, $line, @rout) if @rout;
 }
                
@@ -1913,7 +1912,7 @@ sub send_local_config
                for $node (@intcalls) {
                        push @remotenodes, Route::Node::get($node) unless grep $node eq $_, @rnodes, @remotenodes;
                }
-               @remotenodes = grep {$_ && (DXChannel::get{$_->{call}} || $_->np) } @remotenodes;
+               @remotenodes = grep {$_ && (DXChannel::get($_->{call}) || $_->np) } @remotenodes;
                $self->send_route($main::mycall, \&pc19, scalar(@remotenodes), @remotenodes);
        }