# input filter if required and then remove user if present
# return unless $self->in_filter_route($parent);
- $parent->del_user($uref) if $uref;
+ $parent->del_user($uref);
# send info to all logged in thingies
$self->tell_login('logoutu', "$ncall: $ucall") if DXUser->get_current($ncall)->is_local_node;
$user = DXUser->new($call) unless $user;
if ($_[2] == 1) {
+ if (($_[3] =~ /spotter/i || $_[3] =~ /self/i) && $user->name && $user->name ne $_[3]) {
+ dbg("PCPROT: invalid name") if isdbg('chanerr');
+ if ($main::mycall eq 'GB7DJK' || $main::mycall eq 'GB7BAA' || $main::mycall eq 'WR3D') {
+ DXChannel::broadcast_nodes(pc41($_[1], 1, $user->name)); # send it to everyone including me
+ }
+ return;
+ }
$user->name($_[3]);
} elsif ($_[2] == 2) {
$user->qth($_[3]);
} elsif ($_[2] == 3) {
if (is_latlong($_[3])) {
my ($lat, $long) = DXBearing::stoll($_[3]);
- $user->lat($lat);
- $user->long($long);
- $user->qra(DXBearing::lltoqra($lat, $long));
+ $user->lat($lat) if $lat;
+ $user->long($long) if $long;
+ $user->qra(DXBearing::lltoqra($lat, $long)) unless $user->qra;
} else {
dbg('PCPROT: not a valid lat/long') if isdbg('chanerr');
return;
} elsif ($_[2] == 5) {
if (is_qra(uc $_[3])) {
my ($lat, $long) = DXBearing::qratoll(uc $_[3]);
- $user->lat($lat);
- $user->long($long);
+ $user->lat($lat) if $lat && !$user->lat;
+ $user->long($long) if $long && !$user->long;
$user->qra(uc $_[3]);
} else {
dbg('PCPROT: not a valid QRA locator') if isdbg('chanerr');