+ SWITCH: {
+ if ($pcno == 10) { # incoming talk
+
+ # is it for me or one of mine?
+ my $call = ($field[5] gt ' ') ? $field[5] : $field[2];
+ if ($call eq $main::mycall || grep $_ eq $call, get_all_user_calls()) {
+
+ # yes, it is
+ my $text = unpad($field[3]);
+ Log('talk', $call, $field[1], $field[6], $text);
+ $call = $main::myalias if $call eq $main::mycall;
+ my $ref = DXChannel->get($call);
+ $ref->send("$call de $field[1]: $text") if $ref;
+ } else {
+ route($field[2], $line); # relay it on its way
+ }
+ return;
+ }
+
+ if ($pcno == 11 || $pcno == 26) { # dx spot
+
+ # if this is a 'nodx' node then ignore it
+ last SWITCH if grep $field[7] =~ /^$_/, @DXProt::nodx_node;
+
+ # convert the date to a unix date
+ my $d = cltounix($field[3], $field[4]);
+ # bang out (and don't pass on) if date is invalid or the spot is too old
+ if (!$d || ($pcno == 11 && $d < $main::systime - $pc11_max_age)) {
+ dbg('chan', "Spot ignored, invalid date or too old\n");
+ return;
+ }
+
+ # strip off the leading & trailing spaces from the comment
+ my $text = unpad($field[5]);
+
+ # store it away
+ my $spotter = $field[6];
+ $spotter =~ s/-\d+$//o; # strip off the ssid from the spotter
+
+ # do some de-duping
+ my $freq = $field[1] - 0;
+ my $dupkey = "$freq$field[2]$d$text$spotter";
+ if ($spotdup{$dupkey}) {
+ dbg('chan', "Duplicate Spot ignored\n");
+ return;
+ }
+
+ $spotdup{$dupkey} = $d;
+
+ my $spot = Spot::add($freq, $field[2], $d, $text, $spotter, $field[7]);
+
+ # local processing
+ my $r;
+ eval {
+ $r = Local::spot1($self, $freq, $field[2], $d, $text, $spotter, $field[7]);
+ };
+ dbg('local', "Local::spot1 error $@") if $@;
+ return if $r;
+
+ # send orf to the users
+ if ($spot && $pcno == 11) {
+ my $buf = Spot::formatb($field[1], $field[2], $d, $text, $spotter);
+ broadcast_users("$buf\a\a");
+ }