$investigation_int $pc19_version $myprot_version
%nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
$allowzero $decode_dk0wcy $send_opernam @checklist
- $handle_xml);
+ $eph_pc15_restime
+ );
$pc11_max_age = 1*3600; # the maximum age for an incoming 'real-time' pc11
$pc23_max_age = 1*3600; # the maximum age for an incoming 'real-time' pc23
$rspfcheck = 1;
$eph_restime = 180;
$eph_info_restime = 60*60;
+$eph_pc15_restime = 6*60;
$eph_pc34_restime = 30;
$pingint = 5*60;
$obscount = 2;
$chatimportfn = "$main::root/chat_import";
$investigation_int = 12*60*60; # time between checks to see if we can see this node
$pc19_version = 5466; # the visible version no for outgoing PC19s generated from pc59
-$handle_xml = 0; # handle XML sentences
@checklist =
(
[ qw(i c c m bp bc c) ], # pc10
- [ qw(i f bm d t m c c h) ], # pc11
+ [ qw(i f m d t m c c h) ], # pc11
[ qw(i c bm m bm bm p h) ], # pc12
[ qw(i c h) ], #
[ qw(i c h) ], #
{
my ($self, $line) = @_;
- if ($line =~ '^<\w+\s') {
+ if ($line =~ '^<\w+\s' && $main::do_xml) {
DXXml::normal($self, $line);
return;
}
# rsfp check
# return if $rspfcheck and !$self->rspfcheck(1, $_[7], $_[6]);
+
+ # is the spotted callsign blank? This should really be trapped earlier but it
+ # could break other protocol sentences. Also check for lower case characters.
+ if ($_[2] =~ /^\s*$/) {
+ dbg("PCPROT: blank callsign, dropped") if isdbg('chanerr');
+ return;
+ }
+ if ($_[2] =~ /[a-z]/) {
+ dbg("PCPROT: lowercase characters, dropped") if isdbg('chanerr');
+ return;
+ }
+
# if this is a 'nodx' node then ignore it
if ($badnode->in($_[7])) {
$self->route($_[2], $line);
}
}
+
+
+sub handle_15
+{
+ my $self = shift;
+ my $pcno = shift;
+ my $line = shift;
+ my $origin = shift;
+
+ if (eph_dup($line, $eph_pc15_restime)) {
+ dbg("PCPROT: Ephemeral dup, dropped") if isdbg('chanerr');
+ } else {
+ unless ($self->{isolate}) {
+ DXChannel::broadcast_nodes($line, $self) if $line =~ /\^H\d+\^?~?$/; # send it to everyone but me
+ }
+ }
+}
# incoming user
sub handle_16
push @rout, $parent->add_user($call, $flags);
}
+ # send info to all logged in thingies
+ $self->tell_login('loginu', "$ncall: $call") if DXUser->get_current($ncall)->is_local_node;
+ $self->tell_buddies('loginb', $call, $ncall);
# add this station to the user database, if required
- $call =~ s/-\d+$//o; # remove ssid for users
+# $call =~ s/-\d+$//o; # remove ssid for users
my $user = DXUser->get_current($call);
$user = DXUser->new($call) if !$user;
$user->homenode($parent->call) if !$user->homenode;
$parent = Route->new($ncall); # throw away
}
+ # send info to all logged in thingies
+ $self->tell_login('logoutu', "$ncall: $ucall") if DXUser->get_current($ncall)->is_local_node;
+ $self->tell_buddies('logoutb', $ucall, $ncall);
+
if (eph_dup($line)) {
dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
return;
$self->user->put;
$self->sort('S');
}
- $self->{handle_xml}++ if $main::do_xml && $_[1] =~ /\bxml\b/;
+ $self->{handle_xml}++ if DXXml::available() && $_[1] =~ /\bxml\b/;
} else {
$self->version(50.0);
$self->version($_[2] / 100) if $_[2] && $_[2] =~ /^\d+$/;
# check for sane parameters
# $ver = 5000 if $ver eq '0000';
+ next unless $ver && $ver =~ /^\d+$/;
next if $ver < 5000; # only works with version 5 software
next if length $call < 3; # min 3 letter callsigns
next if $call eq $main::mycall;