make PC17 generation more unconditional
[spider.git] / perl / DXProt.pm
index 7a39bb3ac81a1e2d2ed0eb161fdd7c4c861f79c1..4d716ce79844f486132e09d917b715381aebd070 100644 (file)
@@ -396,7 +396,7 @@ sub normal
                        }
                        
                        # rsfp check
-                       return if $rspfcheck and !$self->rspfcheck(1, $field[7], $field[6]);
+#                      return if $rspfcheck and !$self->rspfcheck(1, $field[7], $field[6]);
 
                        # if this is a 'nodx' node then ignore it
                        if ($badnode->in($field[7])) {
@@ -431,10 +431,6 @@ sub normal
                                dbg("PCPROT: useless 'BUSTED' spot") if isdbg('chanerr');
                                return;
                        }
-                       if (Spot::dup($field[1], $field[2], $d, $field[5])) {
-                               dbg("PCPROT: Duplicate Spot ignored\n") if isdbg('chanerr');
-                               return;
-                       }
                        if ($censorpc) {
                                my @bad;
                                if (@bad = BadWords::check($field[5])) {
@@ -453,6 +449,11 @@ sub normal
                                }
                        }
                        
+                       if (Spot::dup($field[1], $field[2], $d, $field[5])) {
+                               dbg("PCPROT: Duplicate Spot ignored\n") if isdbg('chanerr');
+                               return;
+                       }
+
                        # add it 
                        Spot::add(@spot);
 
@@ -528,14 +529,10 @@ sub normal
                
                if ($pcno == 12) {              # announces
 
-                       return if $rspfcheck and !$self->rspfcheck(1, $field[5], $field[1]);
+#                      return if $rspfcheck and !$self->rspfcheck(1, $field[5], $field[1]);
 
                        # announce duplicate checking
                        $field[3] =~ s/^\s+//;  # remove leading blanks
-                       if (AnnTalk::dup($field[1], $field[2], $field[3])) {
-                               dbg("PCPROT: Duplicate Announce ignored") if isdbg('chanerr');
-                               return;
-                       }
 
                        if ($censorpc) {
                                my @bad;
@@ -696,9 +693,8 @@ sub normal
                        # input filter if required
                        return unless $self->in_filter_route($parent);
                        
-                       my @rout = $parent->del_user($uref);
-
-                       $self->route_pc17($parent, @rout) if @rout;
+                       $parent->del_user($uref);
+                       $self->route_pc17($parent, $uref);
                        return;
                }
                
@@ -748,6 +744,13 @@ sub normal
                                next if length $call < 3; # min 3 letter callsigns
                                next if $call eq $main::mycall;
 
+                               # check that this PC19 isn't trying to alter the wrong dxchan
+                               my $dxchan = DXChannel->get($call);
+                               if ($dxchan && $dxchan != $self) {
+                                       dbg("PCPROT: PC19 from $self->{call} trying to alter wrong locally connected $call, ignored!") if isdbg('chanerr');
+                                       return;
+                               }
+
                                # update it if required
                                my $r = Route::Node::get($call);
                                my $flags = Route::here($here)|Route::conf($conf);
@@ -838,8 +841,8 @@ sub normal
                                my $node = Route::Node::get($call);
                                if ($node) {
 
-                                       my $dxchan = $node->dxchan;
-                                       if ($dxchan && $dxchan ne $self) {
+                                       my $dxchan = DXChannel->get($call);
+                                       if ($dxchan && $dxchan != $self) {
                                                dbg("PCPROT: PC21 from $self->{call} trying to alter locally connected $call, ignored!") if isdbg('chanerr');
                                                return;
                                        }
@@ -1451,6 +1454,11 @@ sub send_announce
                }
        }
 
+       if (AnnTalk::dup($_[0], $_[1], $_[2])) {
+               dbg("PCPROT: Duplicate Announce ignored") if isdbg('chanerr');
+               return;
+       }
+
        Log('ann', $target, $_[0], $text);
 
        # send it if it isn't the except list and isn't isolated and still has a hop count