Explorar el Código

Do not add "Connection: Keep-Alive" header for "upgrade" connections

Evgeny Grin (Karlson2k) hace 8 años
padre
commit
917342b3fb
Se han modificado 2 ficheros con 15 adiciones y 0 borrados
  1. 4 0
      ChangeLog
  2. 11 0
      src/microhttpd/connection.c

+ 4 - 0
ChangeLog

@@ -1,3 +1,7 @@
+Tue May  9 23:16:00 MSK 2017
+	Fixed: Do not add "Connection: Keep-Alive" header for "upgrade"
+	connections. -EG
+
 Tue May  9 21:01:00 MSK 2017
 Tue May  9 21:01:00 MSK 2017
 	Fixed: check all "Connection" headers of request for "Close" and "Upgrade"
 	Fixed: check all "Connection" headers of request for "Close" and "Upgrade"
 	tokens instead of using only first "Connection" header with full string
 	tokens instead of using only first "Connection" header with full string

+ 11 - 0
src/microhttpd/connection.c

@@ -1148,11 +1148,19 @@ build_header_response (struct MHD_Connection *connection)
 
 
       if (0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY))
       if (0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY))
         connection->keepalive = MHD_CONN_MUST_CLOSE;
         connection->keepalive = MHD_CONN_MUST_CLOSE;
+#ifdef UPGRADE_SUPPORT
+      else if (NULL != connection->response->upgrade_handler)
+        /* If this connection will not be "upgraded", it must be closed. */
+        connection->keepalive = MHD_CONN_MUST_CLOSE;
+#endif /* UPGRADE_SUPPORT */
 
 
       /* now analyze chunked encoding situation */
       /* now analyze chunked encoding situation */
       connection->have_chunked_upload = false;
       connection->have_chunked_upload = false;
 
 
       if ( (MHD_SIZE_UNKNOWN == connection->response->total_size) &&
       if ( (MHD_SIZE_UNKNOWN == connection->response->total_size) &&
+#ifdef UPGRADE_SUPPORT
+           (NULL == connection->response->upgrade_handler) &&
+#endif /* UPGRADE_SUPPORT */
            (! response_has_close) &&
            (! response_has_close) &&
            (! client_requested_close) )
            (! client_requested_close) )
         {
         {
@@ -1244,6 +1252,9 @@ build_header_response (struct MHD_Connection *connection)
            (! response_has_close) &&
            (! response_has_close) &&
            (MHD_NO == must_add_close) &&
            (MHD_NO == must_add_close) &&
            (MHD_CONN_MUST_CLOSE != connection->keepalive) &&
            (MHD_CONN_MUST_CLOSE != connection->keepalive) &&
+#ifdef UPGRADE_SUPPORT
+           (NULL == connection->response->upgrade_handler) &&
+#endif /* UPGRADE_SUPPORT */
            (MHD_YES == keepalive_possible (connection)) )
            (MHD_YES == keepalive_possible (connection)) )
         must_add_keep_alive = MHD_YES;
         must_add_keep_alive = MHD_YES;
       break;
       break;