$method = $req[0];
if (isset($header['Cookie'])) {
- $cookies = explode(";", $header['Cookie']);
+
+ // LINE: [Cookie:sess=50e053a9511ef; CO_splashdate4=1356420646; CO_list=all; table_idx=7; table_token=510d494986925; lang=it; CO_bin5_pref_ring_endauct=false; CO_splashdate5=1358372822; CO_splashdate1=1363203374; CO_splashdate2=1363374826; __utma=43654517.209888411.1356605271.1356605271.1356605271.1; __utmz=43654517.1356605271.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)]
+
+ $cookies = explode("; ", $header['Cookie']);
for ($i = 0 ; $i < count($cookies) ; $i++) {
- $nameval = explode("=", trim($cookies[$i]));
- if (count($nameval) != 2) {
- printf("WARNING: malformat cookie element [%s]\n", $cookies[$i]);
+ $name = mb_strstr($cookies[$i], "=", TRUE, 'UTF-8');
+ if ($name == FALSE) {
+ if (mb_strlen($cookies[$i]) > 0) {
+ $cookie[$cookies[$i]] = "";
+ }
+ else {
+ printf("WARNING: malformat cookie element [%s]\n", $cookies[$i]);
+ }
continue;
}
- $cookie[$nameval[0]] = urldecode($nameval[1]);
+
+ $value = mb_substr($cookies[$i], mb_strlen($name)+1, 10140, 'UTF-8');
+ $cookie[$name] = urldecode($value);
}
}
// GET params management
continue;
}
$split = explode(":", $line, 2);
- $header[$split[0]] = $split[1];
+ $hea_id = trim(mb_convert_case($split[0], MB_CASE_TITLE, 'UTF-8'));
+ $header[$hea_id] = $split[1];
}
return $path;
}
}
else if (isset($header['HTTP-Response'])) {
$s = sprintf("HTTP/1.1 %s\r\n", $header['HTTP-Response']);
+ foreach($header as $key => $value) {
+ if (strtolower($key) == "http-response")
+ continue;
+ $s .= sprintf("%s: %s\r\n", $key, $value);
+ }
+ if ($len >= 0) {
+ $s .= sprintf("Content-Length: %ld\r\n", $len);
+ }
}
else {
$s = "HTTP/1.1 200 OK\r\n";
* MAIN
*/
-function chunked_content($zls, $content)
-{
- 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", $cont_comp_l).$cont_comp."\r\n");
-}
-
-function chunked_fini()
-{
- return sprintf("0\r\n");
-}
-
function get_encoding($header)
{
$enc = "plain";
if ($buf == FALSE || mb_strlen($buf, "ASCII") == 0) {
// close socket case
if ($buf == FALSE) {
- printf("ERROR READING\n");
+ printf("INFO: read return false\n");
}
if ($sock === $this->list) {
printf("Arrivati %d bytes da list\n", mb_strlen($buf, "ASCII"));
if (isset($this->s2u[$id])) {
// $user_a[$s2u[$id]]->disable();
if ($this->s2u[$id]->rd_socket_get() != NULL) {
+ // try to send close frame (for websocket)
+ $clo = $this->s2u[$id]->stream_close();
+ $clo_l = mb_strlen($clo, "ASCII");
+ @fwrite($sock, $clo, $clo_l);
$this->s2u[$id]->rd_socket_set(NULL);
}
unset($this->s2u[$id]);
global_dump();
}
- else if ($line == "shutdown") {
+ else if ($line == "shutdown" || $line == "sd") {
if ($this->app->dump_data()) {
return(0);
}
$content = $user->stream_keepalive(FALSE);
}
if ($content != "") {
- $response = chunked_content($user->rd_zls_get(), $content);
+ $response = $user->chunked_content($content);
}
}
// echo "SPIA: [".substr($response, 0, 60)."...]\n";
// echo "SPIA: [".$response."]\n";
$response_l = mb_strlen($response, "ASCII");
- $wret = @fwrite($sock, $response);
+ $wret = @fwrite($sock, $response, $response_l);
if ($wret < $response_l) {
printf("TROUBLE WITH FWRITE: %d\n", $wret);
$user->rd_cache_set(mb_substr($response, $wret, $response_l - $wret, "ASCII"));
}
unset($this->socks[$id]);
unset($this->s2u[$id]);
+ $clo = $user->stream_close();
+ $clo_l = mb_strlen($clo, "ASCII");
+ @fwrite($sock, $clo, $clo_l);
fclose($sock);
printf("CLOSE ON LOOP\n");
}