fix spurious 'new message' message for unread deleted personals
[spider.git] / perl / DXProt.pm
index f8e2b4b99ee9d0c85c1f1a8d75880fde8f5b6b0c..7a39bb3ac81a1e2d2ed0eb161fdd7c4c861f79c1 100644 (file)
@@ -208,7 +208,7 @@ sub new
        # add this node to the table, the values get filled in later
        my $pkg = shift;
        my $call = shift;
-       $main::routeroot->add($call, '0000', Route::here(1)) if $call ne $main::mycall;
+       $main::routeroot->add($call, '5000', Route::here(1)) if $call ne $main::mycall;
 
        return $self;
 }
@@ -238,6 +238,9 @@ sub start
        $self->{here} = 1;
        $self->{width} = 80;
 
+       # sort out registration
+       $self->{registered} = 1;
+
        # get the output filters
        $self->{spotsfilter} = Filter::read_in('spots', $call, 0) || Filter::read_in('spots', 'node_default', 0);
        $self->{wwvfilter} = Filter::read_in('wwv', $call, 0) || Filter::read_in('wwv', 'node_default', 0);
@@ -256,6 +259,7 @@ sub start
        # set unbuffered and no echo
        $self->send_now('B',"0");
        $self->send_now('E',"0");
+       $self->conn->echo(0) if $self->conn->can('echo');
        
        # ping neighbour node stuff
        my $ping = $user->pingint;
@@ -415,7 +419,7 @@ sub normal
                        }
 
                        # is it 'baddx'
-                       if ($baddx->in($field[2])) {
+                       if ($baddx->in($field[2]) || BadWords::check($field[2]) || $field[2] =~ /COCK/) {
                                dbg("PCPROT: Bad DX spot, ignored") if isdbg('chanerr');
                                return;
                        }
@@ -739,7 +743,7 @@ sub normal
                                eph_del_regex("^PC(?:21\^$call|17\^[^\^]+\^$call)");
                                
                                # check for sane parameters
-                               $ver = 5000 if $ver eq '0000';
+#                              $ver = 5000 if $ver eq '0000';
                                next if $ver < 5000; # only works with version 5 software
                                next if length $call < 3; # min 3 letter callsigns
                                next if $call eq $main::mycall;
@@ -825,20 +829,21 @@ sub normal
                                $self->disconnect;
                                return;
                        }
-                       my $node = Route::Node::get($call);
                        if ($call ne $main::mycall) { # don't allow malicious buggers to disconnect me!
-                               my $dxchan = $node->dxchan;
-                               if ($dxchan && $dxchan ne $self) {
-                                       dbg("PCPROT: PC21 from $self->{call} trying to alter locally connected $call, ignored!") if isdbg('chanerr');
-                                       return;
-                               }
-
                                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) {
+
+                                       my $dxchan = $node->dxchan;
+                                       if ($dxchan && $dxchan ne $self) {
+                                               dbg("PCPROT: PC21 from $self->{call} trying to alter locally connected $call, ignored!") if isdbg('chanerr');
+                                               return;
+                                       }
+
                                        # input filter it
                                        return unless $self->in_filter_route($node);
 
@@ -956,6 +961,7 @@ sub normal
                }
 
                if (($pcno >= 28 && $pcno <= 33) || $pcno == 40 || $pcno == 42 || $pcno == 49) { # mail/file handling
+                       return if $pcno == 49 && eph_dup($line);
                        if ($pcno == 49 || $field[1] eq $main::mycall) {
                                DXMsg::process($self, $line);
                        } else {
@@ -1768,7 +1774,7 @@ sub talk
        
        $line =~ s/\^/\\5E/g;                   # remove any ^ characters
        $self->send(DXProt::pc10($from, $to, $via, $line, $origin));
-       Log('talk', $self->call, $from, $via?$via:$main::mycall, $line) unless $origin && $origin ne $main::mycall;
+       Log('talk', $to, $from, $via?$via:$self->call, $line) unless $origin && $origin ne $main::mycall;
 }
 
 # send it if it isn't the except list and isn't isolated and still has a hop count