X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=f75d55c231e0c9b0e51ec79896d4c5de1ae48ff9;hb=8f391050421dd665bbf5fdcb3279a6074d97a74e;hp=1d9f1a622b5640de90e5bb8b3476bd607365d841;hpb=1f2757c4c57b6b4492923ed4edd7f0f912a31157;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 1d9f1a62..f75d55c2 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -53,7 +53,7 @@ $baddxfn = "$main::data/baddx.pl"; ( [ qw(c c m p bc c) ], # pc10 [ qw(f m d t m c c h) ], # pc11 - [ qw(c bc m p c p h) ], # pc12 + [ qw(c bc m bp bm p h) ], # pc12 [ qw(c h) ], # [ qw(c h) ], # [ qw(c m h) ], # @@ -64,12 +64,12 @@ $baddxfn = "$main::data/baddx.pl"; undef , # pc20 no validation [ qw(c m h) ], # pc21 undef , # pc22 no validation - [ qw(d t n n n m c c h) ], # pc23 + [ qw(d n n n n m c c h) ], # pc23 [ qw(c p h) ], # pc24 [ qw(c c n n) ], # pc25 - [ qw(f c m d t c c) ], # pc26 - [ qw(d t n n n m c c) ], # pc27 - [ qw(c c c c d t p m bp n p bp c) ], # pc28 + [ qw(f m d t m c c bc) ], # pc26 + [ qw(d n n n n m c c bc) ], # pc27 + [ qw(c c c c d t p m bp n p bp bc) ], # pc28 [ qw(c c n m) ], # pc29 [ qw(c c n) ], # pc30 [ qw(c c n) ], # pc31 @@ -114,7 +114,7 @@ $baddxfn = "$main::data/baddx.pl"; undef, # pc70 undef, undef, - [ qw(d n n n n n n n m m m c c) ], # pc73 + [ qw(d n n n n n n m m m c c h) ], # pc73 undef, undef, undef, @@ -141,9 +141,10 @@ sub check my $i; shift; # not interested in the first field - for ($i = 0; $i < @_; $i++) { + for ($i = 0; $i < @$ref; $i++) { my ($blank, $act) = $$ref[$i] =~ /^(b?)(\w)$/; - next if $blank && $_[$i] eq ' '; + return 0 unless $act; + next if $blank && $_[$i] =~ /^[ \*]$/; if ($act eq 'c') { return $i+1 unless is_callsign($_[$i]); } elsif ($act eq 'm') { @@ -174,16 +175,16 @@ sub init $me->{state} = "indifferent"; do "$main::data/hop_table.pl" if -e "$main::data/hop_table.pl"; confess $@ if $@; - # $me->{sort} = 'M'; # M for me + $me->{sort} = 'S'; # S for spider # now prime the spot and wwv duplicates file with data - my @today = Julian::unixtoj(time); - for (Spot::readfile(@today), Spot::readfile(Julian::sub(@today, 1))) { - Spot::dup(@{$_}[0..3]); - } - for (Geomag::readfile(time)) { - Geomag::dup(@{$_}[1..5]); - } +# my @today = Julian::unixtoj(time); +# for (Spot::readfile(@today), Spot::readfile(Julian::sub(@today, 1))) { +# Spot::dup(@{$_}[0..3]); +# } +# for (Geomag::readfile(time)) { +# Geomag::dup(@{$_}[1..5]); +# } # load the baddx file do "$baddxfn" if -e "$baddxfn"; @@ -238,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 { @@ -262,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"; @@ -421,7 +424,7 @@ sub normal # announce duplicate checking $field[3] =~ s/^\s+//; # remove leading blanks if (AnnTalk::dup($field[1], $field[2], $field[3])) { - dbg('chan', "Duplicate Announce ignored\n"); + dbg('chan', "Duplicate Announce ignored"); return; } @@ -614,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; } @@ -724,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; } @@ -885,6 +892,13 @@ sub normal return; } + if ($pcno == 75) { # dunno but route it + if ($field[1] ne $main::mycall) { + $self->route($field[1], $line); + } + return; + } + if ($pcno == 73) { # WCY broadcasts # do some de-duping @@ -1026,9 +1040,9 @@ sub process my $val; my $cutoff; if ($main::systime - 3600 > $last_hour) { - Spot::process; - Geomag::process; - AnnTalk::process; +# Spot::process; +# Geomag::process; +# AnnTalk::process; $last_hour = $main::systime; } } @@ -1258,7 +1272,10 @@ sub send_announce $dxchan->send($routeit) unless $dxchan->{isolate} || $self->{isolate}; } - } elsif ($dxchan->is_user && $dxchan->{ann}) { + } elsif ($dxchan->is_user) { + unless ($dxchan->{ann}) { + next if $_[0] ne $main::myalias && $_[0] ne $main::mycall; + } next if $target eq 'SYSOP' && $dxchan->{priv} < 5; my $buf = "$to$target de $_[0]: $text"; $buf .= "\a\a" if $dxchan->{beep}; @@ -1343,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 @@ -1360,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