X-Git-Url: https://mop.ddnsfree.com/gitweb/?p=brisk.git;a=blobdiff_plain;f=web%2Fspush%2Fbrisk-spush.php;h=00d3e64c8fb875f858198a624087707683b63217;hp=40eb54e4835c0dad8f6a1fe552a07dfeb1d24558;hb=0b6452e28c5b16fbbde6191a6db4293905b808e3;hpb=90c7420f07b9198d094ae0d297c391ede9adc1d9 diff --git a/web/spush/brisk-spush.php b/web/spush/brisk-spush.php index 40eb54e..00d3e64 100755 --- a/web/spush/brisk-spush.php +++ b/web/spush/brisk-spush.php @@ -21,431 +21,68 @@ * 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($G_base."Obj/sac-a-push.phh"); require_once("./brisk-spush.phh"); +require_once($G_base."Obj/user.phh"); +@include_once($G_base."Obj/curl-de-brisk.phh"); require_once($G_base."Obj/brisk.phh"); require_once($G_base."Obj/auth.phh"); -// require_once("../Obj/proxyscan.phh"); +require_once($G_base."Obj/zlibstream.phh"); +require_once($G_base."Obj/mail.phh"); +require_once($G_base."Obj/provider_proxy.phh"); 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"); +require_once($G_base."briskin5/index.php"); +require_once($G_base."briskin5/index_wr.php"); -define('SITE_PREFIX', '/brisk/'); - -class SPUser { - var $id; - var $sess; - var $cnt; - var $sock; - - function SPUser($id) - { - $this->id = $id; - $this->cnt = -1; - $this->sock = NULL; - } - - function enable($sock, $sess) - { - $this->sess = $sess; - $this->cnt = 0; - $this->sock = $sock; - - return ($this->id); - } - - function disable() - { - $this->cnt = -1; - $this->sock = NULL; - } - - function is_enable() - { - return ($this->cnt < 0 ? FALSE : TRUE); - } - - function sock_get() - { - return $this->sock; - } - - function sock_set($sock) - { - $this->sock = $sock; - } - - function id_get() - { - return $this->id; - } - - function sess_get() - { - return $this->sess; - } - - function cnt_get() - { - return $this->cnt; - } - - function cnt_inc() - { - return $this->cnt++; - } +if (FALSE) { +function my_e($number, $msg, $file, $line, $vars) { + print_r(debug_backtrace()); + die(); } -function user_get_free($user_arr) +function my_for_fatal() { - foreach ($user_arr as $i => $user) { - if (!$user->is_enable()) { - return ($user); - } - } - return FALSE; + // $error = error_get_last(); + // if ( $error["type"] == E_ERROR ) { + print_r(debug_backtrace()); + die(); + // } + // log_error( $error["type"], $error["message"], $error["file"], $error["line"] ); } -function user_get_sess($user_arr, $sess) -{ - foreach ($user_arr as $i => $user) { - printf("SESS: [%s] cur: [%s]\n", $user->sess_get(), $sess); - if ($user->sess_get() == $sess) { - return ($user); - } - } - return FALSE; +register_shutdown_function( "my_for_fatal" ); +set_error_handler('my_e'); } -function headers_render($header) -{ - - $s = ""; - $s .= "HTTP/1.1 200 OK\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"; - - return ($s); -} - - -/* - * Caching system using ob php system to cache old style pages - * to a var and than send it with more calm - */ -$G_headers = ""; - -function shutta() -{ - log_rd2("SHUTTA [".connection_status()."] !"); -} - -register_shutdown_function('shutta'); - -/* - * MAIN - */ -$shutdown = FALSE; - -function main() +function main($argv) { - GLOBAL $G_headers; - GLOBAL $shutdown; - $main_loop = TRUE; - - /* - * INIT - */ - - $FILE_SOCKET = "/tmp/brisk.sock"; - $UNIX_SOCKET = "unix://$FILE_SOCKET"; - $debug = 0; - $fixed_fd = 2; - $socks = array(); - - $blocking_mode = 0; // 0 for non-blocking - - if (($room = Room::create()) == FALSE) { - log_crit("load_data failed"); - return FALSE; - } - - $s2u = array(); - - $rndstr = ""; - for ($i = 0 ; $i < 4096 ; $i++) { - $rndstr .= chr(mt_rand(65, 90)); - } - - if (file_exists($FILE_SOCKET)) { - unlink($FILE_SOCKET); - } - - $old_umask = umask(0); - if (($list = stream_socket_server($UNIX_SOCKET, $err, $errs)) === FALSE) { - exit(11); - } - umask($old_umask); - - if (($in = fopen("php://stdin", "r")) === FALSE) { - exit(11); - } - - stream_set_blocking($list, $blocking_mode); # Set the stream to non-blocking - - while ($main_loop) { - echo "IN LOOP\n"; - /* Prepare the read array */ - if ($shutdown) - $read = array_merge(array("$in" => $in), $socks); - else - $read = array_merge(array("$list" => $list, "$in" => $in), $socks); - - if ($debug > 1) { - printf("PRE_SELECT\n"); - print_r($read); + GLOBAL $G_ban_list, $G_black_list, $G_cloud_smasher, $G_provider_proxy; + + pid_save(); + do { + if (($brisk = Brisk::create(LEGAL_PATH."/brisk-crystal.data", $G_ban_list, $G_black_list, $G_cloud_smasher)) == FALSE) { + log_crit("Brisk::create failed"); + $ret = 1; + break; } - $write = NULL; - $except = NULL; - $num_changed_sockets = stream_select($read, $write, $except, 1); // 0, 250000); - - if ($num_changed_sockets === FALSE) { - printf("No data in 5 secs"); - } - else if ($num_changed_sockets > 0) { - printf("num sock %d num_of_socket: %d\n", $num_changed_sockets, count($read)); - if ($debug > 1) { - print_r($read); - } - /* At least at one of the sockets something interesting happened */ - foreach ($read as $i => $sock) { - if ($sock === $list) { - printf("NUOVA CONNEX\n"); - $new_unix = stream_socket_accept($list); - $stream_info = ""; - $method = ""; - $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); - printf("PATH: [%s]\n", $path); - printf("M: %s\nHEADER:\n", $method); - print_r($header); - printf("GET:\n"); - print_r($get); - printf("POST:\n"); - print_r($post); - printf("COOKIE:\n"); - print_r($cookie); - - $addr = stream_socket_get_name($new_socket, TRUE); - - switch ($path) { - case SITE_PREFIX: - case SITE_PREFIX."index.php": - $header_out = array(); - ob_start(); - index_main($room, $header_out, $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_wr.php": - $header_out = array(); - $addr = ""; - // $ret = socket_getpeername($new_socket, $addr); - printf("RET: %s\n", $addr); - // exit(123); - ob_start(); - 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; - } - - - - - if (0 == 1) { - /* TODO: here stuff to decide if it is old or new user */ - if (($user_cur = user_get_sess($user_a, $get['sess'])) != FALSE) { - /* close the previous socket */ - unset($s2u[intval($user_cur->sock_get())]); - unset($socks[intval($user_cur->sock_get())]); - fclose($user_cur->sock_get()); - /* assign the new socket */ - $user_cur->sock_set($new_socket); - $id = $user_cur->id_get(); - $s2u[intval($new_socket)] = $id; - $socks[intval($new_socket)] = $new_socket; - fwrite($new_socket, $rndstr); - fflush($new_socket); - } - else if (($user_cur = user_get_free($user_a)) != FALSE) { - stream_set_blocking($new_socket, $blocking_mode); // Set the stream to non-blocking - $socks[intval($new_socket)] = $new_socket; - - $id = $user_cur->id_get(); - $user_a[$id]->enable($new_socket, $get['sess']); - printf("s2u: ci passo %d\n", intval($new_socket)); - $s2u[intval($new_socket)] = $id; - - fwrite($new_socket, $rndstr); - fflush($new_socket); - } - else { - printf("Too many opened users\n"); - fclose($new_socket); - } - } - } - else { - printf("WARNING: ancillary_getstream failed\n"); - } - } - else { - if (($buf = fread($sock, 512)) === FALSE) { - printf("error read\n"); - exit(123); - } - else if (strlen($buf) === 0) { - if ($sock === $list) { - printf("Arrivati %d bytes da list\n", strlen($buf)); - } - else if ($sock === $in) { - 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)]); - unset($s2u[intval($sock)]); - fclose($sock); - } - if ($debug > 1) { - printf("post unset\n"); - print_r($socks); - } - } - else { - if ($debug > 1) { - print_r($read); - } - if ($sock === $list) { - printf("Arrivati %d bytes da list\n", strlen($buf)); - } - else if ($sock === $in) { - printf("Arrivati %d bytes da stdin\n", strlen($buf)); - } - else { - $key = array_search("$sock", $socks); - printf("Arrivati %d bytes dalla socket n. %d\n", strlen($buf), $key); - } - } - } - } + if (($s_a_p = Sac_a_push::create($brisk, USOCK_PATH_PFX, 0, 0, $G_provider_proxy, $argv)) === FALSE) { + $ret = 2; + break; } + $ret = $s_a_p->run(); + } while (0); - - - 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); - } - - // 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); - } - } - } - } - - exit(0); + pid_remove(); + exit($ret); } -main(); +main($argv); ?>