fixed isolation for routes finally?
[spider.git] / perl / DXProt.pm
index c5f4384cdfc74fcf8618eb481189404b98415964..846a6c9245f3d0cdc45f8c3f08ea9e0a6e8e97ee 100644 (file)
@@ -227,13 +227,14 @@ sub start
        $self->{isolate} = $user->{isolate};
        $self->{consort} = $line;       # save the connection type
        $self->{here} = 1;
+       $self->{width} = 80;
 
        # get the output filters
        $self->{spotsfilter} = Filter::read_in('spots', $call, 0) || Filter::read_in('spots', 'node_default', 0);
        $self->{wwvfilter} = Filter::read_in('wwv', $call, 0) || Filter::read_in('wwv', 'node_default', 0);
        $self->{wcyfilter} = Filter::read_in('wcy', $call, 0) || Filter::read_in('wcy', 'node_default', 0);
        $self->{annfilter} = Filter::read_in('ann', $call, 0) || Filter::read_in('ann', 'node_default', 0) ;
-       $self->{routefilter} = Filter::read_in('route', $call, 0) || Filter::read_in('route', 'node_default', 0) ;
+       $self->{routefilter} = Filter::read_in('route', $call, 0) || Filter::read_in('route', 'node_default', 0) unless $self->{isolate} ;
 
 
        # get the INPUT filters (these only pertain to Clusters)
@@ -241,7 +242,7 @@ sub start
        $self->{inwwvfilter} = Filter::read_in('wwv', $call, 1) || Filter::read_in('wwv', 'node_default', 1);
        $self->{inwcyfilter} = Filter::read_in('wcy', $call, 1) || Filter::read_in('wcy', 'node_default', 1);
        $self->{inannfilter} = Filter::read_in('ann', $call, 1) || Filter::read_in('ann', 'node_default', 1);
-       $self->{inroutefilter} = Filter::read_in('route', $call, 1) || Filter::read_in('route', 'node_default', 1);
+       $self->{inroutefilter} = Filter::read_in('route', $call, 1) || Filter::read_in('route', 'node_default', 1) unless $self->{isolate};
        
        # set unbuffered and no echo
        $self->send_now('B',"0");
@@ -653,7 +654,7 @@ sub normal
                        # first clear out any nodes on this dxchannel
                        my $parent = Route::Node::get($self->{call});
                        my @rout = $parent->del_nodes;
-                       $self->route_pc21(@rout, $parent);
+                       $self->route_pc21(@rout, $parent) if @rout;
                        $self->send_local_config();
                        $self->send(pc20());
                        return;             # we don't pass these on
@@ -1365,10 +1366,7 @@ sub send_announce
        foreach $dxchan (@dxchan) {
                next if $dxchan == $me;
                next if $dxchan == $self && $self->is_node;
-               my $routeit;
-               my ($filter, $hops);
-
-               $dxchan->announce($line, $self->{isolate}, $to, $target, $text, @_, $self->{call}, $ann_dxcc, $ann_itu, $ann_cq, $org_dxcc, $org_itu, $org_cq)
+               $dxchan->announce($line, $self->{isolate}, $to, $target, $text, @_, $self->{call}, $ann_dxcc, $ann_itu, $ann_cq, $org_dxcc, $org_itu, $org_cq);
        }
 }
 
@@ -1379,6 +1377,7 @@ sub announce
        my $isolate = shift;
        my $to = shift;
        my $target = shift;
+       my $text = shift;
        my ($filter, $hops);
 
        if ($self->{annfilter}) {
@@ -1406,7 +1405,7 @@ sub send_local_config
                # create a list of all the nodes that are not connected to this connection
                # and are not themselves isolated, this to make sure that isolated nodes
         # don't appear outside of this node
-               my @dxchan = grep { $_->call ne $main::mycall && $_->call ne $self->{call} } DXChannel::get_all_nodes();
+               my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} } DXChannel::get_all_nodes();
                @localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan if @dxchan;
                my @intcalls = map { $_->nodes } @localnodes if @localnodes;
                my $ref = Route::Node::get($self->{call});
@@ -1727,6 +1726,8 @@ sub disconnect
        my $pc39flag = shift;
        my $call = $self->call;
 
+       return if $self->{disconnecting}++;
+       
        unless ($pc39flag && $pc39flag == 1) {
                $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
        }
@@ -1788,7 +1789,7 @@ sub send_route
        for (; @_ && $no; $no--) {
                my $r = shift;
                
-               if ($self->{routefilter}) {
+               if (!$self->{isolate} && $self->{routefilter}) {
                        $filter = undef;
                        if ($r) {
                                ($filter, $hops) = $self->{routefilter}->it($self->{call}, $self->{dxcc}, $self->{itu}, $self->{cq}, $r->call, $r->dxcc, $r->itu, $r->cq);
@@ -1801,7 +1802,7 @@ sub send_route
                                dbg("was sent a null value") if isdbg('chanerr');
                        }
                } else {
-                       push @rin, $r;
+                       push @rin, $r unless $self->{isolate} && $r->call ne $main::mycall;
                }
        }
        if (@rin) {
@@ -1832,7 +1833,7 @@ sub broadcast_route
                if ($dxchan->{routefilter}) {
                        $dxchan->send_route($generate, @_);
                } else {
-                       $dxchan->send_route($generate, @_) unless $self->{isolate} || $dxchan->{isolate};
+                       $dxchan->send_route($generate, @_) unless $self->{isolate};
                }
        }
 }