added baddx and badmsg functionality
[spider.git] / perl / DXProt.pm
index 10ce5fa193043475802ed715c051e8d5c1b1fceb..2feeda2d3d19282e1bb7ca5fa0d49b078fd6fe84 100644 (file)
@@ -27,7 +27,9 @@ use Local;
 use Carp;
 
 use strict;
-use vars qw($me $pc11_max_age $pc11_dup_age $pc23_dup_age %spotdup %wwvdup $last_hour %pings %rcmds %nodehops);
+use vars qw($me $pc11_max_age $pc11_dup_age $pc23_dup_age 
+                       %spotdup %wwvdup $last_hour %pings %rcmds 
+                       %nodehops @baddx $baddxfn);
 
 $me = undef;                                   # the channel id for this cluster
 $pc11_max_age = 1*3600;                        # the maximum age for an incoming 'real-time' pc11
@@ -39,7 +41,9 @@ $last_hour = time;                            # last time I did an hourly periodic update
 %pings = ();                    # outstanding ping requests outbound
 %rcmds = ();                    # outstanding rcmd requests outbound
 %nodehops = ();                 # node specific hop control
+@baddx = ();                    # list of illegal spotted callsigns
 
+$baddxfn = "$main::data/baddx.pl";
 
 sub init
 {
@@ -69,6 +73,9 @@ sub init
                $wwvdup{$dupkey} = $_->[1];
        }
 
+       # load the baddx file
+       do "$baddxfn" if -e "$baddxfn";
+       print "$@\n" if $@;
 }
 
 #
@@ -138,7 +145,7 @@ sub normal
        eval {
                $pcr = Local::pcprot($self, $pcno, @field);
        };
-       dbg('local', "Local::pcprot error $@") if $@;
+#      dbg('local', "Local::pcprot error $@") if $@;
        return if $pcr;
        
  SWITCH: {
@@ -189,15 +196,21 @@ sub normal
                        }
                        
                        $spotdup{$dupkey} = $d;
+
+                       # is it 'baddx'
+                       if (grep $field[2] eq $_, @baddx) {
+                               dbg('chan', "Bad DX spot, ignored");
+                               return;
+                       }
                        
                        my $spot = Spot::add($freq, $field[2], $d, $text, $spotter, $field[7]);
                        
                        # local processing 
                        my $r;
                        eval {
-                               $r = Local::spot1($self, $freq, $field[2], $d, $text, $spotter, $field[7]);
+                               $r = Local::spot($self, $freq, $field[2], $d, $text, $spotter, $field[7]);
                        };
-                       dbg('local', "Local::spot1 error $@") if $@;
+#                      dbg('local', "Local::spot1 error $@") if $@;
                        return if $r;
 
                        # send orf to the users
@@ -271,7 +284,7 @@ sub normal
                        
                        for ($i = 2; $i < $#field; $i++) {
                                my ($call, $confmode, $here) = $field[$i] =~ /^(\S+) (\S) (\d)/o;
-                               next if length $call < 3 || length $call > 8;
+                               next if !$call || length $call < 3 || length $call > 8;
                                next if !$confmode;
                                $call = uc $call;
                                next if DXCluster->get_exact($call); # we already have this (loop?)
@@ -389,15 +402,16 @@ sub normal
                                dbg('chan', "WWV Date ($field[1] $field[2]) out of range");
                                return;
                        }
-                       
                        $wwvdup{$dupkey} = $d;
+                       $field[6] =~ s/-\d+$//o;            # remove spotter's ssid
+               
                        my $wwv = Geomag::update($d, $field[2], $sfi, $k, $i, @field[6..$#field]);
 
                        my $r;
                        eval {
-                               $r = Local::wwv2($self, $field[1], $field[2], $sfi, $k, $i, @field[6..$#field]);
+                               $r = Local::wwv($self, $field[1], $field[2], $sfi, $k, $i, @field[6..$#field]);
                        };
-                       dbg('local', "Local::wwv2 error $@") if $@;
+#                      dbg('local', "Local::wwv2 error $@") if $@;
                        return if $r;
 
                        # DON'T be silly and send on PC27s!
@@ -544,7 +558,7 @@ sub normal
                
                if ($pcno == 50) {              # keep alive/user list
                        my $ref = DXCluster->get_exact($field[1]);
-                       $ref->update_users($field[2]) if $ref;
+                       $ref->update_users($field[2]) if $ref;                  
                        last SWITCH;
                }