X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute.pm;h=16ee88cb52b76b92af3f45f035cf26616a560751;hb=47c7227bbec190df5f30c5bb64d7a78ed120b54b;hp=6a4f96f60c6f9101e7dd6cae66f0b8d42b7ce1ee;hpb=2b58ccdf81685a1167a43c38705a0d84b9d8d661;p=spider.git diff --git a/perl/Route.pm b/perl/Route.pm index 6a4f96f6..16ee88cb 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -40,13 +40,13 @@ use vars qw(%list %valid $filterdef); $filterdef = bless ([ # tag, sort, field, priv, special parser ['channel', 'c', 0], - ['channel_dxcc', 'n', 1], - ['channel_itu', 'n', 2], - ['channel_zone', 'n', 3], + ['channel_dxcc', 'nc', 1], + ['channel_itu', 'ni', 2], + ['channel_zone', 'nz', 3], ['call', 'c', 4], - ['call_dxcc', 'n', 5], - ['call_itu', 'n', 6], - ['call_zone', 'n', 7], + ['call_dxcc', 'nc', 5], + ['call_itu', 'ni', 6], + ['call_zone', 'nz', 7], ], 'Filter::Cmd'); @@ -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) { @@ -305,6 +323,8 @@ sub dxchan return $dxchan; } + + # # track destruction #