use Geomag;
use WCY;
use Time::HiRes qw(gettimeofday tv_interval);
+use BadWords;
use strict;
use vars qw($me $pc11_max_age $pc23_max_age
@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) ], #
# 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 {
{
my ($self, $line) = @_;
my @field = split /\^/, $line;
+ return unless @field;
+
pop @field if $field[-1] eq '~';
# print join(',', @field), "\n";
SWITCH: {
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;
+ }
+
# is it for me or one of mine?
my ($to, $via, $call, $dxchan);
if ($field[5] gt ' ') {
$call = $via = $field[2];
$to = $field[5];
- unless (is_callsign($to)) {
- dbg('chan', "Corrupt talk, rejected");
- return;
- }
} else {
$call = $to = $field[2];
}
- if ($dxchan = DXChannel->get($call)) {
+ $dxchan = DXChannel->get($call);
+ if ($dxchan && $dxchan->is_user) {
+ $field[3] =~ s/\%5E/^/g;
$dxchan->talk($field[1], $to, $via, $field[3]);
} else {
$self->route($field[2], $line); # relay it on its way
dbg('chan', "Duplicate Spot ignored\n");
return;
}
+ 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]);
dbg('chan', "Duplicate Announce ignored");
return;
}
-
+
+ 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
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;
}
} elsif ($dxchan->is_user && $dxchan->{dx}) {
my $buf = Spot::formatb($dxchan->{user}->wantgrid, $_[0], $_[1], $_[2], $_[3], $_[4]);
$buf .= "\a\a" if $dxchan->{beep};
+ $buf =~ s/\%5E/^/g;
if ($dxchan->{state} eq 'prompt' || $dxchan->{state} eq 'talk') {
$dxchan->send($buf);
} else {
}
next if $target eq 'SYSOP' && $dxchan->{priv} < 5;
my $buf = "$to$target de $_[0]: $text";
+ $buf =~ s/\%5E/^/g;
$buf .= "\a\a" if $dxchan->{beep};
if ($dxchan->{state} eq 'prompt' || $dxchan->{state} eq 'talk') {
$dxchan->send($buf);
{
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
{
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