projects
/
spider.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix long callsign checking
[spider.git]
/
perl
/
DXProt.pm
diff --git
a/perl/DXProt.pm
b/perl/DXProt.pm
index 3681bfbf35fee93b3c8fbbe96baf3bf716a1460a..2027239b6bac792fffec04499124181f3ff4aaea 100644
(file)
--- a/
perl/DXProt.pm
+++ b/
perl/DXProt.pm
@@
-42,7
+42,7
@@
$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
$main::build += $VERSION;
$main::branch += $BRANCH;
$main::build += $VERSION;
$main::branch += $BRANCH;
-use vars qw($pc11_max_age $pc23_max_age $last_pc50
+use vars qw($pc11_max_age $pc23_max_age $last_pc50
$eph_restime $eph_info_restime $eph_pc34_restime
$last_hour $last10 %eph %pings %rcmds $ann_to_talk
%nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
$allowzero $decode_dk0wcy $send_opernam @checklist);
$last_hour $last10 %eph %pings %rcmds $ann_to_talk
%nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
$allowzero $decode_dk0wcy $send_opernam @checklist);
@@
-62,6
+62,9
@@
$badnode = new DXHash "badnode";
$last10 = $last_pc50 = time;
$ann_to_talk = 1;
$rspfcheck = 1;
$last10 = $last_pc50 = time;
$ann_to_talk = 1;
$rspfcheck = 1;
+$eph_restime = 180;
+$eph_info_restime = 60*60;
+$eph_pc34_restime = 30;
@checklist =
(
@checklist =
(
@@
-438,6
+441,12
@@
sub normal
return;
}
}
return;
}
}
+
+ if (Spot::dup($field[1], $field[2], $d, $field[5])) {
+ dbg("PCPROT: Duplicate Spot ignored\n") if isdbg('chanerr');
+ return;
+ }
+
my @spot = Spot::prepare($field[1], $field[2], $d, $field[5], $field[6], $field[7]);
# global spot filtering on INPUT
my @spot = Spot::prepare($field[1], $field[2], $d, $field[5], $field[6], $field[7]);
# global spot filtering on INPUT
@@
-448,11
+457,6
@@
sub normal
return;
}
}
return;
}
}
-
- if (Spot::dup($field[1], $field[2], $d, $field[5])) {
- dbg("PCPROT: Duplicate Spot ignored\n") if isdbg('chanerr');
- return;
- }
# add it
Spot::add(@spot);
# add it
Spot::add(@spot);
@@
-823,6
+827,14
@@
sub normal
return;
}
return;
}
+ # if I get a PC21 from the same callsign as self then treat it
+ # 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;
+ }
+
eph_del_regex("^PC1[79].*$call");
my @rout;
eph_del_regex("^PC1[79].*$call");
my @rout;
@@
-833,11
+845,6
@@
sub normal
return;
}
if ($call ne $main::mycall) { # don't allow malicious buggers to disconnect me!
return;
}
if ($call ne $main::mycall) { # don't allow malicious buggers to disconnect me!
- 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 $node = Route::Node::get($call);
if ($node) {
@@
-974,11
+981,16
@@
sub normal
}
if ($pcno == 34 || $pcno == 36) { # remote commands (incoming)
}
if ($pcno == 34 || $pcno == 36) { # remote commands (incoming)
- $self->process_rcmd($field[1], $field[2], $field[2], $field[3]);
+ if (eph_dup($line, $eph_pc34_restime)) {
+ dbg("PCPROT: dupe") if isdbg('chanerr');
+ } else {
+ $self->process_rcmd($field[1], $field[2], $field[2], $field[3]);
+ }
return;
}
if ($pcno == 35) { # remote command replies
return;
}
if ($pcno == 35) { # remote command replies
+ eph_del_regex("^PC35\^$field[2]\^$field[1]\^");
$self->process_rcmd_reply($field[1], $field[2], $field[1], $field[3]);
return;
}
$self->process_rcmd_reply($field[1], $field[2], $field[1], $field[3]);
return;
}
@@
-1002,6
+1014,11
@@
sub normal
if ($pcno == 41) { # user info
my $call = $field[1];
if ($pcno == 41) { # user info
my $call = $field[1];
+ if (eph_dup($line, $eph_info_restime)) {
+ dbg("PCPROT: dupe") if isdbg('chanerr');
+ return;
+ }
+
# input filter if required
# my $ref = Route::get($call) || Route->new($call);
# return unless $self->in_filter_route($ref);
# input filter if required
# my $ref = Route::get($call) || Route->new($call);
# return unless $self->in_filter_route($ref);
@@
-1032,11
+1049,11
@@
sub normal
} elsif ($field[2] == 4) {
$user->homenode($field[3]);
} elsif ($field[2] == 5) {
} elsif ($field[2] == 4) {
$user->homenode($field[3]);
} elsif ($field[2] == 5) {
- if (is_qra($field[3])) {
- my ($lat, $long) = DXBearing::qratoll($field[3]);
+ if (is_qra(
uc
$field[3])) {
+ my ($lat, $long) = DXBearing::qratoll(
uc
$field[3]);
$user->lat($lat);
$user->long($long);
$user->lat($lat);
$user->long($long);
- $user->qra($field[3]);
+ $user->qra(
uc
$field[3]);
} else {
dbg('PCPROT: not a valid QRA locator') if isdbg('chanerr');
return;
} else {
dbg('PCPROT: not a valid QRA locator') if isdbg('chanerr');
return;
@@
-1045,9
+1062,13
@@
sub normal
$user->lastoper($main::systime); # to cut down on excessive for/opers being generated
$user->put;
$user->lastoper($main::systime); # to cut down on excessive for/opers being generated
$user->put;
+ unless ($self->{isolate}) {
+ DXChannel::broadcast_nodes($line, $self); # send it to everyone but me
+ }
+
# perhaps this IS what we want after all
# $self->route_pc41($ref, $call, $field[2], $field[3], $field[4]);
# perhaps this IS what we want after all
# $self->route_pc41($ref, $call, $field[2], $field[3], $field[4]);
-
#
return;
+
return;
}
if ($pcno == 43) {
}
if ($pcno == 43) {
@@
-1904,12
+1925,13
@@
sub in_filter_route
sub eph_dup
{
my $s = shift;
sub eph_dup
{
my $s = shift;
+ my $t = shift || $eph_restime;
my $r;
# chop the end off
$s =~ s/\^H\d\d?\^?\~?$//;
$r = 1 if exists $eph{$s}; # pump up the dup if it keeps circulating
my $r;
# chop the end off
$s =~ s/\^H\d\d?\^?\~?$//;
$r = 1 if exists $eph{$s}; # pump up the dup if it keeps circulating
- $eph{$s} = $main::systime;
+ $eph{$s} = $main::systime
+ $t
;
return $r;
}
return $r;
}
@@
-1929,11
+1951,26
@@
sub eph_clean
my ($key, $val);
while (($key, $val) = each %eph) {
my ($key, $val);
while (($key, $val) = each %eph) {
- if ($main::systime
- $val > 180
) {
+ if ($main::systime
>= $val
) {
delete $eph{$key};
}
}
}
delete $eph{$key};
}
}
}
+sub eph_list
+{
+ my ($key, $val);
+ my @out;
+
+ while (($key, $val) = each %eph) {
+ push @out, $key, $val;
+ }
+ return @out;
+}
+
+sub run_cmd
+{
+ goto &DXCommandmode::run_cmd;
+}
1;
__END__
1;
__END__