do non blocking connects
[spider.git] / perl / DXProt.pm
index f03a610327cdccf0c77e361ce6c77868ff70b99e..fd47a28a2860afa87f393bc2bc4e309793076272 100644 (file)
@@ -46,7 +46,7 @@ $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
-$censorpc = 0;                                 # Do a BadWords::check on text fields and reject things
+$censorpc = 1;                                 # Do a BadWords::check on text fields and reject things
                                                                # loads of 'bad things'
 $baddx = new DXHash "baddx";
 $badspotter = new DXHash "badspotter";
@@ -236,13 +236,10 @@ sub start
 
        # send initialisation string
        unless ($self->{outbound}) {
-#              $self->send(pc38()) if DXNode->get_all();
                $self->send(pc18());
                $self->{lastping} = $main::systime;
        } else {
-               # remove from outstanding connects queue
-               @main::outstanding_connects = grep {$_->{call} ne $call} @main::outstanding_connects;
-               $self->{lastping} = $main::systime + $self->pingint / 2;
+               $self->{lastping} = $main::systime + ($self->pingint / 2);
        }
        $self->state('init');
        $self->pc50_t(time);
@@ -336,7 +333,7 @@ sub normal
                        }
                        
                        # if this is a 'bad spotter' user then ignore it
-                       if ($badspotter->in($field[7])) {
+                       if ($badspotter->in($field[6])) {
                                dbg('chan', "PCPROT: Bad Spotter, dropped");
                                return;
                        }
@@ -357,6 +354,11 @@ sub normal
                        
                        # do some de-duping
                        $field[5] =~ s/^\s+//;      # take any leading blanks off
+                       $field[2] = unpad($field[2]);   # take off leading and trailing blanks from spotted callsign
+                       if ($field[2] =~ /BUST\w*$/) {
+                               dbg('chan', "PCPROT: useless 'BUSTED' spot");
+                               return;
+                       }
                        if (Spot::dup($field[1], $field[2], $d, $field[5])) {
                                dbg('chan', "PCPROT: Duplicate Spot ignored\n");
                                return;
@@ -596,12 +598,16 @@ sub normal
                                dbg('chan', "PCPROT: $field[2] came in on wrong channel");
                                return;
                        }
-                       if (($dxchan = DXChannel->get($field[2])) && $dxchan != $self) {
-                               dbg('chan', "PCPROT: $field[2] connected locally");
+                       if ($dxchan = DXChannel->get($field[1])) {
+                               dbg('chan', "PCPROT: $field[1] connected locally");
                                return;
                        }
                        my $ref = DXCluster->get_exact($field[1]);
                        if ($ref) {
+                               if ($ref->mynode != $node) {
+                                       dbg('chan', "PCPROT: $field[1] came in from wrong node $field[2]");
+                                       return;
+                               }
                                $ref->del;
                        } else {
                                dbg('chan', "PCPROT: $field[1] not known" );
@@ -1142,7 +1148,6 @@ sub finish
 {
        my $self = shift;
        my $call = $self->call;
-       my $conn = shift;
        my $ref = DXCluster->get_exact($call);
        
        # unbusy and stop and outgoing mail