$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 =
(
# add this node to the table, the values get filled in later
my $pkg = shift;
my $call = shift;
+
+ # if we have an entry already, then send a PC21 to all connect
+ # old style connections, because we are about to get the real deal
+ if (my $ref = Route::Node::get($call)) {
+ dbg("ROUTE: $call is already in the routing table, deleting") if isdbg('route');
+ my @rout = $ref->delete;
+ $self->route_pc21($main::mycall, undef, @rout) if @rout;
+ }
$main::routeroot->add($call, '5000', Route::here(1)) if $call ne $main::mycall;
return $self;
{
my ($self, $line) = @_;
- if ($line =~ '^<\w+\s') {
+ if ($line =~ '^<\w+\s' && $main::do_xml) {
DXXml::normal($self, $line);
return;
}
# process PC frames, this will fail unless the frame starts PCnn
my ($pcno) = $field[0] =~ /^PC(\d\d)/; # just get the number
- unless (defined $pcno && $pcno >= 10 && $pcno <= 99) {
+ unless (defined $pcno && $pcno >= 10 && $pcno <= 89) { # reject PC9x messages
dbg("PCPROT: unknown protocol") if isdbg('chanerr');
return;
}
$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
}
# is it me?
if ($ncall eq $main::mycall) {
- dbg("PCPROT: trying to alter config on this node from outside!") if isdbg('chanerr');
+ dbg("PCPROT: trying to alter my config from outside!") if isdbg('chanerr');
+ return;
+ }
+ if (DXChannel::get($ncall) && $ncall ne $self->{call}) {
+ dbg("PCPROT: trying to alter locally connected $ncall from $self->{call}, ignored") 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+$/;