Merge a125f8677d into b4834a7d6d
This commit is contained in:
commit
1173d61dbc
14
lib/ws.c
14
lib/ws.c
@ -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 */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user