X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=1f2a642809e31b97637b3ea5b24e22fe74dcfd86;hb=c5e90df0d93d141f8687556a708068521b9b8f77;hp=cd731a216fbcd64866720cb70c0c841bbdcedf2c;hpb=8e0eef80216fbb2bca3606daf5797e39b2889d7a;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index cd731a21..1f2a6428 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -34,7 +34,7 @@ use BadWords; use strict; use vars qw($me $pc11_max_age $pc23_max_age $last_hour %pings %rcmds - %nodehops @baddx $baddxfn + %nodehops @baddx $baddxfn $censorpc $allowzero $decode_dk0wcy $send_opernam @checklist); $me = undef; # the channel id for this cluster @@ -46,7 +46,7 @@ $last_hour = time; # last time I did an hourly periodic update %rcmds = (); # outstanding rcmd requests outbound %nodehops = (); # node specific hop control @baddx = (); # list of illegal spotted callsigns - +$censorpc = 0; # Do a BadWords::check on text fields and reject things $baddxfn = "$main::data/baddx.pl"; @@ -178,15 +178,6 @@ sub init confess $@ if $@; $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]); -# } - # load the baddx file do "$baddxfn" if -e "$baddxfn"; print "$@\n" if $@; @@ -297,10 +288,12 @@ sub normal if ($pcno == 10) { # incoming talk # will we allow it at all? - my @bad; - if (@bad = BadWords::check($field[3])) { - dbg('chan', "Bad words: @bad, dropped" ); - return; + if ($censorpc) { + my @bad; + if (@bad = BadWords::check($field[3])) { + dbg('chan', "Bad words: @bad, dropped" ); + return; + } } # is it for me or one of mine? @@ -357,10 +350,12 @@ sub normal dbg('chan', "Duplicate Spot ignored\n"); return; } - my @bad; - if (@bad = BadWords::check($field[5])) { - dbg('chan', "Bad words: @bad, dropped" ); - return; + if ($censorpc) { + my @bad; + if (@bad = BadWords::check($field[5])) { + dbg('chan', "Bad words: @bad, dropped" ); + return; + } } my @spot = Spot::add($field[1], $field[2], $d, $field[5], $field[6], $field[7]); @@ -439,11 +434,14 @@ sub normal return; } - my @bad; - if (@bad = BadWords::check($field[3])) { - dbg('chan', "Bad words: @bad, dropped" ); - return; + if ($censorpc) { + my @bad; + if (@bad = BadWords::check($field[3])) { + dbg('chan', "Bad words: @bad, dropped" ); + return; + } } + if ($field[2] eq '*' || $field[2] eq $main::mycall) { # global ann filtering on INPUT @@ -1355,19 +1353,22 @@ sub send_local_config sub route { my ($self, $call, $line) = @_; - my $cl = DXCluster->get_exact($call); - if ($cl) { # don't route it back down itself - if (ref $self && $call eq $self->{call}) { - dbg('chan', "Trying to route back to source, dropped"); - return; - } - my $hops; - my $dxchan = $cl->{dxchan}; - if ($dxchan) { - my $routeit = adjust_hops($dxchan, $line); # adjust its hop count by node name - if ($routeit) { - $dxchan->send($routeit) if $dxchan; - } + + if (ref $self && $call eq $self->{call}) { + dbg('chan', "Trying to route back to source, dropped"); + return; + } + + # always send it down the local interface if available + my $dxchan = DXChannel->get($call); + unless ($dxchan) { + my $cl = DXCluster->get_exact($call); + $dxchan = $cl->dxchan if $cl; + } + if ($dxchan) { + my $routeit = adjust_hops($dxchan, $line); # adjust its hop count by node name + if ($routeit) { + $dxchan->send($routeit); } } }