res/res_http_websocket: Don't send HTTP response fragmented.
authorJoshua Colp <jcolp@digium.com>
Sat, 4 Jul 2015 23:22:01 +0000 (20:22 -0300)
committerJoshua Colp <jcolp@digium.com>
Sat, 4 Jul 2015 23:26:43 +0000 (18:26 -0500)
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

index 40aedff..ecae039 100644 (file)
@@ -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 {