1. make PC21 coming from the channel's node call then treat it as a PC39 and
[spider.git] / perl / DXProt.pm
index ec18e19f499f4298921d127909f01ab6644c14fe..7bffd606b25276058b368abf94b28de3cc4bc7ac 100644 (file)
@@ -693,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;
                }
                
@@ -824,6 +823,14 @@ sub normal
                                return;
                        }
 
+                       # if I get a PC21 from the same callsign as self then treat it
+                       # as a PC39: I have gone away
+                       if ($call eq $self->call) {
+                               $self->disconnect(1);
+                               eph_del_regex("^PC(?:1[679]|21).*$field[1]");
+                               return;
+                       }
+
                        eph_del_regex("^PC1[79].*$call");
                        
                        my @rout;
@@ -834,11 +841,6 @@ sub normal
                                return;
                        }
                        if ($call ne $main::mycall) { # don't allow malicious buggers to disconnect me!
-                               if ($call eq $self->{call}) {
-                                       dbg("PCPROT: Trying to disconnect myself with PC21") if isdbg('chanerr');
-                                       return;
-                               }
-
                                my $node = Route::Node::get($call);
                                if ($node) {
 
@@ -1156,7 +1158,7 @@ sub normal
                                return;
                        }
                        @field = map { unpad($_) } @field;
-                       if (WCY::dup($d,@field[3..7])) {
+                       if (WCY::dup($d)) {
                                dbg("PCPROT: Dup WCY Spot ignored\n") if isdbg('chanerr');
                                return;
                        }
@@ -1165,7 +1167,7 @@ sub normal
 
                        my $rep;
                        eval {
-                               $rep = Local::wwv($self, @field[1..12]);
+                               $rep = Local::wcy($self, @field[1..12]);
                        };
                        # dbg("Local::wcy error $@") if isdbg('local') if $@;
                        return if $rep;