projects
/
spider.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
change build number calculation to be more accurate
[spider.git]
/
perl
/
DXProt.pm
diff --git
a/perl/DXProt.pm
b/perl/DXProt.pm
index 0759db86587b1d13a6051af2d1becb5626d2ca77..310a3e87b94b61ecc17c43cb32d13123ca570b6a 100644
(file)
--- a/
perl/DXProt.pm
+++ b/
perl/DXProt.pm
@@
-34,6
+34,13
@@
use Route;
use Route::Node;
use strict;
use Route::Node;
use strict;
+
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
use vars qw($me $pc11_max_age $pc23_max_age
$last_hour $last10 %eph %pings %rcmds
%nodehops $baddx $badspotter $badnode $censorpc
use vars qw($me $pc11_max_age $pc23_max_age
$last_hour $last10 %eph %pings %rcmds
%nodehops $baddx $badspotter $badnode $censorpc
@@
-213,7
+220,9
@@
sub start
# remember type of connection
$self->{consort} = $line;
$self->{outbound} = $sort eq 'O';
# remember type of connection
$self->{consort} = $line;
$self->{outbound} = $sort eq 'O';
- $self->{priv} = $user->priv || 1; # other clusters can always be 'normal' users
+ my $priv = $user->priv;
+ $priv = $user->priv(1) unless $priv;
+ $self->{priv} = $priv; # other clusters can always be 'normal' users
$self->{lang} = $user->lang || 'en';
$self->{isolate} = $user->{isolate};
$self->{consort} = $line; # save the connection type
$self->{lang} = $user->lang || 'en';
$self->{isolate} = $user->{isolate};
$self->{consort} = $line; # save the connection type
@@
-422,7
+431,7
@@
sub normal
my $node;
my $to = $user->homenode;
my $last = $user->lastoper || 0;
my $node;
my $to = $user->homenode;
my $last = $user->lastoper || 0;
- if ($
to ne $main::mycall && $send_opernam && $main::systime > $last + $DXUser::lastoperinterval && $to
&& ($node = Route::Node::get($to)) ) {
+ if ($
send_opernam && $to && $to ne $main::mycall && $main::systime > $last + $DXUser::lastoperinterval
&& ($node = Route::Node::get($to)) ) {
my $cmd = "forward/opernam $spot[4]";
# send the rcmd but we aren't interested in the replies...
my $dxchan = $node->dxchan;
my $cmd = "forward/opernam $spot[4]";
# send the rcmd but we aren't interested in the replies...
my $dxchan = $node->dxchan;
@@
-527,11
+536,6
@@
sub normal
if ($pcno == 16) { # add a user
if ($pcno == 16) { # add a user
- if (eph_dup($line)) {
- dbg("PCPROT: dup PC16 detected") if isdbg('chanerr');
- return;
- }
-
# general checks
my $dxchan;
my $ncall = $field[1];
# general checks
my $dxchan;
my $ncall = $field[1];
@@
-589,6
+593,10
@@
sub normal
$user->put;
}
$user->put;
}
+ if (eph_dup($line)) {
+ dbg("PCPROT: dup PC16 detected") if isdbg('chanerr');
+ return;
+ }
# queue up any messages (look for privates only)
DXMsg::queue_msg(1) if $self->state eq 'normal';
# queue up any messages (look for privates only)
DXMsg::queue_msg(1) if $self->state eq 'normal';
@@
-601,10
+609,6
@@
sub normal
my $dxchan;
my $ncall = $field[2];
my $ucall = $field[1];
my $dxchan;
my $ncall = $field[2];
my $ucall = $field[1];
- if (eph_dup($line)) {
- dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
- return;
- }
eph_del_regex("^PC16.*$ncall.*$ucall");
eph_del_regex("^PC16.*$ncall.*$ucall");
@@
-627,6
+631,12
@@
sub normal
return unless $self->in_filter_route($parent);
my @rout = $parent->del_user($ucall);
return unless $self->in_filter_route($parent);
my @rout = $parent->del_user($ucall);
+
+ if (eph_dup($line)) {
+ dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
+ return;
+ }
+
$self->route_pc17($parent, @rout) if @rout;
return;
}
$self->route_pc17($parent, @rout) if @rout;
return;
}
@@
-647,11
+657,6
@@
sub normal
my $i;
my $newline = "PC19^";
my $i;
my $newline = "PC19^";
- if (eph_dup($line)) {
- dbg("PCPROT: dup PC19 detected") if isdbg('chanerr');
- return;
- }
-
# new routing list
my @rout;
my $parent = Route::Node::get($self->{call});
# new routing list
my @rout;
my $parent = Route::Node::get($self->{call});
@@
-720,7
+725,7
@@
sub normal
$user = DXUser->new($call);
$user->sort('A');
$user->priv(1); # I have relented and defaulted nodes
$user = DXUser->new($call);
$user->sort('A');
$user->priv(1); # I have relented and defaulted nodes
- $
self->{priv} = 1; # to user RCMDs allowed
+ $
user->lockout(1);
$user->homenode($call);
$user->node($call);
}
$user->homenode($call);
$user->node($call);
}
@@
-728,6
+733,11
@@
sub normal
$user->put;
}
$user->put;
}
+ if (eph_dup($line)) {
+ dbg("PCPROT: dup PC19 detected") if isdbg('chanerr');
+ return;
+ }
+
$self->route_pc19(@rout) if @rout;
return;
}
$self->route_pc19(@rout) if @rout;
return;
}
@@
-740,11
+750,6
@@
sub normal
}
if ($pcno == 21) { # delete a cluster from the list
}
if ($pcno == 21) { # delete a cluster from the list
- if (eph_dup($line)) {
- dbg("PCPROT: dup PC21 detected") if isdbg('chanerr');
- return;
- }
-
my $call = uc $field[1];
eph_del_regex("^PC1[79].*$call");
my $call = uc $field[1];
eph_del_regex("^PC1[79].*$call");
@@
-774,6
+779,12
@@
sub normal
dbg("PCPROT: I WILL _NOT_ be disconnected!") if isdbg('chanerr');
return;
}
dbg("PCPROT: I WILL _NOT_ be disconnected!") if isdbg('chanerr');
return;
}
+
+ if (eph_dup($line)) {
+ dbg("PCPROT: dup PC21 detected") if isdbg('chanerr');
+ return;
+ }
+
$self->route_pc21(@rout) if @rout;
return;
}
$self->route_pc21(@rout) if @rout;
return;
}
@@
-854,7
+865,7
@@
sub normal
return;
}
return;
}
- Log('DXProt', "Merge request for $field[3] spots and $field[4] WWV from $field[
1
]");
+ Log('DXProt', "Merge request for $field[3] spots and $field[4] WWV from $field[
2
]");
# spots
if ($field[3] > 0) {
# spots
if ($field[3] > 0) {
@@
-904,7
+915,7
@@
sub normal
if ($pcno == 39) { # incoming disconnect
if ($field[1] eq $self->{call}) {
$self->disconnect(1);
if ($pcno == 39) { # incoming disconnect
if ($field[1] eq $self->{call}) {
$self->disconnect(1);
- eph_d
up
_regex("^PC(?:1[679]|21).*$field[1]");
+ eph_d
el
_regex("^PC(?:1[679]|21).*$field[1]");
} else {
dbg("PCPROT: came in on wrong channel") if isdbg('chanerr');
}
} else {
dbg("PCPROT: came in on wrong channel") if isdbg('chanerr');
}
@@
-918,6
+929,11
@@
sub normal
# my $ref = Route::get($call) || Route->new($call);
# return unless $self->in_filter_route($ref);
# my $ref = Route::get($call) || Route->new($call);
# return unless $self->in_filter_route($ref);
+ if ($field[3] eq $field[2]) {
+ dbg('PCPROT: invalid value') if isdbg('chanerr');
+ return;
+ }
+
# add this station to the user database, if required
my $user = DXUser->get_current($call);
$user = DXUser->new($call) if !$user;
# add this station to the user database, if required
my $user = DXUser->get_current($call);
$user = DXUser->new($call) if !$user;
@@
-985,6
+1001,7
@@
sub normal
my $to = $field[1];
my $from = $field[2];
my $flag = $field[3];
my $to = $field[1];
my $from = $field[2];
my $flag = $field[3];
+
# is it for us?
if ($to eq $main::mycall) {
# is it for us?
if ($to eq $main::mycall) {
@@
-1020,6
+1037,10
@@
sub normal
}
}
} else {
}
}
} else {
+ if (eph_dup($line)) {
+ dbg("PCPROT: dup PC51 detected") if isdbg('chanerr');
+ return;
+ }
# route down an appropriate thingy
$self->route($to, $line);
}
# route down an appropriate thingy
$self->route($to, $line);
}
@@
-1706,7
+1727,7
@@
sub disconnect
my $node = Route::Node::get($call);
my @rout;
if ($node) {
my $node = Route::Node::get($call);
my @rout;
if ($node) {
-
@rout = $node->del_nodes; # at the next level
+
#
@rout = $node->del_nodes; # at the next level
@rout = $node->del($main::routeroot);
}
@rout = $node->del($main::routeroot);
}