use strict;
+
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0));
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
use vars qw(%list %valid $filterdef);
%valid = (
$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');
{
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;
}
#
my $self = shift;
my @dxchan;
# dbg("Trying node $self->{call}") if isdbg('routech');
+
my $dxchan = DXChannel->get($self->{call});
push @dxchan, $dxchan if $dxchan;
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) {
return $dxchan;
}
+
+
#
# track destruction
#