mirror of
git://scm.dxcluster.org/scm/spider
synced 2024-09-21 15:57:12 +00:00
remove rspf, add pc10 eph_dup, tidy up eph_dups
This commit is contained in:
parent
7f0e53a059
commit
c6552c92e3
@ -573,28 +573,6 @@ sub decode_input
|
|||||||
return ($sort, $call, $line);
|
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
|
# broadcast a message to all clusters taking into account isolation
|
||||||
# [except those mentioned after buffer]
|
# [except those mentioned after buffer]
|
||||||
sub broadcast_nodes
|
sub broadcast_nodes
|
||||||
|
@ -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
|
$last_hour $last10 %eph %pings %rcmds $ann_to_talk
|
||||||
$pingint $obscount %pc19list $chatdupeage $chatimportfn
|
$pingint $obscount %pc19list $chatdupeage $chatimportfn
|
||||||
$investigation_int $pc19_version $myprot_version
|
$investigation_int $pc19_version $myprot_version
|
||||||
%nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
|
%nodehops $baddx $badspotter $badnode $censorpc
|
||||||
$allowzero $decode_dk0wcy $send_opernam @checklist
|
$allowzero $decode_dk0wcy $send_opernam @checklist
|
||||||
$eph_pc15_restime $pc92_update_period $pc92_obs_timeout
|
$eph_pc15_restime $pc92_update_period $pc92_obs_timeout
|
||||||
%pc92_find $pc92_find_timeout $pc92_short_update_period
|
%pc92_find $pc92_find_timeout $pc92_short_update_period
|
||||||
@ -63,8 +63,7 @@ $badspotter = new DXHash "badspotter";
|
|||||||
$badnode = new DXHash "badnode";
|
$badnode = new DXHash "badnode";
|
||||||
$last10 = $last_pc50 = time;
|
$last10 = $last_pc50 = time;
|
||||||
$ann_to_talk = 1;
|
$ann_to_talk = 1;
|
||||||
$rspfcheck = 1;
|
$eph_restime = 60;
|
||||||
$eph_restime = 180;
|
|
||||||
$eph_info_restime = 60*60;
|
$eph_info_restime = 60*60;
|
||||||
$eph_pc15_restime = 6*60;
|
$eph_pc15_restime = 6*60;
|
||||||
$eph_pc34_restime = 30;
|
$eph_pc34_restime = 30;
|
||||||
|
@ -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
|
$last_hour $last10 %eph %pings %rcmds $ann_to_talk
|
||||||
$pingint $obscount %pc19list $chatdupeage $chatimportfn
|
$pingint $obscount %pc19list $chatdupeage $chatimportfn
|
||||||
$investigation_int $pc19_version $myprot_version
|
$investigation_int $pc19_version $myprot_version
|
||||||
%nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
|
%nodehops $baddx $badspotter $badnode $censorpc
|
||||||
$allowzero $decode_dk0wcy $send_opernam @checklist
|
$allowzero $decode_dk0wcy $send_opernam @checklist
|
||||||
$eph_pc15_restime $pc9x_past_age $pc9x_future_age
|
$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
|
$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)
|
# thing a node might send - once an hour)
|
||||||
$pc9x_future_age = 5*60; # maximum age in the future ditto
|
$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
|
# incoming talk commands
|
||||||
sub handle_10
|
sub handle_10
|
||||||
@ -58,8 +61,10 @@ sub handle_10
|
|||||||
my $line = shift;
|
my $line = shift;
|
||||||
my $origin = shift;
|
my $origin = shift;
|
||||||
|
|
||||||
# rsfp check
|
# this is to catch loops caused by bad software ...
|
||||||
return if $rspfcheck and !$self->rspfcheck(0, $_[6], $_[1]);
|
if (eph_dup($line, $pc10_dupe_age)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
# will we allow it at all?
|
# will we allow it at all?
|
||||||
if ($censorpc) {
|
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
|
# is the spotted callsign blank? This should really be trapped earlier but it
|
||||||
# could break other protocol sentences. Also check for lower case characters.
|
# could break other protocol sentences. Also check for lower case characters.
|
||||||
if ($_[2] =~ /^\s*$/) {
|
if ($_[2] =~ /^\s*$/) {
|
||||||
@ -286,8 +288,6 @@ sub handle_12
|
|||||||
my $line = shift;
|
my $line = shift;
|
||||||
my $origin = shift;
|
my $origin = shift;
|
||||||
|
|
||||||
# return if $rspfcheck and !$self->rspfcheck(1, $_[5], $_[1]);
|
|
||||||
|
|
||||||
# announce duplicate checking
|
# announce duplicate checking
|
||||||
$_[3] =~ s/^\s+//; # remove leading blanks
|
$_[3] =~ s/^\s+//; # remove leading blanks
|
||||||
|
|
||||||
@ -360,7 +360,7 @@ sub handle_15
|
|||||||
my $origin = shift;
|
my $origin = shift;
|
||||||
|
|
||||||
if (eph_dup($line, $eph_pc15_restime)) {
|
if (eph_dup($line, $eph_pc15_restime)) {
|
||||||
dbg("PCPROT: Ephemeral dup, dropped") if isdbg('chanerr');
|
return;
|
||||||
} else {
|
} else {
|
||||||
unless ($self->{isolate}) {
|
unless ($self->{isolate}) {
|
||||||
DXChannel::broadcast_nodes($line, $self) if $line =~ /\^H\d+\^?~?$/; # send it to everyone but me
|
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)) {
|
if (eph_dup($line)) {
|
||||||
dbg("PCPROT: dup PC16 detected") if isdbg('chanerr');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,7 +544,6 @@ sub handle_17
|
|||||||
$self->tell_buddies('logoutb', $ucall, $ncall);
|
$self->tell_buddies('logoutb', $ucall, $ncall);
|
||||||
|
|
||||||
if (eph_dup($line)) {
|
if (eph_dup($line)) {
|
||||||
dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -833,7 +831,6 @@ sub handle_21
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (eph_dup($line)) {
|
if (eph_dup($line)) {
|
||||||
dbg("PCPROT: dup PC21 detected") if isdbg('chanerr');
|
|
||||||
return;
|
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
|
# do some de-duping
|
||||||
my $d = cltounix($_[1], sprintf("%02d18Z", $_[2]));
|
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
|
return unless $nref || $uref; # if we don't know where they are, it's pointless sending it on
|
||||||
|
|
||||||
if (eph_dup($line)) {
|
if (eph_dup($line)) {
|
||||||
dbg("PCPROT: Dup PC24 ignored\n") if isdbg('chanerr');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1022,7 +1014,7 @@ sub handle_34
|
|||||||
my $line = shift;
|
my $line = shift;
|
||||||
my $origin = shift;
|
my $origin = shift;
|
||||||
if (eph_dup($line, $eph_pc34_restime)) {
|
if (eph_dup($line, $eph_pc34_restime)) {
|
||||||
dbg("PCPROT: dupe PC34, ignored") if isdbg('chanerr');
|
return;
|
||||||
} else {
|
} else {
|
||||||
$self->process_rcmd($_[1], $_[2], $_[2], $_[3]);
|
$self->process_rcmd($_[1], $_[2], $_[2], $_[3]);
|
||||||
}
|
}
|
||||||
@ -1095,7 +1087,6 @@ sub handle_41
|
|||||||
|
|
||||||
my $l = "PC41^$call^$sort";
|
my $l = "PC41^$call^$sort";
|
||||||
if (eph_dup($l, $eph_info_restime)) {
|
if (eph_dup($l, $eph_info_restime)) {
|
||||||
dbg("PCPROT: dup PC41, ignored") if isdbg('chanerr');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1176,7 +1167,6 @@ sub handle_49
|
|||||||
my $origin = shift;
|
my $origin = shift;
|
||||||
|
|
||||||
if (eph_dup($line)) {
|
if (eph_dup($line)) {
|
||||||
dbg("PCPROT: Dup PC49 ignored\n") if isdbg('chanerr');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1235,7 +1225,6 @@ sub handle_51
|
|||||||
RouteDB::update($from, $self->{call});
|
RouteDB::update($from, $self->{call});
|
||||||
|
|
||||||
if (eph_dup($line)) {
|
if (eph_dup($line)) {
|
||||||
dbg("PCPROT: dup PC51 detected") if isdbg('chanerr');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
# route down an appropriate thingy
|
# route down an appropriate thingy
|
||||||
@ -1712,6 +1701,11 @@ sub handle_93
|
|||||||
my $onode = $_[7];
|
my $onode = $_[7];
|
||||||
$onode = $pcall if @_ <= 8;
|
$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?
|
# will we allow it at all?
|
||||||
if ($censorpc) {
|
if ($censorpc) {
|
||||||
my @bad;
|
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
|
# if this is a 'bad spotter' user then ignore it
|
||||||
my $nossid = $from;
|
my $nossid = $from;
|
||||||
$nossid =~ s/-\d+$//;
|
$nossid =~ s/-\d+$//;
|
||||||
|
@ -11,6 +11,6 @@ use vars qw($version $subversion $build);
|
|||||||
|
|
||||||
$version = '1.54';
|
$version = '1.54';
|
||||||
$subversion = '0';
|
$subversion = '0';
|
||||||
$build = '110';
|
$build = '111';
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
Loading…
Reference in New Issue
Block a user