X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=b8b17ae612065b2080eb8c44f7c34cc20120c81c;hb=1cc51a6696899a05d1b9ca40dab497cfdc39294b;hp=153618f9dc182f6a33bd1ee238130f121eef7bde;hpb=428e91daacae4fddcabc7e6279c1fbd40edbbe91;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 153618f9..b8b17ae6 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -32,6 +32,7 @@ use BadWords; use DXHash; use Route; use Route::Node; +use Script; use strict; @@ -272,6 +273,10 @@ sub start # send info to all logged in thingies $self->tell_login('loginn'); + + # run a script send the output to the debug file + my $script = new Script(lc $call) || new Script('node_default'); + $script->run($self) if $script; } # @@ -321,7 +326,8 @@ sub normal } # is it for me or one of mine? - my ($to, $via, $call, $dxchan); + my ($from, $to, $via, $call, $dxchan); + $from = $field[1]; if ($field[5] gt ' ') { $via = $field[2]; $to = $field[5]; @@ -329,12 +335,20 @@ sub normal $to = $field[2]; } + # if we are converting announces to talk is it a dup? + if ($ann_to_talk) { + if (AnnTalk::is_talk_candidate($from, $field[3]) && AnnTalk::dup($from, $to, $field[3])) { + dbg("DXPROT: Dupe talk from announce, dropped") if isdbg('chanerr'); + return; + } + } + # it is here and logged on $dxchan = DXChannel->get($main::myalias) if $to eq $main::mycall; $dxchan = DXChannel->get($to) unless $dxchan; if ($dxchan && $dxchan->is_user) { $field[3] =~ s/\%5E/^/g; - $dxchan->talk($field[1], $to, $via, $field[3]); + $dxchan->talk($from, $to, $via, $field[3]); return; } @@ -345,17 +359,17 @@ sub normal if ($ref = Route::get($to)) { $vref = Route::Node::get($via) if $via; $vref = undef unless $vref && grep $to eq $_, $vref->users; - $ref->dxchan->talk($field[1], $to, $vref ? $via : undef, $field[3], $field[6]); + $ref->dxchan->talk($from, $to, $vref ? $via : undef, $field[3], $field[6]); return; } # not visible here, send a message of condolence $vref = undef; - $ref = Route::get($field[1]); + $ref = Route::get($from); $vref = $ref = Route::Node::get($field[6]) unless $ref; if ($ref) { $dxchan = $ref->dxchan; - $dxchan->talk($main::mycall, $field[1], $vref ? $vref->call : undef, $dxchan->msg('talknh', $to) ); + $dxchan->talk($main::mycall, $from, $vref ? $vref->call : undef, $dxchan->msg('talknh', $to) ); } return; } @@ -520,17 +534,13 @@ sub normal # here's a bit of fun, convert incoming ann with a callsign in the first word # or one saying 'to ' to a talk if we can route to the recipient if ($ann_to_talk) { - my ($to, $call) = $field[3] =~ /^\s*([\w-]+)[\s:]+([\w-]+)/; - if ($to && $call) { - $to = uc $to; - $call = uc $call; - if (($to =~ /^TO?$/ && is_callsign($call)) || is_callsign($call = $to)) { - my $ref = Route::get($call); - if ($ref) { - my $dxchan = $ref->dxchan; - $dxchan->talk($field[1], $call, undef, $field[3], $field[5]) if $dxchan != $self; - return; - } + my $call = AnnTalk::is_talk_candidate($field[1], $field[3]); + if ($call) { + my $ref = Route::get($call); + if ($ref) { + my $dxchan = $ref->dxchan; + $dxchan->talk($field[1], $call, undef, $field[3], $field[5]) if $dxchan != $self; + return; } } } @@ -964,7 +974,7 @@ sub normal # my $ref = Route::get($call) || Route->new($call); # return unless $self->in_filter_route($ref); - if ($field[3] eq $field[2]) { + if ($field[3] eq $field[2] || $field[3] =~ /^\s*$/) { dbg('PCPROT: invalid value') if isdbg('chanerr'); return; }