+03Jan25======================================================================
+1. Filter cleanup (especially filter debugging)
+31Jan25======================================================================
+1. Fixed botched node link initialisation check. This what prevent ann/full
+ working and would have stopped talk, rcmd etc etc.
+2. Added a field called 'state' to the who command to allow sysops to
+ diagnose some connection initialisation problems.
+3. Add some callsigns to badnode/badspotter callsigns in debug messages.
+29Jan25======================================================================
+1. Fix dx command <cough>. "I never changed that bit". If I had this would
+ never have happened.
+2. Fixed another fix that was to do with deduping and thus cause locally
+ generated spots to be stored in the local spot files again.
+3. Made an attempt to allow perl regex filter statements to work on callsigns
+ as well comments and other text fields. This means that:
+ reject/spot call {wwa$} or info {w\s*\w\*a}
+ will likely reduce your spots considerably.
28Jan25======================================================================
1. Set default Spot qrg granularity to 1KHz (was 25KHz).
2. Refine Incoming CCLuster connection handling. It is a requirement that a
if ($filter) {
push @rin, $r;
} else {
- dbg("PCPROT: $self->{call}/" . $r->call . " rejected by output filter") if isdbg('filter');
+ dbg("PCPROT: send_route $self->{call}/" . $r->call . " rejected by output filter") if isdbg('filter');
}
} else {
dbg("was sent a null value") if isdbg('chanerr');
# if this is a 'nodx' node then ignore it
if ($badnode->in($pc->[6]) || ($via && $badnode->in($via))) {
dbg($line) if isdbg('nologchan');
- dbg("PCPROT: Bad Node, dropped");
+ dbg("PCPROT: Bad Node $pc->[6]/$via, dropped");
return;
}
$nossid =~ s/-\d+$//;
if ($badspotter->in($nossid)) {
dbg($line) if isdbg('nologchan');
- dbg("PCPROT: Bad Spotter, dropped");
+ dbg("PCPROT: Bad Spotter $nossid, dropped");
return;
}
# is this is a 'bad spotter' or an unknown user then ignore it.
if ($badspotter->in($nossid)) {
dbg($line) if isdbg('nologchan');
- dbg("PCPROT: Bad Spotter $pc->[6], dropped");
+ dbg("PCPROT: Bad Spotter $nossid, dropped");
return;
}
# if this is a 'nodx' node then ignore it
if ($badnode->in($pc->[5])) {
dbg($line) if isdbg('nologchan');
- dbg("PCPROT: Bad Node, dropped");
+ dbg("PCPROT: Bad Node $pc->[5], dropped");
return;
}
$nossid =~ s/-\d+$//;
if ($badspotter->in($nossid)) {
dbg($line) if isdbg('nologchan');
- dbg("PCPROT: Bad Spotter, dropped");
+ dbg("PCPROT: Bad Spotter $nossid, dropped");
return;
}
$nossid =~ s/-\d+$//;
if ($badspotter->in($nossid)) {
dbg($line) if isdbg('nologchan');
- dbg("PCPROT: Bad Spotter, dropped");
+ dbg("PCPROT: Bad Spotter $nossid, dropped");
return;
}
my $key;
my $type = 'Dunno';
my $asc = '?';
+
+ my $r = 1;
+ my $reason = '';
+
+ my $hit = undef;
+ my $true = 'PASS';
+
- my $r = @keys > 0 ? 0 : 1;
foreach $key (@keys) {
$filter = $self->{$key};
if ($filter->{reject} && exists $filter->{reject}->{code}) {
$asc = $filter->{reject}->{user};
if (&{$filter->{reject}->{code}}(ref $_[0] ? $_[0] : \@_)) {
$r = 0;
+ $true = 'REJ ';
+ $hit = $filter->{reject};
+ $reason = $hit->{user};
last;
} else {
+ $true = 'OK ';
$r = 1;
}
}
$asc = $filter->{accept}->{user};
if (&{$filter->{accept}->{code}}(ref $_[0] ? $_[0] : \@_)) {
$r = 1;
+ $true = 'ACC ';
+ $hit = $filter->{accept};
+ $reason = $hit->{user};
last;
} else {
+ $true = 'OK ';
$r = 0;
}
- }
+ }
}
# hops are done differently (simply)
if (isdbg('filter')) {
my $call = $self->{name};
- my $args = join '\',\'', map {defined $_ ? $_ : 'undef'} (ref $_[0] ? @{$_[0]} : @_);
- my $true = $r ? "OK " : "REJ";
+ my $args = join ', ', map {defined $_ ? $_ : 'undef'} (ref $_[0] ? @{$_[0]} : @_);
my $sort = $self->{sort};
my $dir = $self->{name} =~ /^in_/i ? "IN " : "OUT";
$call =~ s/\.PL$//i;
- my $h = $hops || '';
- dbg("Filter: $call $true $dir: $type/$sort with '$asc' on '$args' $h") if isdbg('filter');
+ my $h = " hops: $hops" || '';
+ if ($reason) {
+ dbg("Filter: $call $true $dir $type/$sort '$reason' on '$args'") if isdbg('filter');
+ } else {
+ dbg("Filter: $call $true $dir on '$args'") if isdbg('filter');
+ }
}
return ($r, $hops);
}