X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=eb83af11f8e16d6c1cb55e7e6429ddf6905911af;hb=ba799b8ac9feef688cff478a4006399b6dfc183f;hp=3c1c453e523a2a4088423576441b5730c771dade;hpb=f4901c535bed1793d405e63137d3cf37e0fa135f;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index 3c1c453e..eb83af11 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -289,29 +289,33 @@ 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 $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'); - return [99, $dxchan]; + $cand{$call} = 99; } - my $nref = Route::get($call); - return () unless $nref; - # 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); if ($dxchan) { dbg("ROUTE: findroutes $call -> connected direct via parent $p") if isdbg('findroutes'); - return [99, $dxchan]; + $cand{$p} = 99; + next; } my $r = Route::Node::get($p);