Added input Spot filtering
authorminima <minima>
Sun, 22 Apr 2001 22:23:23 +0000 (22:23 +0000)
committerminima <minima>
Sun, 22 Apr 2001 22:23:23 +0000 (22:23 +0000)
Changes
cmd/dx.pl
perl/DXProt.pm
perl/Filter.pm
perl/Spot.pm

diff --git a/Changes b/Changes
index 60dc51a41a4ff238faf3425ce48be0c46ee274e7..2fe35ab2b5ad4de612b9b7cd7ab5d04b2bab6112 100644 (file)
--- 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=======================================================================
index 3f366dffb20f82ef5bb508c370b55f836066ce9e..c25e5df07c533a12cc283e30fd91edd2aff39c9e 100644 (file)
--- 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);
        }
index ef3f331707180c754807f085411992367b1b267c..eb65eb44fd7b31415216e7b1209fdf252de50fbe 100644 (file)
@@ -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:-
index b927dc1f0700c0917e9bccbc61f0f345123c2c54..fbdb4f300fb579162fa34708504bac792f59a1a9 100644 (file)
@@ -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);
        }
index 57cf2599a103e0c71d310da69487144387898ddb..b5b75e3883fcbb9825ffd788eaea94502dd77eae 100644 (file)
@@ -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
 #