remove rspf, add pc10 eph_dup, tidy up eph_dups
authorDirk Koopman <djk@tobit.co.uk>
Mon, 9 Jul 2007 21:34:16 +0000 (22:34 +0100)
committerDirk Koopman <djk@tobit.co.uk>
Mon, 9 Jul 2007 21:34:16 +0000 (22:34 +0100)
perl/DXChannel.pm
perl/DXProt.pm
perl/DXProtHandle.pm
perl/Version.pm

index 7048257188392544b42ca287eed2001e5b1c5162..460eb525d05d503e32c00a4b4d3184cc238a178d 100644 (file)
@@ -573,28 +573,6 @@ sub decode_input
        return ($sort, $call, $line);
 }
 
-sub rspfcheck
-{
-       my ($self, $flag, $node, $user) = @_;
-       my $nref = Route::Node::get($node);
-       my $dxchan = $nref->dxchan if $nref;
-       if ($nref && $dxchan) {
-           if ($dxchan == $self) {
-                       return 1 unless $user;
-                       return 1 if $user eq $node;
-                       my @users = $nref->users;
-                       return 1 if @users == 0 || grep $user eq $_, @users;
-                       dbg("RSPF: $user not on $node") if isdbg('chanerr');
-               } else {
-                       dbg("RSPF: Shortest path for $node is " . $nref->dxchan->{call}) if isdbg('chanerr');
-               }
-       } else {
-               return 1 if $flag;
-               dbg("RSPF: required $node not found" ) if isdbg('chanerr');
-       }
-       return 0;
-}
-
 # broadcast a message to all clusters taking into account isolation
 # [except those mentioned after buffer]
 sub broadcast_nodes
index 5e967fd228c83bfcf21c106b9314ca909f300ce4..0ca491ea24c49842c18612c66fa3914579001ea2 100644 (file)
@@ -41,7 +41,7 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim
                        $last_hour $last10 %eph  %pings %rcmds $ann_to_talk
                        $pingint $obscount %pc19list $chatdupeage $chatimportfn
                        $investigation_int $pc19_version $myprot_version
-                       %nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
+                       %nodehops $baddx $badspotter $badnode $censorpc
                        $allowzero $decode_dk0wcy $send_opernam @checklist
                        $eph_pc15_restime $pc92_update_period $pc92_obs_timeout
                        %pc92_find $pc92_find_timeout $pc92_short_update_period
@@ -63,8 +63,7 @@ $badspotter = new DXHash "badspotter";
 $badnode = new DXHash "badnode";
 $last10 = $last_pc50 = time;
 $ann_to_talk = 1;
-$rspfcheck = 1;
-$eph_restime = 180;
+$eph_restime = 60;
 $eph_info_restime = 60*60;
 $eph_pc15_restime = 6*60;
 $eph_pc34_restime = 30;
index fed2cbeea1efad9eb25675aa209090fba341f19d..e2e8e983998a75f2b137a313f9b043af65714a25 100644 (file)
@@ -41,14 +41,17 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim
                        $last_hour $last10 %eph  %pings %rcmds $ann_to_talk
                        $pingint $obscount %pc19list $chatdupeage $chatimportfn
                        $investigation_int $pc19_version $myprot_version
-                       %nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
+                       %nodehops $baddx $badspotter $badnode $censorpc
                        $allowzero $decode_dk0wcy $send_opernam @checklist
                        $eph_pc15_restime $pc9x_past_age $pc9x_future_age
+                       $pc10_dupe_age
                   );
 
 $pc9x_past_age = 62*60;                        # maximum age in the past of a px9x (a config record might be the only
                                                                # thing a node might send - once an hour)
 $pc9x_future_age = 5*60;               # maximum age in the future ditto
+$pc10_dupe_age = 45;                   # just something to catch duplicate PC10->PC93 conversions
+
 
 # incoming talk commands
 sub handle_10
@@ -58,8 +61,10 @@ sub handle_10
        my $line = shift;
        my $origin = shift;
 
-       # rsfp check
-       return if $rspfcheck and !$self->rspfcheck(0, $_[6], $_[1]);
+       # this is to catch loops caused by bad software ...
+       if (eph_dup($line, $pc10_dupe_age)) {
+               return;
+       }
 
        # will we allow it at all?
        if ($censorpc) {
@@ -126,9 +131,6 @@ sub handle_11
                }
        }
 
-       # rsfp check
-       #                       return if $rspfcheck and !$self->rspfcheck(1, $_[7], $_[6]);
-
        # is the spotted callsign blank? This should really be trapped earlier but it
        # could break other protocol sentences. Also check for lower case characters.
        if ($_[2] =~ /^\s*$/) {
@@ -286,8 +288,6 @@ sub handle_12
        my $line = shift;
        my $origin = shift;
 
-       #                       return if $rspfcheck and !$self->rspfcheck(1, $_[5], $_[1]);
-
        # announce duplicate checking
        $_[3] =~ s/^\s+//;                      # remove leading blanks
 
@@ -360,7 +360,7 @@ sub handle_15
        my $origin = shift;
 
        if (eph_dup($line, $eph_pc15_restime)) {
-               dbg("PCPROT: Ephemeral dup, dropped") if isdbg('chanerr');
+               return;
        } else {
                unless ($self->{isolate}) {
                        DXChannel::broadcast_nodes($line, $self) if $line =~ /\^H\d+\^?~?$/; # send it to everyone but me
@@ -402,7 +402,6 @@ sub handle_16
        }
 
        if (eph_dup($line)) {
-               dbg("PCPROT: dup PC16 detected") if isdbg('chanerr');
                return;
        }
 
@@ -545,7 +544,6 @@ sub handle_17
        $self->tell_buddies('logoutb', $ucall, $ncall);
 
        if (eph_dup($line)) {
-               dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
                return;
        }
 
@@ -833,7 +831,6 @@ sub handle_21
        }
 
        if (eph_dup($line)) {
-               dbg("PCPROT: dup PC21 detected") if isdbg('chanerr');
                return;
        }
 
@@ -878,10 +875,6 @@ sub handle_23
                }
        }
 
-       # only do a rspf check on PC23 (not 27)
-       if ($pcno == 23) {
-               return if $rspfcheck and !$self->rspfcheck(1, $_[8], $_[7])
-       }
 
        # do some de-duping
        my $d = cltounix($_[1], sprintf("%02d18Z", $_[2]));
@@ -941,7 +934,6 @@ sub handle_24
        return unless $nref || $uref; # if we don't know where they are, it's pointless sending it on
 
        if (eph_dup($line)) {
-               dbg("PCPROT: Dup PC24 ignored\n") if isdbg('chanerr');
                return;
        }
 
@@ -1022,7 +1014,7 @@ sub handle_34
        my $line = shift;
        my $origin = shift;
        if (eph_dup($line, $eph_pc34_restime)) {
-               dbg("PCPROT: dupe PC34, ignored") if isdbg('chanerr');
+               return;
        } else {
                $self->process_rcmd($_[1], $_[2], $_[2], $_[3]);
        }
@@ -1095,7 +1087,6 @@ sub handle_41
 
        my $l = "PC41^$call^$sort";
        if (eph_dup($l, $eph_info_restime)) {
-               dbg("PCPROT: dup PC41, ignored") if isdbg('chanerr');
                return;
        }
 
@@ -1176,7 +1167,6 @@ sub handle_49
        my $origin = shift;
 
        if (eph_dup($line)) {
-               dbg("PCPROT: Dup PC49 ignored\n") if isdbg('chanerr');
                return;
        }
 
@@ -1235,7 +1225,6 @@ sub handle_51
                RouteDB::update($from, $self->{call});
 
                if (eph_dup($line)) {
-                       dbg("PCPROT: dup PC51 detected") if isdbg('chanerr');
                        return;
                }
                # route down an appropriate thingy
@@ -1712,6 +1701,11 @@ sub handle_93
        my $onode = $_[7];
        $onode = $pcall if @_ <= 8;
 
+       # this is catch loops caused by bad software ...
+       if (eph_dup("PC93|$from|$text|$onode", $pc10_dupe_age)) {
+               return;
+       }
+
        # will we allow it at all?
        if ($censorpc) {
                my @bad;
@@ -1721,11 +1715,6 @@ sub handle_93
                }
        }
 
-       # this is catch loops caused by bad software ...
-       if (eph_dup("PC93|$from|$text|$onode")) {
-               return;
-       }
-
        # if this is a 'bad spotter' user then ignore it
        my $nossid = $from;
        $nossid =~ s/-\d+$//;
index 5b668ad0c5e6bf2c81e54bb9659cc1928e09ab58..e8910866822285b1b2afae457a4ee123843932f7 100644 (file)
@@ -11,6 +11,6 @@ use vars qw($version $subversion $build);
 
 $version = '1.54';
 $subversion = '0';
-$build = '110';
+$build = '111';
 
 1;