]> code.citadel.org Git - citadel.git/blobdiff - ctdlphp/ctdlsession.php
*** empty log message ***
[citadel.git] / ctdlphp / ctdlsession.php
index a890e842149692bebc7d170fa755cdd9bdb9ee88..a120094023eac2a073c69cf551af9421d0006bfa 100644 (file)
@@ -5,11 +5,21 @@
 // This gets called from within the header functions.  It establishes or
 // connects to a PHP session, and then connects to Citadel if necessary.
 //
+// Web designers: please make changes in ctdlheader.php, not here.
+//
+// Copyright (c) 2003 by Art Cancro <ajc@uncensored.citadel.org>
+// This program is released under the terms of the GNU General Public License.
+
 
 function establish_citadel_session() {
 
        global $session, $clientsocket;
 
+       if (strcmp('4.3.0', phpversion()) > 0) {
+               die("This program requires PHP 4.3.0 or newer.");
+       }
+
+
        session_start();
 
        if ($_SESSION["ctdlsession"]) {
@@ -37,34 +47,59 @@ function establish_citadel_session() {
                        " </dev/null >/dev/null 2>&1 " .
                        " 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 & " ;
                exec($cmd);
-               sleep(2);
 
-               // Ok, now try again.
-               $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5);
+               // Keep attempting connections 10 times per second up to 100 times
+               $attempts = 0;
+               while (!$clientsocket) {
+                       usleep(100);
+                       $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5);
+                       $attempts += 1;
+                       if ($attempts > 100) {
+                               echo "ERROR: unable to start connection proxy. ";
+                               echo "Please contact your system administrator.<BR>\n";
+                               flush();
+                               exit(1);
+                       }
+               }
 
-               // Try to log the user back in.
-               if ($clientsocket) {
+               // At this point we have a good connection to Citadel.
 
-                       ctdl_iden();    // Identify client
+               ctdl_iden();    // Identify client
 
-                       if ($_SESSION["username"]) {
-                               login_existing_user(
-                                       $_SESSION["username"],
-                                       $_SESSION["password"]
-                               );
-                       }
+               if ($_SESSION["username"]) {
+                       login_existing_user(
+                               $_SESSION["username"],
+                               $_SESSION["password"]
+                       );
                }
-       }
 
-       if ($clientsocket) {
-               if (!$_SESSION["serv_humannode"]) {
-                       ctdl_get_serv_info();
+               if ($_SESSION["room"]) {
+                       ctdl_goto($_SESSION["room"]);
+               }
+               else {
+                       ctdl_goto("_BASEROOM_");
                }
        }
-       else {
-               echo "ERROR: no Citadel socket!<BR>\n";
-               flush();
+
+       if (!$_SESSION["serv_humannode"]) {
+               ctdl_get_serv_info();
+       }
+
+       // If the user is trying to call up any page other than
+       // login.php logout.php do_login.php,
+       // and the session is not logged in, redirect to login.php
+       //
+       if ($_SESSION["logged_in"] != 1) {
+               $filename = basename(getenv('SCRIPT_NAME'));
+               if (    (strcmp($filename, "login.php"))
+                  &&   (strcmp($filename, "logout.php"))
+                  &&   (strcmp($filename, "do_login.php"))
+               ) {
+                       header("Location: login.php");
+                       exit(0);
+               }
        }
+
        
 }