remove all $Id$ strings
[spider.git] / perl / DXProtHandle.pm
index 99eb71d27464c27299708a1a2590390ecbd84a01..b8c31542285b4c9f45c985795b1d3a1076a8e6b3 100644 (file)
@@ -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");
@@ -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;
                }