X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=perl%2FDXProt.pm;h=42479d86216ff9a43df0d773f77be59bbe417ebc;hb=85915352f85d7fbb42bee4cf8f6a684c62b96dc9;hp=712b478539c79973e47895fdcfc17a98a97e5952;hpb=e228aafbb2f9eee36802d209f5d3bb3eef8e91fc;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 712b4785..42479d86 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -783,7 +783,21 @@ sub announce sub chat { - goto &announce; + my $self = shift; + my $line = shift; + my $isolate = shift; + my $to = shift; + my $target = shift; + my $text = shift; + my ($filter, $hops); + + if ($self->{annfilter}) { + ($filter, $hops) = $self->{annfilter}->it(@_); + return unless $filter; + } + if (($self->is_spider || $self->is_ak1a) && $_[1] ne $main::mycall) { + send_prot_line($self, $filter, $hops, $isolate, $line); + } } @@ -823,13 +837,13 @@ sub send_local_config my $node; my @rawintcalls = map { $_->nodes } @localnodes if @localnodes; my @intcalls; - for $node (@rawintcalls) { - push @intcalls, $node unless grep $node eq $_, @intcalls; + foreach $node (@rawintcalls) { + push @intcalls, $node if grep $_ && $node != $_, @intcalls; } my $ref = Route::Node::get($self->{call}); my @rnodes = $ref->nodes; - for $node (@intcalls) { - push @remotenodes, Route::Node::get($node) unless grep $node eq $_, @rnodes, @remotenodes; + foreach $node (@intcalls) { + push @remotenodes, Route::Node::get($node) if grep $_ && $node != $_, @rnodes, @remotenodes; } $self->send_route($main::mycall, \&pc19, scalar(@remotenodes), @remotenodes); } @@ -1008,7 +1022,7 @@ sub adjust_hops my $call = $self->{call}; my $hops; - if (($hops) = $s =~ /\^H(\d+)\^?~?$/o) { + if (($hops) = $s =~ /\^H([-\d]+)\^?~?$/o) { my ($pcno) = $s =~ /^PC(\d\d)/o; confess "$call called adjust_hops with '$s'" unless $pcno; my $ref = $nodehops{$call} if %nodehops; @@ -1017,8 +1031,11 @@ sub adjust_hops return "" if defined $newhops && $newhops == 0; $newhops = $ref->{default} unless $newhops; return "" if defined $newhops && $newhops == 0; - $newhops = $hops if !$newhops; - $s =~ s/\^H(\d+)(\^~?)$/\^H$newhops$2/ if $newhops; + $newhops = $hops unless $newhops; + return "" unless $newhops > 0; + $s =~ s/\^H(\d+)(\^~?)$/\^H$newhops$2/ if $newhops != $hops; + } else { + return "" unless $hops > 0; } } return $s; @@ -1170,7 +1187,7 @@ sub disconnect # here we determine what needs to go out of the routing table my @rout; - if ($node) { + if ($node && $pc39flag != 2) { dbg('%Route::Node::List = ' . join(',', sort keys %Route::Node::list)) if isdbg('routedisc'); @rout = $node->del($main::routeroot);