فهرست منبع

Reset HTTP2 connection information

HTTP2 5 سال پیش
والد
کامیت
8872f4cfc0
1فایلهای تغییر یافته به همراه18 افزوده شده و 11 حذف شده
  1. 18 11
      src/civetweb.c

+ 18 - 11
src/civetweb.c

@@ -16437,19 +16437,19 @@ alpn_select_cb(SSL *ssl,
 
 	(void)ssl;
 
-#if defined(USE_HTTP2)
-	enable_http2 = (0 != strcmp(dom_ctx->config[ENABLE_HTTP2], "yes"));
-	if (enable_http2) {
-		alpn_proto_order = alpn_proto_order_http2;
-	}
-#endif
-
 	if (tls == NULL) {
 		/* Need to store protocol in Thread Local Storage */
 		/* If there is no Thread Local Storage, don't use ALPN */
 		return SSL_TLSEXT_ERR_NOACK;
 	}
 
+#if defined(USE_HTTP2)
+	enable_http2 = (0 == strcmp(dom_ctx->config[ENABLE_HTTP2], "yes"));
+	if (enable_http2) {
+		alpn_proto_order = alpn_proto_order_http2;
+	}
+#endif
+
 	for (j = 0; alpn_proto_order[j] != NULL; j++) {
 		/* check all accepted protocols in this order */
 		const char *alpn_proto = alpn_proto_order[j];
@@ -18460,8 +18460,6 @@ process_new_connection(struct mg_connection *conn)
 	mg_atomic_max(&(conn->phys_ctx->max_active_connections), mcon);
 #endif
 
-	init_connection(conn);
-
 	DEBUG_TRACE("Start processing connection from %s",
 	            conn->request_info.remote_addr);
 
@@ -18939,13 +18937,18 @@ worker_thread_run(struct mg_connection *conn)
 					init_connection(conn);
 					conn->connection_type = CONNECTION_TYPE_REQUEST;
 					conn->protocol_type = PROTOCOL_TYPE_HTTP2;
-					conn->content_len = -1;
-					conn->is_chunked = 0;
+					conn->content_len =
+					    -1;               /* content length is not predefined */
+					conn->is_chunked = 0; /* HTTP2 is never chunked */
 					process_new_http2_connection(conn);
 				} else
 #endif
 				{
 					/* process HTTPS/1.x or WEBSOCKET-SECURE connection */
+					init_connection(conn);
+					conn->connection_type = CONNECTION_TYPE_REQUEST;
+					/* Start with HTTP, WS will be an "upgrade" request later */
+					conn->protocol_type = PROTOCOL_TYPE_HTTP1;
 					process_new_connection(conn);
 				}
 
@@ -18972,6 +18975,10 @@ worker_thread_run(struct mg_connection *conn)
 #endif
 		} else {
 			/* process HTTP connection */
+			init_connection(conn);
+			conn->connection_type = CONNECTION_TYPE_REQUEST;
+			/* Start with HTTP, WS will be an "upgrade" request later */
+			conn->protocol_type = PROTOCOL_TYPE_HTTP1;
 			process_new_connection(conn);
 		}