X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=f5b6a81860d6a85a4ce5478d2322429f3ff3f86e;hb=ffe3cb4d7395dc23a8d4e37d81b0009707681136;hp=51348c82c0cb6e94e282fe922a46284db377cbb3;hpb=47597a3f8635c4d4de89419c0c808ddcda59b9d5;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 51348c82..f5b6a818 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -654,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 @@ -1405,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}); @@ -1726,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"))); } @@ -1787,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); @@ -1800,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) { @@ -1825,13 +1827,11 @@ sub broadcast_route my $dxchan; my $line; - foreach $dxchan (@dxchan) { - next if $dxchan == $self; - next if $dxchan == $me; - if ($dxchan->{routefilter}) { + unless ($self->{isolate}) { + foreach $dxchan (@dxchan) { + next if $dxchan == $self; + next if $dxchan == $me; $dxchan->send_route($generate, @_); - } else { - $dxchan->send_route($generate, @_) unless $self->{isolate} || $dxchan->{isolate}; } } }