and stop incoming LOCAL pc93 being displayed
[spider.git] / perl / DXProtHandle.pm
index b6f4473d5c7bf2f1e75da328621a7a021a173fb0..b1726e98a1f4ae6ac184374d497f3943c6132f07 100644 (file)
@@ -273,12 +273,13 @@ sub handle_11
        }
 
        # local processing
-       my $r;
-       eval {
-               $r = Local::spot($self, @spot);
-       };
-       #                       dbg("Local::spot1 error $@") if isdbg('local') if $@;
-       return if $r;
+       if (defined *Local::spot) {
+               my $r;
+               eval {
+                       $r = Local::spot($self, @spot);
+               };
+               return if $r;
+       }
 
        # DON'T be silly and send on PC26s!
        return if $pcno == 26;
@@ -357,6 +358,15 @@ sub handle_12
        } else {
                $self->route($_[2], $line);
        }
+
+       # local processing
+       if (defined *Local::ann) {
+               my $r;
+               eval {
+                       $r = Local::ann($self, $line, @_[1..6]);
+               };
+               return if $r;
+       }
 }
 
 sub handle_15
@@ -937,12 +947,13 @@ sub handle_23
        # note this only takes the first one it gets
        Geomag::update($d, $_[2], $sfi, $k, $i, @_[6..8], $r);
 
-       my $rep;
-       eval {
-               $rep = Local::wwv($self, $_[1], $_[2], $sfi, $k, $i, @_[6..8], $r);
-       };
-       #                       dbg("Local::wwv2 error $@") if isdbg('local') if $@;
-       return if $rep;
+       if (defined *Local::wwv) {
+               my $rep;
+               eval {
+                       $rep = Local::wwv($self, $_[1], $_[2], $sfi, $k, $i, @_[6..8], $r);
+               };
+               return if $rep;
+       }
 
        # DON'T be silly and send on PC27s!
        return if $pcno == 27;
@@ -1307,12 +1318,13 @@ sub handle_73
 
        my $wcy = WCY::update($d, @_[2..12]);
 
-       my $rep;
-       eval {
-               $rep = Local::wcy($self, @_[1..12]);
-       };
-       # dbg("Local::wcy error $@") if isdbg('local') if $@;
-       return if $rep;
+       if (defined *Local::wcy) {
+               my $rep;
+               eval {
+                       $rep = Local::wcy($self, @_[1..12]);
+               };
+               return if $rep;
+       }
 
        # broadcast to the eager world
        send_wcy_spot($self, $line, $d, @_[2..12]);
@@ -1517,7 +1529,7 @@ sub check_pc9x_t
                                        # and old dupes with $t = 234, $lastid = 256 (which give answers 249 and
                                        # 86378 respectively in the calculation below).
                                        #
-                                       if (($t-$lastid)%86400 > $pc9x_past_age) {
+                                       if ($t+86400-$lastid > $pc9x_past_age) {
                                                dbg("PCPROT: dup id on $t <= lastid $lastid, ignored") if isdbg('chanerr') || isdbg('pc92dedupe');
                                                return undef;
                                        }
@@ -1530,6 +1542,7 @@ sub check_pc9x_t
        } elsif ($create) {
                $parent = Route::Node->new($call);
        } else {
+               dbg("PCPROT: $call does not exist, ignored") if isdbg('pc92dedupe');
                return undef;
        }
        if (isdbg('pc92dedupe')) {
@@ -1874,6 +1887,12 @@ sub handle_93
                return;
        }
 
+       # ignore PC93 coming in from outside this node with a target of local
+       if ($to eq 'LOCAL' && $self != $main::me) {
+               dbg("PCPROT: incoming LOCAL chat not from local node, ignored") if isdbg('chanerr');
+               return;
+       }
+
        # if it is routeable then then treat it like a talk
        my $ref = Route::get($to);
        if ($ref) {
@@ -1921,7 +1940,9 @@ sub handle_93
                # chat messages to non-pc9x nodes
                $self->send_chat(1, pc12($from, $text, undef, $to, undef, $pcall), $from, '*', $text, $to, $pcall, '0');
        }
-       $self->broadcast_route_pc9x($pcall, undef, $line, 0);
+
+       # broadcast this chat sentence everywhere unless it is targetted to 'LOCAL'
+       $self->broadcast_route_pc9x($pcall, undef, $line, 0) unless $to eq 'LOCAL' || $via eq 'LOCAL';
 }
 
 # if get here then rebroadcast the thing with its Hop count decremented (if