- my $call = ($field[5] gt ' ') ? $field[5] : $field[2];
- if ($call eq $main::mycall || grep $_ eq $call, DXChannel::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 && $ref->{talk};
+ my ($to, $via, $call, $dxchan);
+ if ($field[5] gt ' ') {
+ $call = $via = $field[2];
+ $to = $field[5];
+ unless (is_callsign($to)) {
+ dbg('chan', "Corrupt talk, rejected");
+ return;
+ }
+ } else {
+ $call = $to = $field[2];
+ }
+ if ($dxchan = DXChannel->get($call)) {
+ $dxchan->talk($field[1], $to, $via, $field[3]);