X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FFilter.pm;h=2c32bf025981465e9ae9b8f374fddeb2fa53527c;hb=72568e838d146250a78fea19bd4bbafc760e6a49;hp=abdcaba7363d8dbb2c8e682ed52a23cf644bfbeb;hpb=47597a3f8635c4d4de89419c0c808ddcda59b9d5;p=spider.git diff --git a/perl/Filter.pm b/perl/Filter.pm index abdcaba7..2c32bf02 100644 --- a/perl/Filter.pm +++ b/perl/Filter.pm @@ -30,6 +30,7 @@ use DXVars; use DXUtil; use DXDebug; use Data::Dumper; +use Prefix; use strict; @@ -225,7 +226,7 @@ sub it my $hops = $self->{hops} if exists $self->{hops}; if (isdbg('filter')) { - my $args = join '\',\'', @_; + my $args = join '\',\'', map {defined $_ ? $_ : 'undef'} @_; my $true = $r ? "OK " : "REJ"; my $sort = $self->{sort}; my $dir = $self->{name} =~ /^in_/i ? "IN " : "OUT"; @@ -297,10 +298,23 @@ sub install $in = "in" if $name =~ s/^IN_//; $name =~ s/.PL$//; - my $dxchan = DXChannel->get($name); - if ($dxchan) { + my $dxchan; + my @dxchan; + if ($name eq 'NODE_DEFAULT') { + @dxchan = DXChannel::get_all_nodes(); + } elsif ($name eq 'USER_DEFAULT') { + @dxchan = DXChannel::get_all_users(); + } else { + $dxchan = DXChannel->get($name); + push @dxchan, $dxchan if $dxchan; + } + foreach $dxchan (@dxchan) { my $n = "$in$sort" . "filter"; - $dxchan->$n($remove ? undef : $self); + my $i = $in ? 'IN_' : ''; + my $ref = $dxchan->$n(); + if (!$ref || ($ref && uc $ref->{name} eq "$i$name.PL")) { + $dxchan->$n($remove ? undef : $self); + } } } @@ -471,6 +485,25 @@ sub parse push @t, "\$r->[$fref->[2]]==$_"; } $s .= "(" . join(' || ', @t) . ")"; + } elsif ($fref->[1] =~ /^n[ciz]$/ ) { # for DXCC, ITU, CQ Zone + my @n; + my $cmd = $fref->[1]; + foreach my $v (@val) { + if ($v =~ /^\d+$/) { + push @n, $v unless grep $_ eq $v, @n; + } else { + my @pre = Prefix::extract($v); + return ('numpre', $dxchan->msg('e27', $_)) unless @pre; + shift @pre; + foreach my $p (@pre) { + my $n = $p->dxcc if $cmd eq 'nc' ; + $n = $p->itu if $cmd eq 'ni' ; + $n = $p->cq if $cmd eq 'nz' ; + push @n, $n unless grep $_ eq $n, @n; + } + } + } + $s .= "(" . join(' || ', map {"\$r->[$fref->[2]]==$_"} @n) . ")"; } elsif ($fref->[1] eq 'r') { my @t; for (@val) {