X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=3c1c453e523a2a4088423576441b5730c771dade;hb=59e7157e3e342e629b1badcf1ba7d992b58a5caf;hp=3301099890e23214948639c8aa28c667bc52dbfd;hpb=c1540ccd7990ec4bd151604dd63583d19fe4d0f6;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index 33010998..3c1c453e 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -291,11 +291,13 @@ sub findroutes my $call = shift; my @out; - dbg("ROUTE: findroutes: $call") if isdbg('findroutes'); + dbg("ROUTE: findroutes $call") if isdbg('findroutes'); # return immediately if we are directly connected - if (my $dxchan = DXChannel::get($call)) { - return $dxchan; + my $dxchan = DXChannel::get($call); + if ($dxchan) { + dbg("ROUTE: findroutes $call -> directly connected") if isdbg('findroutes'); + return [99, $dxchan]; } my $nref = Route::get($call); @@ -305,6 +307,13 @@ sub findroutes 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 + $dxchan = DXChannel::get($p); + if ($dxchan) { + dbg("ROUTE: findroutes $call -> connected direct via parent $p") if isdbg('findroutes'); + return [99, $dxchan]; + } + my $r = Route::Node::get($p); if ($r) { my %r = $r->PC92C_dxchan; @@ -322,11 +331,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 +348,7 @@ sub alldxchan { my $self = shift; my @dxchan = findroutes($self->{call}); - return @dxchan; + return map {$_->[1]} @dxchan; } sub dxchan