fix probs with eph dup deleting
[spider.git] / perl / DXProt.pm
index 9791850521d5fbb00ac2ba190223fe9436ce91d5..5ab4186b2c64cb6e8082f5b57800a4c61dc30a82 100644 (file)
@@ -63,7 +63,7 @@ $last10 = $last_pc50 = time;
 $ann_to_talk = 1;
 $rspfcheck = 1;
 $eph_restime = 180;
-$eph_info_restime = 15*60;
+$eph_info_restime = 60*60;
 $eph_pc34_restime = 30;
 
 @checklist = 
@@ -442,6 +442,7 @@ sub normal
                                }
                        }
 
+
                        my @spot = Spot::prepare($field[1], $field[2], $d, $field[5], $field[6], $field[7]);
                        # global spot filtering on INPUT
                        if ($self->{inspotsfilter}) {
@@ -451,7 +452,10 @@ sub normal
                                        return;
                                }
                        }
-                       
+
+                       # this goes after the input filtering, but before the add
+                       # so that if it is input filtered, it isn't added to the dup
+                       # list. This allows it to come in from a "legitimate" source
                        if (Spot::dup($field[1], $field[2], $d, $field[5])) {
                                dbg("PCPROT: Duplicate Spot ignored\n") if isdbg('chanerr');
                                return;
@@ -617,7 +621,7 @@ sub normal
                                next unless $call && $conf && defined $here && is_callsign($call);
                                next if $call eq $main::mycall;
 
-                               eph_del_regex("^PC17\^$call\^$ncall");
+                               eph_del_regex("^PC17\\^$call\\^$ncall");
                                
                                $conf = $conf eq '*';
 
@@ -669,7 +673,7 @@ sub normal
                                return;
                        }
 
-                       eph_del_regex("^PC16.*$ncall.*$ucall");
+                       eph_del_regex("^PC16\\^$ncall.*$ucall");
                        
                        if ($ncall eq $main::mycall) {
                                dbg("PCPROT: trying to alter config on this node from outside!") if isdbg('chanerr');
@@ -739,7 +743,7 @@ sub normal
                                my $ver = $field[$i+3];
                                next unless defined $here && defined $conf && is_callsign($call);
 
-                               eph_del_regex("^PC(?:21\^$call|17\^[^\^]+\^$call)");
+                               eph_del_regex("^PC(?:21\\^$call|17\\^[^\\^]+\\^$call)");
                                
                                # check for sane parameters
 #                              $ver = 5000 if $ver eq '0000';
@@ -830,7 +834,6 @@ sub normal
                        # 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;
                        }
 
@@ -989,7 +992,7 @@ sub normal
                }
                
                if ($pcno == 35) {              # remote command replies
-                       eph_del_regex("^PC35\^$field[2]\^$field[1]\^");
+                       eph_del_regex("^PC35\\^$field[2]\\^$field[1]\\^");
                        $self->process_rcmd_reply($field[1], $field[2], $field[1], $field[3]);
                        return;
                }
@@ -1003,7 +1006,6 @@ sub normal
                if ($pcno == 39) {              # incoming disconnect
                        if ($field[1] eq $self->{call}) {
                                $self->disconnect(1);
-                               eph_del_regex("^PC(?:1[679]|21).*$field[1]");
                        } else {
                                dbg("PCPROT: came in on wrong channel") if isdbg('chanerr');
                        }
@@ -1762,6 +1764,10 @@ sub disconnect
                $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
        }
 
+       # get rid of any PC16 and 19s
+       eph_del_regex("^PC16\\^$call");
+       eph_del_regex("^PC19\\^.*$call");
+
        # do routing stuff
        my $node = Route::Node::get($call);
        my @rout;
@@ -1966,5 +1972,10 @@ sub eph_list
        }
        return @out;
 }
+
+sub run_cmd
+{
+       goto &DXCommandmode::run_cmd;
+}
 1;
 __END__