X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=4a2be35765f854d815ae805a28847ac399d869ed;hb=c62d1dbdc3238711628d49608946eefedda2362e;hp=99eb71d27464c27299708a1a2590390ecbd84a01;hpb=90b87fdbe4bb4f904e89939640aa7764a69e5616;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index 99eb71d2..4a2be357 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -4,7 +4,7 @@ # # Copyright (c) 1998-2006 Dirk Koopman G1TLH # -# $Id$ +# # package DXProt; @@ -107,40 +107,6 @@ sub handle_10 # convert this to a PC93 and process it as such $self->normal(pc93($to, $from, $via, $_[3], $_[6])); - return; - - # this is all redundant but kept for now for reference - - # 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) { - $_[3] =~ s/\%5E/^/g; - $dxchan->talk($from, $to, $via, $_[3]); - return; - } - - # is it elsewhere, visible on the cluster via the to address? - # note: this discards the via unless the to address is on - # the via address - my ($ref, $vref); - if ($ref = Route::get($to)) { - $vref = Route::Node::get($via) if $via; - $vref = undef unless $vref && grep $to eq $_, $vref->users; - $ref->dxchan->talk($from, $to, $vref ? $via : undef, $_[3], $_[6]); - return; - } - - # can we see an interface to send it down? - - # not visible here, send a message of condolence - $vref = undef; - $ref = Route::get($from); - $vref = $ref = Route::Node::get($_[6]) unless $ref; - if ($ref) { - $dxchan = $ref->dxchan; - $dxchan->talk($main::mycall, $from, $vref ? $vref->call : undef, $dxchan->msg('talknh', $to) ); - } } # DX Spot handling @@ -598,16 +564,15 @@ sub handle_18 my $parent = Route::Node::get($self->{call}); # record the type and version offered - if ($_[1] =~ /DXSpider Version: (\d+\.\d+)/) { - $self->{version} = 53 + $1; - $self->user->version(53 + $1); - $parent->version(0 + $1); - dbg("DXSpider version $1"); + if (my ($version) = $_[1] =~ /DXSpider Version: (\d+\.\d+)/) { + $self->{version} = 53 + $version; + $self->user->version(53 + $version); + $parent->version(0 + $version); my ($build) = $_[1] =~ /Build: (\d+(?:\.\d+)?)/; $self->{build} = 0 + $build; $self->user->build(0 + $build); $parent->build(0 + $build); - dbg("DXSpider build $build"); + dbg("DXSpider version $version build $build"); unless ($self->is_spider) { dbg("Change U " . $self->user->sort . " C $self->{sort} -> S"); $self->user->sort('S'); @@ -616,8 +581,12 @@ sub handle_18 } # $self->{handle_xml}++ if DXXml::available() && $_[1] =~ /\bxml/; if ($_[1] =~ /\bpc9x/) { - $self->{do_pc9x} = 1; - dbg("Do px9x set on $self->{call}"); + if ($self->{isolate}) { + dbg("pc9x recognised, but is isolated, using old protocol"); + } else { + $self->{do_pc9x} = 1; + dbg("Do px9x set on $self->{call}"); + } } } else { dbg("Unknown software"); @@ -1625,10 +1594,10 @@ sub handle_92 # we only reset obscounts on config records $oparent->reset_obs; - dbg("ROUTE: reset obscount on $pcall now " . $oparent->obscount) if isdbg('route'); + dbg("ROUTE: reset obscount on $pcall now " . $oparent->obscount) if isdbg('obscount'); if ($oparent != $parent) { $parent->reset_obs; - dbg("ROUTE: reset obscount on $parent->{call} now " . $parent->obscount) if isdbg('route'); + dbg("ROUTE: reset obscount on $parent->{call} now " . $parent->obscount) if isdbg('obscount'); } # @@ -1720,6 +1689,11 @@ sub handle_93 } } + # this is catch loops caused by bad software ... + if (eph_dup("PC93|$from|$text|$onode")) { + return; + } + # if this is a 'bad spotter' user then ignore it my $nossid = $from; $nossid =~ s/-\d+$//; @@ -1741,14 +1715,16 @@ sub handle_93 # convert to PC10 talks where appropriate my $ref = Route::get($to); if ($ref) { - my @dxchan = $ref->alldxchan; - for $dxchan (@dxchan) { + # just go for the "best" one for now (rather than broadcast) + $dxchan = $ref->dxchan; +# my @dxchan = $ref->alldxchan; +# for $dxchan (@dxchan) { if ($dxchan->{do_pc9x}) { $dxchan->send($line); } else { $dxchan->talk($from, $to, $via, $text, $onode); } - } +# } return; } @@ -1783,9 +1759,7 @@ sub handle_default my $line = shift; my $origin = shift; - if (eph_dup($line)) { - dbg("PCPROT: Ephemeral dup, dropped") if isdbg('chanerr'); - } else { + unless (eph_dup($line)) { if ($pcno >= 90) { my $pcall = $_[1]; unless (is_callsign($pcall)) {