From: minima Date: Sun, 22 Apr 2001 22:23:23 +0000 (+0000) Subject: Added input Spot filtering X-Git-Tag: R_1_47~12 X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?p=spider.git;a=commitdiff_plain;h=0e49d2c191786b825674e0cca106eef004c99899 Added input Spot filtering --- diff --git a/Changes b/Changes index 60dc51a4..2fe35ab2 100644 --- a/Changes +++ b/Changes @@ -1,7 +1,8 @@ 22Apr01======================================================================= 1. Sysops can now have full privileges if there is a ExtMsg listener on localhost (or everything) and they telnet to localhost and login with their -callsign. +callsign. This means that they don't need a client anymore (for local access) +2. added input spot filtering. 18Apr01======================================================================= 1. added Ian M0AZM's Java Client (SpiderConsole) 17Apr01======================================================================= diff --git a/cmd/dx.pl b/cmd/dx.pl index 3f366dff..c25e5df0 100644 --- a/cmd/dx.pl +++ b/cmd/dx.pl @@ -104,8 +104,11 @@ if (grep $_ eq $spotted, @DXProt::baddx) { push @out, $buf; } else { return (1, $self->msg('dup')) if Spot::dup($freq, $spotted, (int ($main::systime/60)) * 60, $line); - my @spot = Spot::add($freq, $spotted, $main::systime, $line, $spotter, $main::mycall); + my @spot = Spot::prepare($freq, $spotted, $main::systime, $line, $spotter, $main::mycall); if (@spot) { + # store it + Spot::add(@out); + # send orf to the users DXProt::send_dx_spot($self, DXProt::pc11($spotter, $freq, $spotted, $line), @spot); } diff --git a/perl/DXProt.pm b/perl/DXProt.pm index ef3f3317..eb65eb44 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -370,8 +370,19 @@ sub normal return; } } + + my @spot = Spot::prepare($field[1], $field[2], $d, $field[5], $field[6], $field[7]); + # global spot filtering on INPUT + if ($self->{inspotsfilter}) { + my ($filter, $hops) = $self->{inspotsfilter}->it(@spot); + unless ($filter) { + dbg('chan', "PCPROT: Rejected by filter"); + return; + } + } - my @spot = Spot::add($field[1], $field[2], $d, $field[5], $field[6], $field[7]); + # add it + Spot::add(@spot); # # @spot at this point contains:- diff --git a/perl/Filter.pm b/perl/Filter.pm index b927dc1f..fbdb4f30 100644 --- a/perl/Filter.pm +++ b/perl/Filter.pm @@ -271,12 +271,11 @@ sub install my $remove = shift; my $name = uc $self->{name}; my $sort = $self->{sort}; - my ($in) = $name =~ s/^IN_//; + my $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); } diff --git a/perl/Spot.pm b/perl/Spot.pm index 57cf2599..b5b75e38 100644 --- a/perl/Spot.pm +++ b/perl/Spot.pm @@ -95,20 +95,20 @@ sub prefix return $fp->{prefix}; } -# add a spot to the data file (call as Spot::add) -sub add +# fix up the full spot data from the basic spot data +sub prepare { - my @spot = @_; # $freq, $call, $t, $comment, $spotter = @_ - my @out = @spot[0..4]; # just up to the spotter + # $freq, $call, $t, $comment, $spotter = @_ + my @out = @_[0..4]; # just up to the spotter # normalise frequency - $spot[0] = sprintf "%.f", $spot[0]; + $_[0] = sprintf "%.f", $_[0]; # remove ssids if present on spotter $out[4] =~ s/-\d+$//o; # remove leading and trailing spaces - $spot[3] = unpad($spot[3]); + $_[3] = unpad($_[3]); # add the 'dxcc' country on the end for both spotted and spotter, then the cluster call my @dxcc = Prefix::extract($out[1]); @@ -121,17 +121,16 @@ sub add my $spotter_itu = (@dxcc > 0 ) ? $dxcc[1]->itu() : 0; my $spotter_cq = (@dxcc > 0 ) ? $dxcc[1]->cq() : 0; push @out, $spotter_dxcc; - push @out, $spot[5]; - - my $buf = join("\^", @out); - - # compare dates to see whether need to open another save file (remember, redefining $fp - # automagically closes the output file (if any)). - $fp->writeunix($out[2], $buf); - + push @out, $_[5]; return (@out, $spotted_itu, $spotted_cq, $spotter_itu, $spotter_cq); } +sub add +{ + my $buf = join("\^", @_[0..7]); + $fp->writeunix($_[2], $buf); +} + # search the spot database for records based on the field no and an expression # this returns a set of references to the spots #