X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=596f1f08d3a1256d1ddfab84a815b6be674feee3;hb=4f9c3eb17f095263fba06f81a98b65999008f50e;hp=e4e0aa49db77409adf7ee3cb097dffbf492f2ec7;hpb=aa63cbca3fa8ba421d356f7e954a69e014204524;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index e4e0aa49..596f1f08 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -823,13 +823,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 +1008,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 +1017,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; @@ -1238,6 +1241,12 @@ sub send_route for (; @_ && $no; $no--) { my $r = shift; + # don't send messages with $self's call in back to them + if ($r->call eq $self->{call}) { + dbg("PCPROT: trying to send $self->{call} back itself") if isdbg('chanerr'); + next; + } + if (!$self->{isolate} && $self->{routefilter}) { $filter = undef; if ($r) { @@ -1314,8 +1323,9 @@ sub broadcast_route_nopc9x next if $origin eq $dxchan->{call}; # don't route some from this call back again. next unless $dxchan->isa('DXProt'); next if $dxchan->{do_pc9x}; - next if ($generate == \&pc16 || $generate==\&pc17) && !$dxchan->user->wantsendpc16; - + if ($generate == \&pc16 || $generate==\&pc17) { + next unless $dxchan->user->wantsendpc16; + } $dxchan->send_route($origin, $generate, @_); } }