X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=443b3ee9e037a4e2a19c0de5299ef5b11de5441c;hb=8081646e932b160975ad061a7a2741418b099761;hp=794b8d3d71e15084a36d6854a81bf4129e33a49e;hpb=c8e15fc7003b239a21787cf79f22debdf3c419fd;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index 794b8d3d..443b3ee9 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -289,24 +289,34 @@ sub get sub findroutes { my $call = shift; + my %cand; my @out; dbg("ROUTE: findroutes $call") if isdbg('findroutes'); - # return immediately if we are directly connected - my $dxchan = DXChannel::get($call); - return $dxchan if $dxchan; - my $nref = Route::get($call); return () unless $nref; + # we are directly connected, force "best possible" priority, but + # carry on in case user is connected on other nodes. + my $dxchan = DXChannel::get($call); + if ($dxchan) { + dbg("ROUTE: findroutes $call -> directly connected") if isdbg('findroutes'); + $cand{$call} = 99; + } + # obtain the dxchannels that have seen this thingy my @parent = $nref->isa('Route::User') ? @{$nref->{parent}} : $call; - my %cand; foreach my $p (@parent) { - # return immediately if we are directly connected or a user's parent node is + next if $p eq $main::mycall; # this is dealt with above + + # deal with directly connected nodes, again "best priority" $dxchan = DXChannel::get($p); - return $dxchan if $dxchan; + if ($dxchan) { + dbg("ROUTE: findroutes $call -> connected direct via parent $p") if isdbg('findroutes'); + $cand{$p} = 99; + next; + } my $r = Route::Node::get($p); if ($r) { @@ -325,10 +335,10 @@ sub findroutes } # get a sorted list of dxchannels with the highest hop count first - my @nout = map {$_->[1]} sort {$b->[0] <=> $a->[0]} @out; + my @nout = sort {$b->[0] <=> $a->[0]} @out; if (isdbg('findroutes')) { - if (@out) { - foreach (sort {$b->[0] <=> $a->[0]} @out) { + if (@nout) { + for (@nout) { dbg("ROUTE: findroutes $call -> $_->[0] " . $_->[1]->call); } } @@ -342,7 +352,7 @@ sub alldxchan { my $self = shift; my @dxchan = findroutes($self->{call}); - return @dxchan; + return map {$_->[1]} @dxchan; } sub dxchan @@ -365,7 +375,6 @@ sub delete_interface } - # # track destruction #