1. Incorporated sh/st, (un)set/lockout, forward/opername from Iain G0RDI
[spider.git] / perl / cluster.pl
index f1b467321219f222df82efaaffd7dabb8722165c..e343cc0b4175ad56f83be0abc41acc975f54056b 100755 (executable)
@@ -48,7 +48,7 @@ package main;
 
 @inqueue = ();                                 # the main input queue, an array of hashes
 $systime = 0;                                  # the time now (in seconds)
-$version = 1.5;                                        # the version no of the software
+$version = "1.10";                             # the version no of the software
 $starttime = 0;                 # the starting time of the cluster   
  
 # handle disconnections
@@ -85,8 +85,11 @@ sub rec
                        return;
                }
                
-               # is there one already connected elsewhere in the cluster?
-               if (($call eq $main::myalias && DXCluster->get_exact($call)) ||
+               # is there one already connected elsewhere in the cluster (and not a cluster)
+               my $user = DXUser->get($call);
+               if ($user && $user->sort eq 'A' && !DXCluster->get_exact($call)) {
+                       ;
+               } elsif (($call eq $main::myalias && DXCluster->get_exact($call)) ||
                    DXCluster->get($call)) {
                        my $mess = DXM::msg($lang, 'concluster', $call);
                        dbg('chan', "-> D $call $mess\n"); 
@@ -105,7 +108,13 @@ sub rec
                        $user->{lang} = $main::lang if !$user->{lang}; # to autoupdate old systems
                }
                
-               
+               # is he locked out ?
+               if ($user->lockout) {
+                       Log('DXCommand', "$call is locked out, disconnected");
+                       $conn->send_now("Z$call|bye"); # this will cause 'client' to disconnect
+                       return;
+               }
+
                # create the channel
                $dxchan = DXCommandmode->new($call, $conn, $user) if ($user->sort eq 'U');
                $dxchan = DXProt->new($call, $conn, $user) if ($user->sort eq 'A');