mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-08 16:11:18 +00:00
Validate WebSocket continuation frame sequencing
This commit is contained in:
1 parent
bbee8ae61f
commit
60c75a22b8
4 files changed
+31
-6
No files matched your search
+15
-1
@@ -967,7 +967,7 @@ static void wcb(struct mg_connection *c, int ev, void *ev_data) {
|
||||
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
|
||||
struct mg_str *wsproto = mg_http_get_header(hm, "Sec-WebSocket-Protocol");
|
||||
ASSERT(wsproto != NULL);
|
||||
mg_ws_send(c, "hello", 0, 0);
|
||||
mg_ws_send(c, "", 0, WEBSOCKET_OP_TEXT);
|
||||
mg_ws_printf(c, WEBSOCKET_OP_BINARY, "%.3s", "boo!!!!");
|
||||
mg_ws_printf(c, WEBSOCKET_OP_BINARY, "%s", "foobar");
|
||||
mg_ws_send(c, "", 0, WEBSOCKET_OP_PING);
|
||||
@@ -983,6 +983,15 @@ static void wcb(struct mg_connection *c, int ev, void *ev_data) {
|
||||
}
|
||||
}
|
||||
|
||||
static void wbad(struct mg_connection *c, int ev, void *ev_data) {
|
||||
if (ev == MG_EV_WS_OPEN) {
|
||||
mg_ws_send(c, "ABC", 3, WEBSOCKET_OP_CONTINUE);
|
||||
} else if (ev == MG_EV_CLOSE) {
|
||||
*(int *) c->fn_data = 1;
|
||||
}
|
||||
(void) ev_data;
|
||||
}
|
||||
|
||||
static void ew2(struct mg_connection *c, int ev, void *ev_data) {
|
||||
size_t size = 65 * 1024 + 737;
|
||||
if (ev == MG_EV_WS_OPEN) {
|
||||
@@ -1028,6 +1037,11 @@ static void test_ws(void) {
|
||||
for (i = 0; i < 1000 && done == 0; i++) mg_mgr_poll(&mgr, 1);
|
||||
ASSERT(done == 1);
|
||||
|
||||
done = 0;
|
||||
mg_ws_connect(&mgr, url, wbad, &done, NULL);
|
||||
for (i = 0; i < 30 && done == 0; i++) mg_mgr_poll(&mgr, 1);
|
||||
ASSERT(done == 1);
|
||||
|
||||
mg_mgr_free(&mgr);
|
||||
ASSERT(mgr.conns == NULL);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user