X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fsac-a-push.phh;h=c5faa557ae943e51bebb78dc25ca41d67b78259b;hb=9b4ce3e614e0636bc76fee81d5c1ec41ae5bd742;hp=04f7c5baa34caed3fb6c9119578014d34ce3f5ac;hpb=8a1c0c18404ef3191b775fceef5ca03d1a237393;p=brisk.git diff --git a/web/Obj/sac-a-push.phh b/web/Obj/sac-a-push.phh index 04f7c5b..c5faa55 100644 --- a/web/Obj/sac-a-push.phh +++ b/web/Obj/sac-a-push.phh @@ -121,15 +121,17 @@ function headers_render($header, $len) foreach($header as $key => $value) { $s .= sprintf("%s: %s\r\n", $key, $value); } - if ($len == -1) { + if ($len >= 0) { + $s .= sprintf("Content-Length: %d\r\n", $len); + } + else { $s .= "Cache-Control: no-cache, must-revalidate\r\n"; $s .= "Expires: Mon, 26 Jul 1997 05:00:00 GMT\r\n"; - $s .= "Content-Encoding: chunked\r\n"; + if (!isset($header['Content-Encoding'])) { + $s .= "Content-Encoding: chunked\r\n"; + } $s .= "Transfer-Encoding: chunked\r\n"; } - else if ($len > 0) { - $s .= sprintf("Content-Length: %d\r\n", $len); - } $s .= "\r\n"; return ($s); @@ -151,11 +153,18 @@ register_shutdown_function('shutta'); * MAIN */ -function chunked_content($content) +function chunked_content($zls, $content) { - $content_l = mb_strlen($content, "ASCII"); + if ($zls) { + $cont_comp = $zls->compress_chunk($content); + } + else { + $cont_comp = $content; + } + $cont_comp_l = mb_strlen($cont_comp, "ASCII"); + printf("CHUNK: [%s]\n", $content); - return (sprintf("%X\r\n%s\r\n", $content_l, $content)); + return (sprintf("%X\r\n", $cont_comp_l).$cont_comp."\r\n"); } function chunked_fini() @@ -163,6 +172,24 @@ function chunked_fini() return sprintf("0\r\n"); } +function get_encoding($header) +{ + $enc = "plain"; + if (isset($header['Accept-Encoding'])) { + $acc = explode(',', $header['Accept-Encoding']); + + if (array_search('gzip', $acc) !== FALSE) { + $enc = 'gzip'; + } + else if (array_search('deflate', $acc) !== FALSE) { + $enc = 'deflate'; + } + } + + return ($enc); +} + + class Sac_a_push { static $fixed_fd = 2; @@ -208,7 +235,10 @@ class Sac_a_push { $thiz->rndstr = ""; for ($i = 0 ; $i < 4096 ; $i++) { - $thiz->rndstr .= chr(mt_rand(65, 90)); + if (($i % 128) == 0) + $thiz->rndstr .= "\n"; + else + $thiz->rndstr .= chr(mt_rand(65, 90)); } if (file_exists($thiz->file_socket)) { @@ -247,9 +277,9 @@ class Sac_a_push { unset($this->socks[$id]); } - function pgflush_try_add(&$new_socket, $tout, $header_out, $content) + function pgflush_try_add($enc, &$new_socket, $tout, $header_out, $content) { - $pgflush = new PageFlush($new_socket, $this->curtime, $tout, $header_out, $content); + $pgflush = new PageFlush($new_socket, $enc, $this->curtime, $tout, $header_out, $content); if ($pgflush->try_flush($this->curtime) == FALSE) { // Add $pgflush to the pgflush array @@ -351,11 +381,13 @@ class Sac_a_push { $addr = stream_socket_get_name($new_socket, TRUE); $header_out = array(); + $enc = get_encoding($header); + $subs = SITE_PREFIX."briskin5/"; $subs_l = strlen($subs); $rret = FALSE; if (!strncmp($path, SITE_PREFIX, SITE_PREFIX_LEN)) { - $rret = $this->app->request_mgr($this, $header_out, $new_socket, substr($path, SITE_PREFIX_LEN), $addr, $get, $post, $cookie); + $rret = $this->app->request_mgr($this, $enc, $header_out, $new_socket, substr($path, SITE_PREFIX_LEN), $addr, $get, $post, $cookie); } if ($rret == FALSE) { // FIXME: manage 404 !!! @@ -456,7 +488,7 @@ class Sac_a_push { $content = $user->stream_keepalive(FALSE); } if ($content != "") { - $response = chunked_content($content); + $response = chunked_content($user->rd_zls_get(), $content); } }