X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FFilter.pm;h=82130b932041f35a8f2039fb0d433bdf7e96f29a;hb=57f8bfa8204fa6af0d4ed605ee694e6c6ebff40a;hp=8acce7f383bdca5b235433509f94e1e4e98fcc7f;hpb=b85ee0ca2b03ee2c5be20bd430cfa00757b7ebdb;p=spider.git diff --git a/perl/Filter.pm b/perl/Filter.pm index 8acce7f3..82130b93 100644 --- a/perl/Filter.pm +++ b/perl/Filter.pm @@ -89,7 +89,7 @@ sub compile if ($@) { my $sort = $ref->{sort}; my $name = $ref->{name}; - dbg('err', "Error compiling $ar $sort $name: $@"); + dbg("Error compiling $ar $sort $name: $@"); Log('err', "Error compiling $ar $sort $name: $@"); } $rr = $@; @@ -107,7 +107,7 @@ sub read_in $in = undef; my $s = readfilestr($fn); my $newin = eval $s; - dbg('conn', "$@") if $@; + dbg($@) if $@; if ($in) { $newin = new('Filter::Old', $sort, $call, $flag); $newin->{filter} = $in; @@ -184,15 +184,18 @@ sub it { my $self = shift; - my $hops = undef; - my $filter; my @keys = sort $self->getfilkeys; my $key; + my $type = 'Dunno'; + my $asc = '?'; + my $r = @keys > 0 ? 0 : 1; foreach $key (@keys) { $filter = $self->{$key}; if ($filter->{reject} && exists $filter->{reject}->{code}) { + $type = 'reject'; + $asc = $filter->{reject}->{user}; if (&{$filter->{reject}->{code}}(\@_)) { $r = 0; last; @@ -201,6 +204,8 @@ sub it } } if ($filter->{accept} && exists $filter->{accept}->{code}) { + $type = 'accept'; + $asc = $filter->{accept}->{user}; if (&{$filter->{accept}->{code}}(\@_)) { $r = 1; last; @@ -210,16 +215,17 @@ sub it } } - # hops are done differently - if ($self->{hops}) { - my ($comp, $ref); - while (($comp, $ref) = each %{$self->{hops}}) { - my ($field, $h) = @$ref; - if ($_[$field] =~ m{$comp}) { - $hops = $h; - last; - } - } + # hops are done differently (simply) + my $hops = "H$self->{hops}" if exists $self->{hops}; + + if (isdbg('filter')) { + my $args = join '\',\'', @_; + my $true = $r ? "OK " : "REJ"; + my $sort = $self->{sort}; + my $dir = $self->{name} =~ /^in_/i ? "IN " : "OUT"; + + $hops ||= "H?"; + dbg("$true $dir: $type/$sort with $asc on '$args' $hops") if isdbg('filter'); } return ($r, $hops); } @@ -281,12 +287,12 @@ sub install my $remove = shift; my $name = uc $self->{name}; my $sort = $self->{sort}; - my ($in) = $name =~ s/^IN_//; + my $in = ""; + $in = "in" if $name =~ s/^IN_//; $name =~ s/.PL$//; my $dxchan = DXChannel->get($name); if ($dxchan) { - $in = lc $in if $in; my $n = "$in$sort" . "filter"; $dxchan->$n($remove ? undef : $self); } @@ -369,7 +375,7 @@ sub parse } $filter = Filter::read_in($sort, $call, $flag); - $filter = Filter->new($sort, $call, $flag) unless $filter; + $filter = Filter->new($sort, $call, $flag) if !$filter || $filter->isa('Filter::Old'); $ntoken++; next; @@ -466,6 +472,13 @@ sub parse push @t, "(\$r->[$fref->[2]]>=$1 && \$r->[$fref->[2]]<=$2)"; } $s .= "(" . join(' || ', @t) . ")"; + } elsif ($fref->[1] eq 't') { + my @t; + for (@val) { + s/\*//g; + push @t, "\$r->[$fref->[2]]=~/$_/i"; + } + $s .= "(" . join(' || ', @t) . ")"; } else { confess("invalid letter $fref->[1]"); }