my $call = shift;
my $type = shift;
my $homenode = shift;
+ my $changed = 0;
# add this station to the user database, if required (don't remove SSID from nodes)
my $user = DXUser::get_current($call);
$user->sort($type || 'U');
if ($user->is_node) {
$user->priv(1); # I have relented and defaulted nodes
- $user->lockout(1) if $user->is_node;
+ $user->lockout(1);
} else {
$user->homenode($homenode) if $homenode;
$user->node($homenode);
$user->priv(0);
+ $user->lockout(0);
}
$user->lastin($main::systime); # this makes it last longer than just this invocation
- $user->put; # just to make sure it gets written away!!!
- dbg("DXProt: PC92 new user record for $call created");
+ ++$changed;
+ dbg(sprintf "DXProt: PC92 new user record for $call created type: %s priv: %d lockout: %d", $user->sort, $user->priv, $user->lockout);
}
# this is to fix a problem I introduced some build ago by using this function for users
# whereas it was only being used for nodes.
- if ($user->is_user && $user->lockout && ($user->priv // 0) == 1) {
+ if ($user->is_user && $user->lockout && ($user->priv || 0) == 1) {
+ dbg(sprintf "DXProt: PC92 user record for $call type: %s priv: %d lockout: %d updated, depriv'd and unlocked", $user->sort, $user->priv, $user->lockout);
$user->priv(0);
$user->lockout(0);
- dbg("DXProt: PC92 user record for $call depriv'd and unlocked");
- $user->put;
+ ++$changed;
}
+ $user->put if $changed; # just to make sure it gets written away!!!
return $user;
}
dbgprintring(3) if isdbg('nologchan');
next;
}
-
- my $user = check_add_user($call, 'A');
-
-# if (eph_dup($genline)) {
-# dbg("PCPROT: dup PC19 for $call detected") if isdbg('chanerr');
-# next;
-# }
-
unless ($h) {
if ($parent->via_pc92) {
}
}
+ my $user = check_add_user($call, 'A');
my $r = Route::Node::get($call);
my $flags = Route::here($here)|Route::conf($conf);
}
if ($is_node) {
dbg("ROUTE: added node $call to $ncall") if isdbg('routelow');
- $user = check_add_user($call, 'A');
+ $user = check_add_user($call, 'S');
@rout = $parent->add($call, $version, Route::here($here), $ip);
$r = Route::Node::get($call);
$r->PC92C_dxchan($dxchan->call, $hops) if $r;
if (is_numeric($version) || is_numeric($build)) {
my $changed = 0;
if (($oldversion ne $version || $build ne $oldbuild)) {
- dbg("PCPROT: PC92 K node $call updated version: $version (was $oldversion) build: $build (was $oldbuild)");
+ dbg("PCPROT: PC92 K rec, node $call updated version: $version (was $oldversion) build: $build (was $oldbuild)");
$user->version($parent->version($version));
$user->build($parent->build($build));
++$changed;
}
if ($oldsort ne 'S') {
- dbg("PCPROT: PC92 K node $call updated sort: $sort (was $oldsort)");
$user->sort('S');
- ++$changed;
+ unless (DXChannel::get($user->call)) { # only do this if not connected
+ my $oldpriv = $user->priv;
+ my $oldlock = $user->lockout;
+ $user->priv(1) unless defined $oldpriv && $oldpriv;
+ $user->lockout(1) unless defined $oldlock;
+ dbg(sprintf "PCPROT: PC92 K rec, node $call updated sort: $oldsort->S priv: '$oldpriv'->%d lockout: '$oldlock'->%s", $user->priv || 0, $user->lockout || 0);
+ ++$changed;
+ }
}
unless ($user->K) {
- dbg("PCPROT: PC92 K node $call updated - marked as PC92 K user");
+ dbg(sprintf "PCPROT: PC92 K rec, node $call updated - marked as sending PC92 K records priv: %d lockout: %d ", $user->priv || 0, $user->lockout || 0);
$user->K(1);
++$changed;
}
$user->put if $changed;
$parent->K(1); # mark this as come in on a K
} else {
- dbg("DXProt PC92 K version call $call: invalid version: '$version' or build: '$version', ignored");
+ dbg("DXProt PC92 K rec, version call $call: invalid version: '$version' or build: '$version', ignored");
}
dbg("ROUTE: reset obscount on $call now " . $parent->obscount) if isdbg('obscount');
}