my $dxchan;
if ((($dxchan = DXChannel::get($_[2])) && $dxchan->is_user) || $_[4] =~ /^[\#\w.]+$/){
- $self->send_chat($line, @_[1..6]);
+ $self->send_chat(0, $line, @_[1..6]);
} elsif ($_[2] eq '*' || $_[2] eq $main::mycall) {
# remember a route
}
# send it
- $self->send_announce($line, @_[1..6]);
+ $self->send_announce(0, $line, @_[1..6]);
} else {
$self->route($_[2], $line);
}
} 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');
}
# otherwise, drop through and allow it to be broadcast
- } elsif ($to eq '*' || $to eq 'SYSOP' || $to eq 'WX') {
+ } elsif ($to eq '*' || uc $to eq 'SYSOP' || uc $to eq 'WX') {
# announces
+ my $sysop = uc $to eq 'SYSOP' ? '*' : ' ';
+ my $wx = uc $to eq 'WX' ? '1' : '0';
+ my $local = $via eq 'LOCAL' ? '*' : $via;
+
+ $self->send_announce(1, pc12($from, $text, $local, $via, $sysop, $wx, $pcall), $from, $local, $text, $sysop, $pcall, $wx, $via eq 'LOCAL' ? $via : undef);
+ return if $via eq 'LOCAL';
} else {
- # chat messages
+ # chat messages to non-pc9x nodes
+ $self->send_chat(1, pc12($from, $text, undef, $to, undef, $pcall), $from, '*', $text, $to, $pcall, '0');
}
$self->broadcast_route_pc9x($pcall, undef, $line, 0);
}