From f35a4b8525c86d98187c142484f254ef0ff257e9 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Sat, 4 Jul 2015 20:22:01 -0300 Subject: res/res_http_websocket: Don't send HTTP response fragmented. This change makes it so that when accepting a WebSocket connection the HTTP response is sent as one packet instead of fragmented. Browsers don't like it when you send it fragmented. ASTERISK-25103 Change-Id: I9b82c4ec2949b0bce692ad0bf6f7cea9709e7f69 --- res/res_http_websocket.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c index 40aedff72..ecae03919 100644 --- a/res/res_http_websocket.c +++ b/res/res_http_websocket.c @@ -781,13 +781,6 @@ int AST_OPTIONAL_API_NAME(ast_websocket_uri_cb)(struct ast_tcptls_session_instan return 0; } - fprintf(ser->f, "HTTP/1.1 101 Switching Protocols\r\n" - "Upgrade: %s\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Accept: %s\r\n", - upgrade, - websocket_combine_key(key, base64, sizeof(base64))); - /* RFC 6455, Section 4.1: * * 6. If the response includes a |Sec-WebSocket-Protocol| header @@ -798,11 +791,23 @@ int AST_OPTIONAL_API_NAME(ast_websocket_uri_cb)(struct ast_tcptls_session_instan * Connection_. */ if (protocol) { - fprintf(ser->f, "Sec-WebSocket-Protocol: %s\r\n", + fprintf(ser->f, "HTTP/1.1 101 Switching Protocols\r\n" + "Upgrade: %s\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Accept: %s\r\n" + "Sec-WebSocket-Protocol: %s\r\n\r\n", + upgrade, + websocket_combine_key(key, base64, sizeof(base64)), protocol); + } else { + fprintf(ser->f, "HTTP/1.1 101 Switching Protocols\r\n" + "Upgrade: %s\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Accept: %s\r\n\r\n", + upgrade, + websocket_combine_key(key, base64, sizeof(base64))); } - fprintf(ser->f, "\r\n"); fflush(ser->f); } else { -- cgit v1.2.3