allow blank in field 4 of PC10
[spider.git] / perl / DXProt.pm
index a607b4094151155fb7edd7553c435ae0e08f2d34..e2c1dae4221ebdc9cceca1ce97c14b09d11637f4 100644 (file)
@@ -51,7 +51,7 @@ $baddxfn = "$main::data/baddx.pl";
 
 @checklist = 
 (
- [ qw(c c m p bc c) ],                 # pc10
+ [ qw(c c m bp bc c) ],                        # pc10
  [ qw(f m d t m c c h) ],              # pc11
  [ qw(c bc m bp bm p h) ],             # pc12
  [ qw(c h) ],                                  # 
@@ -239,7 +239,7 @@ sub start
 
        # send initialisation string
        unless ($self->{outbound}) {
-               $self->send(pc38()) if DXNode->get_all();
+#              $self->send(pc38()) if DXNode->get_all();
                $self->send(pc18());
                $self->{lastping} = $main::systime;
        } else {
@@ -263,6 +263,8 @@ sub normal
 {
        my ($self, $line) = @_;
        my @field = split /\^/, $line;
+       return unless @field;
+       
        pop @field if $field[-1] eq '~';
        
 #      print join(',', @field), "\n";
@@ -615,12 +617,16 @@ sub normal
                        if ($call ne $main::mycall) { # don't allow malicious buggers to disconnect me!
                                my $node = DXCluster->get_exact($call);
                                if ($node) {
+                                       if ($call eq $self->{call}) {
+                                               dbg('chan', "LOOP: Trying to disconnect myself with PC21");
+                                               return;
+                                       } 
                                        if ($node->dxchan != $self) {
                                                dbg('chan', "LOOP: $call come in on wrong channel");
                                                return;
                                        }
                                        my $dxchan;
-                                       if (($dxchan = DXChannel->get($call)) && $dxchan != $self) {
+                                       if ($dxchan = DXChannel->get($call)) {
                                                dbg('chan', "LOOP: $call connected locally");
                                                return;
                                        }
@@ -725,7 +731,7 @@ sub normal
                        if ($pcno == 49 || $field[1] eq $main::mycall) {
                                DXMsg::process($self, $line);
                        } else {
-                               $self->route($field[1], $line);
+                               $self->route($field[1], $line) unless $self->is_clx;
                        }
                        return;
                }
@@ -1354,7 +1360,7 @@ sub broadcast_ak1a
 {
        my $s = shift;                          # the line to be rebroadcast
        my @except = @_;                        # to all channels EXCEPT these (dxchannel refs)
-       my @dxchan = DXChannel::get_all_ak1a();
+       my @dxchan = DXChannel::get_all_nodes();
        my $dxchan;
        
        # send it if it isn't the except list and isn't isolated and still has a hop count
@@ -1371,7 +1377,7 @@ sub broadcast_all_ak1a
 {
        my $s = shift;                          # the line to be rebroadcast
        my @except = @_;                        # to all channels EXCEPT these (dxchannel refs)
-       my @dxchan = DXChannel::get_all_ak1a();
+       my @dxchan = DXChannel::get_all_nodes();
        my $dxchan;
        
        # send it if it isn't the except list and isn't isolated and still has a hop count