mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-30 00:00:16 +01:00
autobahn detect disordered continuation
Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
parent
44e0b088fa
commit
977734ee07
2 changed files with 14 additions and 0 deletions
|
@ -36,6 +36,16 @@ int lws_client_rx_sm(struct lws *wsi, unsigned char c)
|
||||||
wsi->u.ws.opcode = c & 0xf;
|
wsi->u.ws.opcode = c & 0xf;
|
||||||
/* revisit if an extension wants them... */
|
/* revisit if an extension wants them... */
|
||||||
switch (wsi->u.ws.opcode) {
|
switch (wsi->u.ws.opcode) {
|
||||||
|
case LWSWSOPC_TEXT_FRAME:
|
||||||
|
case LWSWSOPC_BINARY_FRAME:
|
||||||
|
wsi->u.ws.continuation_possible = 1;
|
||||||
|
break;
|
||||||
|
case LWSWSOPC_CONTINUATION:
|
||||||
|
if (!wsi->u.ws.continuation_possible) {
|
||||||
|
lwsl_info("disordered continuation\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
case 5:
|
case 5:
|
||||||
|
@ -62,6 +72,9 @@ int lws_client_rx_sm(struct lws *wsi, unsigned char c)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
wsi->u.ws.final = !!((c >> 7) & 1);
|
wsi->u.ws.final = !!((c >> 7) & 1);
|
||||||
|
if (wsi->u.ws.final)
|
||||||
|
wsi->u.ws.continuation_possible = 0;
|
||||||
|
|
||||||
if ((wsi->u.ws.opcode & 8) && !wsi->u.ws.final) {
|
if ((wsi->u.ws.opcode & 8) && !wsi->u.ws.final) {
|
||||||
lwsl_info("control message cannot be fragmented\n");
|
lwsl_info("control message cannot be fragmented\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -856,6 +856,7 @@ struct _lws_websocket_related {
|
||||||
unsigned int clean_buffer:1; /* buffer not rewritten by extension */
|
unsigned int clean_buffer:1; /* buffer not rewritten by extension */
|
||||||
unsigned int payload_is_close:1; /* process as PONG, but it is close */
|
unsigned int payload_is_close:1; /* process as PONG, but it is close */
|
||||||
unsigned int ping_pending_flag:1;
|
unsigned int ping_pending_flag:1;
|
||||||
|
unsigned int continuation_possible:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lws {
|
struct lws {
|
||||||
|
|
Loading…
Add table
Reference in a new issue