X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=eb83af11f8e16d6c1cb55e7e6429ddf6905911af;hb=ba799b8ac9feef688cff478a4006399b6dfc183f;hp=3301099890e23214948639c8aa28c667bc52dbfd;hpb=c1540ccd7990ec4bd151604dd63583d19fe4d0f6;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index 33010998..eb83af11 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -289,22 +289,35 @@ 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 - if (my $dxchan = DXChannel::get($call)) { - return $dxchan; - } + dbg("ROUTE: findroutes $call") if isdbg('findroutes'); 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) { + 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'); + $cand{$p} = 99; + next; + } + my $r = Route::Node::get($p); if ($r) { my %r = $r->PC92C_dxchan; @@ -322,11 +335,11 @@ 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) { - dbg("ROUTE: findroute $call -> $_->[0] " . $_->[1]->call); + if (@nout) { + for (@nout) { + dbg("ROUTE: findroutes $call -> $_->[0] " . $_->[1]->call); } } } @@ -339,7 +352,7 @@ sub alldxchan { my $self = shift; my @dxchan = findroutes($self->{call}); - return @dxchan; + return map {$_->[1]} @dxchan; } sub dxchan