5 // This gets called from within the header functions. It establishes or
6 // connects to a PHP session, and then connects to Citadel if necessary.
9 function establish_citadel_session() {
11 global $session, $clientsocket;
15 if ($_SESSION["ctdlsession"]) {
16 $session = $_SESSION["ctdlsession"];
19 $session = "CtdlSession." . time() . rand(1000,9999) ;
20 $_SESSION["ctdlsession"] = $session;
23 // See if there's a Citadel connection proxy open for this session.
24 // The name of the socket is identical to the name of the
25 // session, and it's found in the /tmp directory.
27 $sockname = "/tmp/" . $session . ".socket" ;
29 $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5);
31 // It ain't there, dude. Open up the proxy. (C version)
32 //$cmd = "./sessionproxy " . $sockname ;
35 // It ain't there, dude. Open up the proxy. (PHP version)
36 $cmd = "./sessionproxy.php " . $sockname .
37 " </dev/null >/dev/null 2>&1 " .
38 " 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 & " ;
43 $clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5);
45 // Try to log the user back in and go back to the correct room.
48 ctdl_iden(); // Identify client
50 if ($_SESSION["username"]) {
52 $_SESSION["username"],
57 if ($_SESSION["room"]) {
58 ctdl_goto($_SESSION["room"]);
61 ctdl_goto("_BASEROOM_");
67 if (!$_SESSION["serv_humannode"]) {
72 echo "ERROR: no Citadel socket!<BR>\n";
80 // Clear out both our Citadel session and our PHP session. We're done.
82 function ctdl_end_session() {
83 global $clientsocket, $session;
85 // Tell the Citadel server to terminate our connection.
86 // (The extra newlines force it to see that the Citadel session
87 // ended, and the proxy will quit.)
89 fwrite($clientsocket, "QUIT\n\n\n\n\n\n\n\n\n\n\n");
90 $response = fgets($clientsocket, 4096); // IGnore response
91 fclose($clientsocket);
94 // Now clear our PHP session.
96 session_write_close();