try to gather more info on disappearing nodes
[spider.git] / perl / DXProt.pm
index f8b3e08bbfebf21e27475c5a46cd31b1f9b5f841..f4e4e0d5c4caf03ba05a7f7fab5bd0bbe6f512eb 100644 (file)
@@ -221,6 +221,8 @@ sub init
        $main::me->{registered} = 1;
        $main::me->{version} = $main::version;
        $main::me->{build} = $main::build;
+       $main::me->{do_pc92} = 1;
+       $main::me->{via_pc92} = 1;
 }
 
 #
@@ -841,9 +843,17 @@ sub time_out_pc92_routes
        my @rdel;
        foreach my $n (@nodes) {
                if ($n->dec_obs <= 0) {
+                       if (my $dxchan = DXChannel::get($n->call)) {
+                               dbg("ROUTE: disconnecting local pc92 $_->{call} on obscount") if isdbg('route');
+                               $dxchan->disconnect;
+                               next;
+                       }
                        my @parents = map {Route::Node::get($_)} $n->parents;
                        for (@parents) {
-                               push @rdel, $n->del($_) if $_;
+                               if ($_) {
+                                       dbg("ROUTE: deleting pc92 $_->{call} from $n->{call} on obscount") if isdbg('route');
+                                       push @rdel, $n->del($_);
+                               }
                        }
                }
        }
@@ -1226,8 +1236,8 @@ sub broadcast_route_pc9x
        $line =~ /\^H(\d+)\^\~?$/;
        unless ($1 > 0 && $self->{isolate}) {
                foreach $dxchan (@dxchan) {
-                       next if $dxchan == $self;
-                       next if $dxchan == $main::me;
+                       next if $dxchan == $self || $main::me;
+                       next if $origin eq $dxchan->{call};     # don't route some from this call back again.
                        next unless $dxchan->{do_pc92};
                        next unless $dxchan->isa('DXProt');