ws: fix multiframe send handling

Fixes #10413
Closes #10420
This commit is contained in:
Mike Duglas 2023-02-06 10:34:46 +01:00 committed by Daniel Stenberg
parent 51e9cff268
commit ad55b23634
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -561,17 +561,27 @@ static size_t ws_packethead(struct Curl_easy *data,
} }
if(!(flags & CURLWS_CONT)) { if(!(flags & CURLWS_CONT)) {
/* if not marked as continuing, assume this is the final fragment */ if(!ws->ws.contfragment)
firstbyte |= WSBIT_FIN | opcode; /* not marked as continuing, this is the final fragment */
firstbyte |= WSBIT_FIN | opcode;
else
/* marked as continuing, this is the final fragment; set CONT
opcode and FIN bit */
firstbyte |= WSBIT_FIN | WSBIT_OPCODE_CONT;
ws->ws.contfragment = FALSE; ws->ws.contfragment = FALSE;
infof(data, "WS: set FIN");
} }
else if(ws->ws.contfragment) { else if(ws->ws.contfragment) {
/* the previous fragment was not a final one and this isn't either, keep a /* the previous fragment was not a final one and this isn't either, keep a
CONT opcode and no FIN bit */ CONT opcode and no FIN bit */
firstbyte |= WSBIT_OPCODE_CONT; firstbyte |= WSBIT_OPCODE_CONT;
infof(data, "WS: keep CONT, no FIN");
} }
else { else {
firstbyte = opcode;
ws->ws.contfragment = TRUE; ws->ws.contfragment = TRUE;
infof(data, "WS: set CONT, no FIN");
} }
out[0] = firstbyte; out[0] = firstbyte;
if(len > 65535) { if(len > 65535) {