WIP RBN
[spider.git] / perl / cluster.pl
index 9735aa30b10b5a42649625ad42ef03ae40eb9f60..1fc293f209ace278768b9aadf5d88c86c89fa951 100755 (executable)
@@ -146,7 +146,7 @@ use DXXml;
 use DXSql;
 use IsoTime;
 use BPQMsg;
-
+use RBN;
 
 
 use Data::Dumper;
@@ -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;
                        }
@@ -344,7 +346,9 @@ sub new_channel
                
                $user->startt($systime); # mark the start time of this connection
                if ($user->is_node) {
-                       $dxchan = DXProt->new($call, $conn, $user);
+                       $dxchan = DXProt->new($call, $conn, $user);     
+               } elsif ($user->is_rbn) {
+                       $dxchan = RBN->new($newcall, $conn, $user);
                } elsif ($user->is_user) {
                        $dxchan = DXCommandmode->new($newcall, $conn, $user);
                } else {
@@ -354,7 +358,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') {
@@ -481,7 +485,7 @@ sub setup_start
        }
        STDOUT->autoflush(1);
 
-       
+
        # try to load the database
        if (DXSql::init($dsn)) {
                $dbh = DXSql->new($dsn);
@@ -511,8 +515,8 @@ sub setup_start
                                if ($desc) {
                                        my ($v, $s, $b, $g) = $desc =~ /^([\d.]+)(?:\.(\d+))?-(\d+)-g([0-9a-f]+)/;
                                        $s ||= '';
-                                       dbg("Git: $desc");
-                                       dbg("Git: V=$v S=$s B=$b g=$g");
+                                       dbg("Git: $desc") if isdbg('git');
+                                       dbg("Git: V=$v S=$s B=$b g=$g") if isdbg('git');
                                        $version = $v;
                                        $build = $b || 0;
                                        $gitversion = "$g\[r]";