X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fspush%2Fbrisk-spush.php;h=1f3d7e4bc0053862d9d033d60190186afdc2e66c;hb=525cfe7d868bfaefdde9f769f52a50bcb6f1e9e9;hp=1a4dd28c5536e81af0966aeaa4e05dc995866dad;hpb=5eeadcbd74dbf5a562a0e9cfa624455395cf345f;p=brisk.git diff --git a/web/spush/brisk-spush.php b/web/spush/brisk-spush.php index 1a4dd28..1f3d7e4 100755 --- a/web/spush/brisk-spush.php +++ b/web/spush/brisk-spush.php @@ -21,16 +21,27 @@ * not, write to the Free Software Foundation, Inc, 59 Temple Place - * Suite 330, Boston, MA 02111-1307, USA. * + * TODO + * problema con getpeer (HOSTADDR) + * setcookie (for tables only) + * keepalive + * chunked + * index_rd.php porting + * index.php auth part + * generic var management from internet */ $G_base = "../"; +require_once("./sac-a-push.phh"); require_once("./brisk-spush.phh"); -require_once("../Obj/brisk.phh"); -require_once("../Obj/auth.phh"); +require_once($G_base."Obj/brisk.phh"); +require_once($G_base."Obj/auth.phh"); // require_once("../Obj/proxyscan.phh"); -require_once("./sac-a-push.phh"); -require_once("../index.php"); +require_once($G_base."index.php"); +require_once($G_base."index_wr.php"); +require_once($G_base."index_rd_ifra.php"); +require_once($G_base."briskin5/Obj/briskin5.phh"); define('SITE_PREFIX', '/brisk/'); @@ -119,13 +130,20 @@ function user_get_sess($user_arr, $sess) return FALSE; } -function headers_get() +function headers_render($header) { + $s = ""; $s .= "HTTP/1.1 200 OK\r\n"; - $s .= sprintf("Date: %s\r\n", date(DATE_RFC822)); - $s .= "Connection: close\r\n"; - $s .= "Content-Type: text/html\r\n"; + if (!isset($header['Date'])) + $s .= sprintf("Date: %s\r\n", date(DATE_RFC822)); + if (!isset($header['Connection'])) + $s .= "Connection: close\r\n"; + if (!isset($header['Content-Type'])) + $s .= "Content-Type: text/html\r\n"; + foreach($header as $key => $value) { + $s .= sprintf("%s: %s\r\n", $key, $value); + } $s .= "Mop: was/here\r\n"; $s .= "\r\n"; @@ -138,16 +156,7 @@ function headers_get() * to a var and than send it with more calm */ $G_headers = ""; -$G_content = ""; - -function spu_store($s) -{ - GLOBAL $G_content; - $G_content .= $s; - - return ''; -} function shutta() { log_rd2("SHUTTA [".connection_status()."] !"); @@ -162,7 +171,7 @@ $shutdown = FALSE; function main() { - GLOBAL $G_headers, $G_content; + GLOBAL $G_headers; GLOBAL $shutdown; $main_loop = TRUE; @@ -220,7 +229,7 @@ function main() } $write = NULL; $except = NULL; - $num_changed_sockets = stream_select($read, $write, $except, 5); + $num_changed_sockets = stream_select($read, $write, $except, 1); // 0, 250000); if ($num_changed_sockets === FALSE) { printf("No data in 5 secs"); @@ -237,8 +246,9 @@ function main() $new_unix = stream_socket_accept($list); $stream_info = ""; $method = ""; - $get = ""; - $post = ""; + $get = array(); + $post = array(); + $cookie = array(); if (($new_socket = ancillary_getstream($new_unix, $stream_info)) !== FALSE) { printf("RECEIVED HEADER:\n%s", $stream_info); $path = spu_process_info($stream_info, $method, $header, $get, $post, $cookie); @@ -255,14 +265,59 @@ function main() switch ($path) { case SITE_PREFIX: case SITE_PREFIX."index.php": + $header_out = array(); + ob_start(); + index_main($room, $header_out, $get, $post, $cookie); + $content = ob_get_contents(); + ob_end_clean(); + // printf("OUT: [%s]\n", $G_content); + fwrite($new_socket, headers_render($header_out).$content); + fclose($new_socket); + break; + case SITE_PREFIX."index_wr.php": $G_headers = ""; + $addr = ""; + $ret = socket_getpeername($new_socket, $addr); + // printf("RET: %d\n", $ret); + // exit(123); ob_start(); - index_main($room); - $content = ob_get_flush(); - - printf("OUT: [%s]\n", $G_content); - fwrite($new_socket, headers_get().$content); + index_wr_main($room, $addr, $get, $post, $cookie); + $content = ob_get_contents(); + ob_end_clean(); + + // printf("OUT: [%s]\n", $G_content); + fwrite($new_socket, headers_render($header_out).$content); fclose($new_socket); + break; + case SITE_PREFIX."index_rd_ifra.php": + do { + if (!isset($cookie['sess'])) { + fclose($new_socket); + break; + } + if (($user = $room->get_user($cookie['sess'], $idx)) == FALSE) { + fclose($new_socket); + break; + } + if (($prev = $user->rd_socket_get()) != NULL) { + unset($s2u[intval($user->rd_socket_get())]); + unset($socks[intval($user->rd_socket_get())]); + fclose($user->rd_socket_get()); + $user->rd_socket_set(NULL); + } + + $header_out = array(); + $body = ""; + index_rd_ifra_init($room, $user, $header_out, $body, $get, $post, $cookie); + stream_set_blocking($new_socket, $blocking_mode); // Set the stream to non-blocking + fwrite($new_socket, headers_render($header_out).$body); + fflush($new_socket); + + $s2u[intval($new_socket)] = $idx; + $socks[intval($new_socket)] = $new_socket; + $user->rd_socket_set($new_socket); + } while (FALSE); + break; } @@ -319,8 +374,11 @@ function main() printf("Arrivati %d bytes da stdin\n", strlen($buf)); } else { + // $user_a[$s2u[intval($sock)]]->disable(); + if ($room->user[$s2u[intval($sock)]]->rd_socket_get() != NULL) { + $room->user[$s2u[intval($sock)]]->rd_socket_set(NULL); + } unset($socks[intval($sock)]); - $user_a[$s2u[intval($sock)]]->disable(); unset($s2u[intval($sock)]); fclose($sock); } @@ -351,13 +409,35 @@ function main() + foreach ($socks as $k => $sock) { + if (isset($s2u[intval($sock)])) { + $body = ""; + + + $body = ""; + $user = $room->user[$s2u[intval($sock)]]; + index_rd_ifra_main($room, $user, $body); + if ($body == "" && $user->rd_tout_is_expired($curtime)) { + $body = index_rd_ifra_keepalive($user); + } + if ($body != "") { + echo "SPIA: [".substr($body, 0, 60)."...]\n"; + fwrite($sock, $body); + fflush($sock); + $user->rd_tout_reset($curtime); + } - if (0 == 1) { // WRITE PART EXAMPLE - // sleep(3); - foreach ($socks as $k => $sock) { - fwrite($sock, sprintf("DI QUI CI PASSO [%d]\n", $user_a[$s2u[intval($sock)]]->cnt_inc())); - fflush($sock); + // close socket after a while to prevent client memory consumption + if ($user->rd_endtime_is_expired($curtime)) { + // $user_a[$s2u[intval($sock)]]->disable(); + if ($room->user[$s2u[intval($sock)]]->rd_socket_get() != NULL) { + $room->user[$s2u[intval($sock)]]->rd_socket_set(NULL); + } + unset($socks[intval($sock)]); + unset($s2u[intval($sock)]); + fclose($sock); + } } } }