X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fcluster.pl;h=3e57deb6dca15f9acebf0bd847f96228a88dbb8a;hb=fda536aef281e0f6fc68a02c537d18650bd5505f;hp=9735aa30b10b5a42649625ad42ef03ae40eb9f60;hpb=c87f5c87d207de16008d38561a7bc547a10ea62b;p=spider.git diff --git a/perl/cluster.pl b/perl/cluster.pl index 9735aa30..3e57deb6 100755 --- a/perl/cluster.pl +++ b/perl/cluster.pl @@ -251,16 +251,18 @@ sub new_channel $basecall =~ s/-\d+$//; # remember this for later multiple user processing my $lock; if ($user) { - # we are a real user + # make sure we act on any locked status that the actual incoming call has. $lock = $user->lockout; - } elsif ($allowmultiple) { - # could we be a potential "pseudo" connection + } elsif ($allowmultiple && $call ne $basecall) { + # if we are allowing multiple connections and there is a basecall minus incoming ssid, use the basecall's lock status $user = DXUser::get_current($basecall); $lock = $user->lockout if $user; } + + # now deal with the lock if ($lock) { my $host = $conn->peerhost; - LogDbg('DXCommand', "$call on $host is locked out, disconnected"); + LogDbg('', "$call on $host is locked out, disconnected"); $conn->disconnect; return; } @@ -281,7 +283,7 @@ sub new_channel my $allow = 0; if (@lastconns >= $DXUser::maxconnlist) { $allow = $lastconns[-1]->[0] - $lastconns[0]->[0] < $min_reconnection_rate; - } + } # search for a spare ssid L1: for (my $count = $call =~ /-\d+$/?0:1; $allow && $count < $allowmultiple; ) { # remember we have one call already my $lastid = 1; @@ -303,7 +305,7 @@ sub new_channel if ($bumpexisting) { my $ip = $dxchan->hostname; $dxchan->send_now('D', DXM::msg($lang, 'conbump', $call, $ip)); - Log('', "$call bumped off by $ip, disconnected"); + LogDbg('', "$call bumped off by $ip, disconnected"); $dxchan->disconnect; } else { already_conn($conn, $call, DXM::msg($lang, 'conother', $call, $main::mycall)); @@ -327,7 +329,7 @@ sub new_channel $v = defined $c ? $c : $m; if ($v && @n >= $v+$allowmultiple) { my $nodes = join ',', @n; - LogDbg('DXCommand', "$call has too many connections ($v) at $nodes - disconnected"); + LogDbg('', "$call has too many connections ($v) at $nodes - disconnected"); already_conn($conn, $call, DXM::msg($lang, 'contomany', $call, $v, $nodes)); return; } @@ -354,7 +356,7 @@ sub new_channel # set callbacks - $conn->set_error(sub {my $err = shift; LogDbg('DXCommand', "Comms error '$err' received for call $dxchan->{call}"); $dxchan->disconnect(1);}); + $conn->set_error(sub {my $err = shift; LogDbg('', "Comms error '$err' received for call $dxchan->{call}"); $dxchan->disconnect(1);}); $conn->set_on_eof(sub {$dxchan->disconnect}); $conn->set_rproc(sub {my ($conn,$msg) = @_; $dxchan->rec($msg);}); if ($sort eq 'W') {