prevent hop counts of -1 being generated.
[spider.git] / perl / DXProt.pm
index 712b478539c79973e47895fdcfc17a98a97e5952..596f1f08d3a1256d1ddfab84a815b6be674feee3 100644 (file)
@@ -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;