# this is to allow the feed to "warm up" with duplicates
# so that the "big rush" doesn't happen.
-our $respottime = 30*60; # the time between respots of a callsign - if a call is
+our $respottime = 3*60; # the time between respots of a callsign - if a call is
# still being spotted (on the same freq) and it has been
# spotted before, it's spotted again after this time
# until the next respottime has passed.
my $name = $user->{name};
# log it
- my $host = $self->{conn}->peerhost;
- $host ||= "unknown";
- $self->{hostname} = $host;
+ unless ($self->{hostname}) {
+ $self->{hostname} = $self->{conn}->peerhost || 'unknown';
+ }
$self->{name} = $name ? $name : $call;
$self->state('prompt'); # a bit of room for further expansion, passwords etc
$self->{width} = 80 unless $self->{width} && $self->{width} > 80;
$self->{consort} = $line; # save the connection type
- LogDbg('DXCommand', "$call connected from $self->{hostname}");
+ LogDbg('err', "$call connected from $self->{hostname}");
# set some necessary flags on the user if they are connecting
$self->{registered} = 1;
return;
}
+ # is it 'baddx'
+ if ($DXProt::baddx->in($call)) {
+ dbg("RBN: Bad DX spot '$call', ignored");
+ dbg($line) if isdbg('nologchan');
+ return;
+ }
+
+
# remove all extraneous crap from the origin - just leave the base callsign
my $norigin = basecall($origin);
unless ($norigin) {
#
# But before we do anything, if this call is in the seeme hash then just send the spot to them
#
- if (exists $seeme{$call} && (my $scall = $seeme{basecall($call)})) {
- my $uchan = DXChannel::get($call);
- if ($uchan) {
- if ($uchan->is_user) {
- if (isdbg('seeme')) {
- dbg("seeme: $line");
- dbg( qq{seemme:decode or:$origin qr:$qrg ca:$call mo:$mode s:$s m:$m sp:$spd u:$u sort:$sort t:$t tx:$tx qra:$qra});
+ if (exists $seeme{$call} && (my $ref = $seeme{$call})) {
+ foreach my $rcall ( @$ref) {
+ my $uchan = DXChannel::get($rcall);
+ if ($uchan) {
+ if ($uchan->is_user) {
+ if (isdbg('seeme')) {
+ dbg("seeme: $line");
+ dbg( qq{seemme:decode or:$origin qr:$qrg ca:$call mo:$mode s:$s m:$m sp:$spd u:$u sort:$sort t:$t tx:$tx qra:$qra});
+ }
+ my @s = Spot::prepare($qrg, $call, $utz, sprintf("%-3s %2ddB **SEEME**", $mode, $s), $origin.'-#');
+ my $buf = $uchan->format_dx_spot(@s);
+ dbg("seeme: result '$buf'") if isdbg('seeme');
+ $uchan->local_send('S', $buf);
+ } else {
+ LogDbg('err',"RBN Someone is playing silly persons $rcall is not a user and cannot do 'seeme', ignored and reset");
+ del_seeme($rcall);
}
- my @s = Spot::prepare($qrg, $call, $utz, sprintf("%-3s %2ddB **SEEME**", $mode, $s), $origin.'-#');
- my $buf = $uchan->format_dx_spot(@s);
- dbg("seeme: result '$buf'") if isdbg('seeme');
- $uchan->local_send('S', $buf) if $scall;
- } else {
- LogDbg("RBN Someone is playing silly persons $call is not a user and cannot do 'seeme', ignored and reset");
- delete $seeme{$call};
}
}
}
+
# find it?
my $cand = $spots->{$sp};
unless ($cand) {
my $self = shift;
my $quality = shift;
my $cand = shift;
-
+
++$self->{norbn};
++$self->{norbn10};
++$self->{norbnhour};
next unless $dxchan->is_rbn;
dbg "RBN:STATS minute $dxchan->{call} raw: $dxchan->{noraw} retrieved spots: $dxchan->{norbn} delivered: $dxchan->{nospot} after filtering to users: " . scalar keys %{$dxchan->{nousers}} if isdbg('rbnstats');
if ($dxchan->{noraw} == 0 && $dxchan->{lasttime} > 60) {
- LogDbg('RBN', "RBN: no input from $dxchan->{call}, disconnecting");
+ LogDbg('err', "RBN: no input from $dxchan->{call}, disconnecting");
$dxchan->disconnect;
}
$dxchan->{noraw} = $dxchan->{norbn} = $dxchan->{nospot} = 0; $dxchan->{nousers} = {};
sub write_cache
{
+ return unless $json;
+
my $ta = [ gettimeofday ];
+
$json->indent(1)->canonical(1) if isdbg 'rbncache';
my $s = eval {$json->encode($spots)};
if ($s) {
sub add_seeme
{
my $call = shift;
- $seeme{basecall($call)} = 1;
+ my $base = basecall($call);
+ my $ref = $seeme{$base} || [];
+ push @$ref, $call unless grep $_ eq $call, @$ref;
+ $seeme{$base} = $ref;
}
sub del_seeme
{
my $call = shift;
- delete $seeme{basecall($call)};
+ my $base = basecall($call);
+ my $ref = $seeme{$base};
+ return unless $ref && @$ref;
+
+ @$ref = grep {$_ ne $call} @$ref;
+ if (@$ref) {
+ $seeme{$base} = $ref;
+ } else {
+ delete $seeme{basecall($call)};
+ }
}
1;