manage refuse answer to licence manager
[brisk.git] / web / Obj / sac-a-push.phh
index c0e2db1..b2efb61 100644 (file)
@@ -221,6 +221,14 @@ function headers_render($header, $len)
     }
     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";
@@ -268,25 +276,6 @@ register_shutdown_function('shutta');
  *  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";
@@ -622,6 +611,7 @@ class Sac_a_push {
         GLOBAL $G_splash_w, $G_topbanner, $G_with_donors, $G_with_poll;
         GLOBAL $G_with_sidebanner, $G_with_sidebanner2, $G_with_splash;
         GLOBAL $G_with_topbanner;
+        GLOBAL $G_lice_vers, $G_lice_fname, $G_lice_dtsoft, $G_lice_dthard, $G_lice_idx;
 
         if ($this->main_loop) {
             return (FALSE);
@@ -720,7 +710,7 @@ class Sac_a_push {
                         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"));
@@ -735,6 +725,10 @@ class Sac_a_push {
                                 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]);
@@ -763,7 +757,7 @@ class Sac_a_push {
 
                                     global_dump();
                                 }
-                                else if ($line == "shutdown") {
+                                else if ($line == "shutdown" || $line == "sd") {
                                     if ($this->app->dump_data()) {
                                         return(0);
                                     }
@@ -860,7 +854,7 @@ class Sac_a_push {
                             $content = $user->stream_keepalive(FALSE);
                         }
                         if ($content != "") {
-                            $response = chunked_content($user->rd_zls_get(), $content);
+                            $response = $user->chunked_content($content);
                         }
                     }
                     
@@ -868,7 +862,7 @@ class Sac_a_push {
                         // 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"));
@@ -887,6 +881,9 @@ class Sac_a_push {
                         }
                         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");
                     }