X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=ee84c1508b3bdd47e07edad8597845760a34ac19;hb=47597a3f8635c4d4de89419c0c808ddcda59b9d5;hp=6a4f96f60c6f9101e7dd6cae66f0b8d42b7ce1ee;hpb=2b58ccdf81685a1167a43c38705a0d84b9d8d661;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index 6a4f96f6..ee84c150 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -92,28 +92,41 @@ sub _addlist { my $self = shift; my $field = shift; + my @out; foreach my $c (@_) { - my $call = _getcall($c); - unless (grep {$_ eq $call} @{$self->{$field}}) { + confess "Need a ref here" unless ref($c); + + my $call = $c->{call}; + unless (grep $_ eq $call, @{$self->{$field}}) { push @{$self->{$field}}, $call; dbg(ref($self) . " adding $call to " . $self->{call} . "->\{$field\}") if isdbg('routelow'); + push @out, $c; } } - return $self->{$field}; + return @out; } sub _dellist { my $self = shift; my $field = shift; + my @out; foreach my $c (@_) { - my $call = _getcall($c); - if (grep {$_ eq $call} @{$self->{$field}}) { + confess "Need a ref here" unless ref($c); + my $call = $c->{call}; + if (grep $_ eq $call, @{$self->{$field}}) { $self->{$field} = [ grep {$_ ne $call} @{$self->{$field}} ]; dbg(ref($self) . " deleting $call from " . $self->{call} . "->\{$field\}") if isdbg('routelow'); + push @out, $c; } } - return $self->{$field}; + return @out; +} + +sub is_empty +{ + my $self = shift; + return @{$self->{$_[0]}} == 0; } # @@ -261,6 +274,7 @@ sub alldxchan my $self = shift; my @dxchan; # dbg("Trying node $self->{call}") if isdbg('routech'); + my $dxchan = DXChannel->get($self->{call}); push @dxchan, $dxchan if $dxchan; @@ -288,12 +302,16 @@ sub alldxchan sub dxchan { my $self = shift; + + # ALWAYS return the locally connected channel if present; + my $dxchan = DXChannel->get($self->call); + return $dxchan if $dxchan; + my @dxchan = $self->alldxchan; return undef unless @dxchan; # determine the minimum ping channel my $minping = 99999999; - my $dxchan; foreach my $dxc (@dxchan) { my $p = $dxc->pingave; if (defined $p && $p < $minping) {