}
# add it
- $spot[14] =~ s/^::ffff:// if exists $spot[14]; # remove rubbish ipv4 addresses dressed up as ipv6
Spot::add(@spot);
- # create a spotter if doesn't exit and there is an ip available and in anycase remember the IP address
- my $user = DXUser::get_current($spot[4]);
- $user = DXUser->new($spot[4]) unless $user;
- my $r = Route::get($spot[4]);
- my $ip = $spot[14] if exists $spot[14];
- my $implied = '';
- if ($ip) {
- $user->ip($ip), $user->put if !$user->ip || $user->ip ne $ip;
- $r->ip($ip) if $r && !$r->ip;
- } else {
- $ip ||= $r->ip if $r;
- $ip ||= $user->ip;
- $implied = '*' if $ip;
- }
-
+ my $ip = '';
+ $ip ||= $spot[14] if exists $spot[14];
if (isdbg('progress')) {
- my $sip = $ip ? sprintf "($ip$implied)" : '' unless $ip =~ m|[\(\)\*]|;
- my $s = sprintf "SPOT: $spot[1] on $spot[0] \@ %s by $spot[4]$sip\@$spot[7]", cldatetime($spot[2]);
- $s .= " '$spot[3]'" if $spot[3];
+ my $sip = $ip ? sprintf "($ip)" : '' unless $ip =~ m|[\(\)\*]|;
+ $sip ||= '';
+ my $d = ztime($spot[2]);
+ my $s = "SPOT: $spot[1] on $spot[0] \@ $d by $spot[4]$sip\@$spot[7]";
+ $s .= $spot[3] ? " '$spot[3]'" : q{ ''};
+ $s .= " route: $origin";
dbg($s);
}
# you should be able to route on any of these
#
-
# fix up qra locators of known users
+ my $user = DXUser::get_current($spot[4]);
if ($user) {
my $qra = $user->qra;
unless ($qra && is_qra($qra)) {
my $long = $user->long;
if (defined $lat && defined $long) {
$user->qra(DXBearing::lltoqra($lat, $long));
- $user->put;
+ $user->put unless $self->{_nospawn};
}
}
}
}
$user->lastoper($main::systime);
- $user->put;
+ $user->put unless $self->{_nospawn};
}
}
}
$user->homenode($parent->call) if !$user->homenode;
$user->node($parent->call);
$user->lastin($main::systime) unless DXChannel::get($call);
- $user->put;
+ $user->put unless $self->{_nospawn};
# send info to all logged in thingies
$self->tell_login('loginu', "$ncall: $call") if $user->is_local_node;
$self->{build} = 0 + $build;
$self->user->build(0 + $build);
$parent->build(0 + $build);
- dbg("DXSpider version $version build $build");
+ dbg("$self->{call} = DXSpider version $version build $build");
unless ($self->is_spider) {
dbg("Change U " . $self->user->sort . " C $self->{sort} -> S");
$self->user->sort('S');
- $self->user->put;
+ $self->user->put unless $self->{_nospawn};
$self->sort('S');
}
# $self->{handle_xml}++ if DXXml::available() && $pc->[1] =~ /\bxml/;
} else {
- dbg("Unknown software");
+ dbg("$self->{call} = Unknown software ($pc->[1] $pc->[2])");
$self->version(50.0);
$self->version($pc->[2] / 100) if $pc->[2] && $pc->[2] =~ /^\d+$/;
$self->user->version($self->version);
if ($pc->[1] =~ /\bpc9x/) {
if ($self->{isolate}) {
- dbg("pc9x recognised, but $self->{call} is isolated, using old protocol");
+ dbg("$self->{call} pc9x recognised, but node is isolated, using old protocol");
} elsif (!$self->user->wantpc9x) {
- dbg("pc9x explicitly switched off on $self->{call}, using old protocol");
+ dbg("$self->{call} pc9x explicitly switched off, using old protocol");
} else {
$self->{do_pc9x} = 1;
- dbg("Do px9x set on $self->{call}");
+ dbg("$self->{call} Set do PC9x");
}
}
my $call = shift;
# add this station to the user database, if required (don't remove SSID from nodes)
- my $user = DXUser::get_current($call);
- if (!$user) {
+ my $chan = DXChannel::get($call);
+ my $user = $chan->user || DXUser::get($call);
+ unless ($user) {
$user = DXUser->new($call);
$user->priv(1); # I have relented and defaulted nodes
$user->lockout(1);
$user->homenode($call);
$user->node($call);
$user->sort('A');
+ $user->lastin($main::systime); # this make it last longer than just this invocation
+ $user->put unless $chan && $chan->{_nospawn}; # just to make sure it gets written away!!!
}
return $user;
}
$mref->stop_msg($call) if $mref;
$user->lastin($main::systime) unless DXChannel::get($call);
- $user->put;
+ $user->put unless $self->{_nospawn};
}
# we are not automatically sending out PC19s, we send out a composite PC21,PC19 instead
# note this only takes the first one it gets
Geomag::update($d, $pc->[2], $sfi, $k, $i, @$pc[6..8], $r);
- dbg("WWV: $d $pc->[2], sfi:$sfi k:$k info:$i $pc->[6] $pc->[7] $pc->[8] $r") if isdbg('progress');
+ dbg("WWV: <$pc->[2]>, sfi=$sfi k=$k info=$i '$pc->[6]' $pc->[7]\@$pc->[8] $r route: $origin") if isdbg('progress');
if (defined &Local::wwv) {
my $rep;
}
}
$user->lastoper($main::systime); # to cut down on excessive for/opers being generated
- $user->put;
+ $user->put unless $self->{_nospawn};
unless ($self->{isolate}) {
DXChannel::broadcast_nodes($line, $self); # send it to everyone but me
}
my $wcy = WCY::update($d, @$pc[2..12]);
- dbg("WCY: " . join ', ', @$pc[2..12]) if isdbg('progress');
+ dbg("WCY: <$pc->[2]> K=$pc->[5] expK=$pc->[6] A=$pc->[4] R=$pc->[7] SFI=$pc->[3] SA=$pc->[8] GMF=$pc->[9] Au=$pc->[10] $pc->[11]\@$pc->[12] route: $origin") if isdbg('progress');
if (defined &Local::wcy) {
my $rep;
my ($call, $is_node, $is_extnode, $here, $version, $build, $ip) = @$s;
my @rout;
+ # remove spurious IPV6 prefix on IPV4 addresses
+ $ip =~ s/^::ffff:// if $ip;
+
if ($call) {
my $ncall = $parent->call;
- my $user = DXUser::get_current($call);
- my $r;
- my $newuser = !$user;
- $user = DXUser->new($call) unless $user;
- $user->homenode($parent->call) unless $user->homenode;
- $user->node($parent->call);
- $user->lastin($main::systime) unless DXChannel::get($ncall);
if ($is_node) {
dbg("ROUTE: added node $call to $ncall") if isdbg('routelow');
@rout = $parent->add($call, $version, Route::here($here), $ip);
- $r = Route::Node::get($call);
+ my $r = Route::Node::get($call);
$r->PC92C_dxchan($dxchan->call, $hops) if $r;
- if ($newuser) {
- $user->sort('S') unless $user->sort;
- $user->priv(1) unless exists $user->{priv};
- $user->lockout(1) unless exists $user->{lookout} || $main::me->call eq $call || DXChannel::get($call) || Msg::get($call);
+ if ($ip) {
+ $r->ip($ip);
+ Log('DXProt', "PC92A $call -> $ip on $ncall");
}
} else {
dbg("ROUTE: added user $call to $ncall") if isdbg('routelow');
@rout = $parent->add_user($call, Route::here($here), $ip);
$dxchan->tell_buddies('loginb', $call, $ncall) if $dxchan;
- $r = Route::User::get($call);
- if ($newuser) {
- $user->sort('U') unless $user->sort;
+ my $r = Route::User::get($call);
+ if ($ip) {
+ $r->ip($ip);
+ Log('DXProt', "PC92A $call -> $ip on $ncall");
}
}
- $ip ||= $user->ip;
- if ($ip) {
- $user->ip($ip);
- $r->ip($ip);
- my $s = "PC92A $call -> $ip on $ncall";
- Log('DXProt', $s);
- dbg($s) if isdbg('routelow');
- }
- $user->put;
-
- # create a node user if required
-
if ($pc92_slug_changes && $parent == $main::routeroot) {
$things_add{$call} = Route::get($call);
delete $things_del{$call};
if (isdbg('progress')) {
my $vs = $via ne '*' ? " via $via" : '';
- my $s = "ANNTALK: $from\@$onode$vs -> $to '$text'";
+ my $s = "ANNTALK: $from\@$onode$vs -> $to '$text' route: $origin";
dbg($s);
}