$eph_pc15_restime $pc9x_past_age $pc9x_dupe_age
$pc10_dupe_age $pc92_slug_changes $last_pc92_slug
$pc92Ain $pc92Cin $pc92Din $pc92Kin $pc9x_time_tolerance
+ $pc92filterdef
);
$pc9x_dupe_age = 60; # catch loops of circular (usually) D records
$pc9x_time_tolerance; # thing a node might send - once an hour and we allow an extra hour for luck)
# this is actually the partition between "yesterday" and "today" but old.
+$pc92filterdef = bless ([
+ # tag, sort, field, priv, special parser
+ ['call', 'c', 0],
+ ['by', 'c', 0],
+ ['dxcc', 'nc', 1],
+ ['itu', 'ni', 2],
+ ['zone', 'nz', 3],
+ ], 'Filter::Cmd');
+
# incoming talk commands
sub handle_10
#
# fix up qra locators of known users
- my $user = DXUser->get_current($spot[4]);
+ my $user = DXUser::get_current($spot[4]);
if ($user) {
my $qra = $user->qra;
unless ($qra && is_qra($qra)) {
}
# local processing
- if (defined *Local::spot) {
+ if (defined &Local::spot) {
my $r;
eval {
$r = Local::spot($self, @spot);
}
# local processing
- if (defined *Local::ann) {
+ if (defined &Local::ann) {
my $r;
eval {
$r = Local::ann($self, $line, @_[1..6]);
# reject this if we think it is a node already
my $r = Route::Node::get($call);
- my $u = DXUser->get_current($call) unless $r;
+ my $u = DXUser::get_current($call) unless $r;
if ($r || ($u && $u->is_node)) {
dbg("PCPROT: $call is a node") if isdbg('chanerr');
next;
}
# add this station to the user database, if required
- my $user = DXUser->get_current($ncall);
+ my $user = DXUser::get_current($ncall);
$user = DXUser->new($call) unless $user;
$user->homenode($parent->call) if !$user->homenode;
$user->node($parent->call);
$parent->del_user($uref);
# send info to all logged in thingies
- my $user = DXUser->get_current($ncall);
+ my $user = DXUser::get_current($ncall);
$self->tell_login('logoutu', "$ncall: $ucall") if $user && $user->is_local_node;
$self->tell_buddies('logoutb', $ucall, $ncall);
my $call = shift;
# add this station to the user database, if required (don't remove SSID from nodes)
- my $user = DXUser->get_current($call);
+ my $user = DXUser::get_current($call);
if (!$user) {
$user = DXUser->new($call);
$user->priv(1); # I have relented and defaulted nodes
# note this only takes the first one it gets
Geomag::update($d, $_[2], $sfi, $k, $i, @_[6..8], $r);
- if (defined *Local::wwv) {
+ if (defined &Local::wwv) {
my $rep;
eval {
$rep = Local::wwv($self, $_[1], $_[2], $sfi, $k, $i, @_[6..8], $r);
}
# add this station to the user database, if required
- my $user = DXUser->get_current($call);
+ my $user = DXUser::get_current($call);
$user = DXUser->new($call) unless $user;
if ($sort == 1) {
my $wcy = WCY::update($d, @_[2..12]);
- if (defined *Local::wcy) {
+ if (defined &Local::wcy) {
my $rep;
eval {
$rep = Local::wcy($self, @_[1..12]);
} elsif ($t == $lastid) {
dbg("PCPROT: dup id on $t == lastid $lastid, ignored") if isdbg('chanerr') || isdbg('pc92dedupe');
return undef;
+ } else {
+ # check that if we have a low number in lastid that yesterday's numbers
+ # (likely in the 85000+ area) don't override them, thus causing flip flopping
+ if ($lastid+86400-$t < $pc9x_past_age) {
+ dbg("PCPROT: dup id on $t in yesterday, lastid $lastid, ignored") if isdbg('chanerr') || isdbg('pc92dedupe');
+ return undef;
+ }
}
}
}
}
} elsif ($sort eq 'K') {
- $pc92Kin += length $line if $sort eq 'K';
+ $pc92Kin += length $line;
# remember the last channel we arrived on
$parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call;