X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=7d2968cedb626ccdc85be4a3e656eacdade0da57;hb=40178a4be6f9dc1e1a409b96fc087cf971886fd0;hp=b83da41784b10ebb4f4d76bd13c25b34d30dfc3b;hpb=ac14c6983861c08b8a2842af46e67407600f8065;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index b83da417..7d2968ce 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -461,18 +461,17 @@ sub handle_16 push @rout, @ans if $h && @ans; } - # 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 - my $user = DXUser->get_current($call); - $user = DXUser->new($call) if !$user; + my $user = DXUser->get_current($ncall); + $user = DXUser->new($call) unless $user; $user->homenode($parent->call) if !$user->homenode; $user->node($parent->call); $user->lastin($main::systime) unless DXChannel::get($call); $user->put; + + # send info to all logged in thingies + $self->tell_login('loginu', "$ncall: $call") if $user->is_local_node; + $self->tell_buddies('loginb', $call, $ncall); } if (@rout) { $self->route_pc16($origin, $line, $parent, @rout) if @rout; @@ -540,7 +539,8 @@ sub handle_17 $parent->del_user($uref); # send info to all logged in thingies - $self->tell_login('logoutu', "$ncall: $ucall") if DXUser->get_current($ncall)->is_local_node; + my $user = DXUser->get_current($ncall); + $self->tell_login('logoutu', "$ncall: $ucall") if $user && $user->is_local_node; $self->tell_buddies('logoutb', $ucall, $ncall); if (eph_dup($line)) { @@ -582,7 +582,9 @@ sub handle_18 # $self->{handle_xml}++ if DXXml::available() && $_[1] =~ /\bxml/; if ($_[1] =~ /\bpc9x/) { if ($self->{isolate}) { - dbg("pc9x recognised, but is isolated, using old protocol"); + dbg("pc9x recognised, but $self->{call} is isolated, using old protocol"); + } elsif (!$self->user->wantpc9x) { + dbg("pc9x explicitly switched off on $self->{call}, using old protocol"); } else { $self->{do_pc9x} = 1; dbg("Do px9x set on $self->{call}"); @@ -1462,9 +1464,17 @@ sub handle_92 } if ($pcall eq $self->{call} && $self->{state} eq 'init') { - $self->state('init92'); - $self->{do_pc9x} = 1; - dbg("Do pc9x set on $pcall"); + if ($self->{isolate}) { + dbg("PC9x received, but $pcall is isolated, ignored"); + return; + } elsif (!$self->user->wantpc9x) { + dbg("PC9x explicitly switched off on $pcall, ignored"); + return; + } else { + $self->state('init92'); + $self->{do_pc9x} = 1; + dbg("Do pc9x set on $pcall"); + } } unless ($self->{do_pc9x}) { dbg("PCPROT: PC9x come in from non-PC9x node, ignored") if isdbg('chanerr'); @@ -1677,6 +1687,12 @@ sub handle_93 dbg("PCPROT: invalid callsign string '$_[1]', ignored") if isdbg('chanerr'); return; } + + unless ($self->{do_pc9x}) { + dbg("PCPROT: PC9x come in from non-PC9x node, ignored") if isdbg('chanerr'); + return; + } + my $t = $_[2]; my $parent = check_pc9x_t($pcall, $t, 93, 1) || return;