X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=0150d5bfd3b92b7c7d3cf8c391ce30ca1f089756;hb=8eb1f5dcc25a223fa06c5e8b5bf7dbe97d42f6dd;hp=f406a98a619bf2460abb532a97d088b8320b1d0d;hpb=febdc9bd8f6cd065d217ba089fab4361e9980f35;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index f406a98a..0150d5bf 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -232,18 +232,21 @@ sub get sub alldxchan { my $self = shift; - + my @dxchan; my $dxchan = DXChannel->get($self->{call}); - if ($dxchan) { - return (grep $dxchan == $_, @_) ? () : ($dxchan); - } + push @dxchan, $dxchan if $dxchan; # it isn't, build up a list of dxchannels and possible ping times # for all the candidates. - my @dxchan = @_; foreach my $p (@{$self->{parent}}) { - my $ref = $self->get($p); - push @dxchan, $ref->alldxchan(@dxchan); + my $dxchan = DXChannel->get($p); + if ($dxchan) { + push @dxchan, $dxchan if grep $dxchan ne $_, @dxchan; + } else { + next if $p eq $main::mycall; # the root + my $ref = $self->get($p); + push @dxchan, $ref->alldxchan if $ref; + } } return @dxchan; } @@ -251,7 +254,9 @@ sub alldxchan sub dxchan { my $self = shift; - my $dxchan; + my $dxchan = DXChannel->get($self->{call}); + return $dxchan = $dxchan; + my @dxchan = $self->alldxchan; return undef unless @dxchan;