This commit is contained in:
Ethan Wilkes 2025-03-01 01:40:17 +00:00 committed by GitHub
commit 1173d61dbc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -168,6 +168,7 @@ static void ws_dec_reset(struct ws_decoder *dec)
dec->payload_len = 0;
dec->head_len = dec->head_total = 0;
dec->state = WS_DEC_INIT;
dec->fin_bit = 1;
}
static void ws_dec_init(struct ws_decoder *dec)
@ -187,6 +188,8 @@ static CURLcode ws_dec_read_head(struct ws_decoder *dec,
dec->head[0] = *inbuf;
Curl_bufq_skip(inraw, 1);
dec->fin_bit = (dec->head[0] & WSBIT_FIN) ? 1 : 0;
if(!ws_frame_rsv_supported(dec->head[0])) {
failf(data, "WS: unknown reserved bit in frame header: %x",
dec->head[0] & WSBIT_RSV_MASK);
@ -370,11 +373,20 @@ static void update_meta(struct websocket *ws,
curl_off_t payload_len,
size_t cur_len)
{
curl_off_t bytesleft = (payload_len - payload_offset - cur_len);
ws->frame.age = frame_age;
ws->frame.flags = frame_flags;
ws->frame.offset = payload_offset;
ws->frame.len = cur_len;
ws->frame.bytesleft = (payload_len - payload_offset - cur_len);
ws->frame.bytesleft = bytesleft;
if(!ws->dec.fin_bit || bytesleft > 0) {
ws->frame.flags |= CURLWS_CONT;
}
else {
ws->frame.flags &= ~CURLWS_CONT;
}
}
/* WebSockets decoding client writer */

View File

@ -43,6 +43,7 @@ struct ws_decoder {
unsigned char head[10];
int head_len, head_total;
enum ws_dec_state state;
int fin_bit;
};
/* a client-side WS frame encoder, generating frame headers and