]> code.citadel.org Git - citadel.git/blobdiff - ctdlphp/sessionproxy.php
*** empty log message ***
[citadel.git] / ctdlphp / sessionproxy.php
index 9f56d18b58b25eb5e4a917c4743070dde9d373b5..75bd902438306cc0160626bc4d1a35bf86546fee 100755 (executable)
@@ -8,16 +8,19 @@
 // server connection.  We need one of these for each session because PHP does
 // not have a way to bind a session to a persistent socket.
 //
+// Web designers: don't touch this module.  It's not included in your web pages
+// and therefore you don't need to be here.
+//
 // Copyright (c) 2003 by Art Cancro <ajc@uncensored.citadel.org>
 // This program is released under the terms of the GNU General Public License.
-//
 
 
 // sock_gets() -- reads one line of text from a socket
 // 
 function sock_gets($sock) {
+       socket_clear_error($msgsock);
        $buf = socket_read($sock, 4096, PHP_NORMAL_READ);
-       if ($buf == false) return false;
+       if (socket_last_error($buf)) return false;
 
        if (preg_match("'\n$'s", $buf)) {
                $buf = substr($buf, 0, strpos($buf, "\n"));
@@ -107,6 +110,9 @@ if (substr($buf, 0, 1) != "2") {
 
 do {
        // Wait for connections, but time out after 15 minutes.
+       // socket_select() is completely b0rken in PHP 4.1, which is why
+       // this program requires PHP 4.3 or newer.
+       //
        if (socket_select($readsock = array($sock),
                        $writesock = NULL,
                        $exceptsock = NULL,
@@ -138,6 +144,7 @@ do {
                        }
                        socket_write($msgsock, $talkback, strlen($talkback));
 
+                       // LISTING_FOLLOWS mode
                        if (substr($talkback, 0, 1) == "1") do {
                                $buf = fgets($ctdlsock, 4096);
                                if (!$buf) {
@@ -149,6 +156,21 @@ do {
                                }
                        } while ($buf != "000\n");
 
+                       // SEND_LISTING mode
+                       if (substr($talkback, 0, 1) == "4") do {
+                               socket_clear_error($msgsock);
+                               $buf = sock_gets($msgsock);
+                               if (socket_last_error($msgsock)) {
+                                       $buf = "000" ;
+                               }
+                               if (!fwrite($ctdlsock, $buf . "\n")) {
+                                       fclose($ctdlsock);
+                                       socket_close($sock);
+                                       system("/bin/rm -f " . $sockname);
+                                       exit(11);
+                               }
+                       } while ($buf != "000");
+
                }
        } while($buf !== false);