Lines Matching refs:ws

56 		if (wsi->ws->rx_draining_ext) {
68 switch (wsi->ws->ietf_spec_revision) {
73 wsi->ws->all_zero_nonce = 1;
78 wsi->ws->ietf_spec_revision);
83 wsi->ws->mask[1] = c;
85 wsi->ws->all_zero_nonce = 0;
89 wsi->ws->mask[2] = c;
91 wsi->ws->all_zero_nonce = 0;
95 wsi->ws->mask[3] = c;
97 wsi->ws->all_zero_nonce = 0;
104 wsi->ws->mask_idx = 0;
142 wsi->ws->opcode = c & 0xf;
143 wsi->ws->rsv = c & 0x70;
144 wsi->ws->final = !!((c >> 7) & 1);
145 wsi->ws->defeat_check_utf8 = 0;
147 if (((wsi->ws->opcode) & 8) && !wsi->ws->final) {
153 switch (wsi->ws->opcode) {
155 wsi->ws->check_utf8 = lws_check_opt(
160 if (wsi->ws->opcode == LWSWSOPC_BINARY_FRAME)
161 wsi->ws->check_utf8 = 0;
162 if (wsi->ws->continuation_possible) {
168 wsi->ws->rsv_first_msg = (c & 0x70);
175 wsi->ws->pmd_trailer_application = !!(c & 0x40);
177 wsi->ws->frame_is_binary =
178 wsi->ws->opcode == LWSWSOPC_BINARY_FRAME;
179 wsi->ws->first_fragment = 1;
180 wsi->ws->continuation_possible = !wsi->ws->final;
183 if (!wsi->ws->continuation_possible) {
191 wsi->ws->check_utf8 = 0;
192 wsi->ws->utf8 = 0;
210 if (wsi->ws->owed_a_fin &&
211 (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME ||
212 wsi->ws->opcode == LWSWSOPC_BINARY_FRAME)) {
218 if ((!(wsi->ws->opcode & 8)) && wsi->ws->final) {
219 wsi->ws->continuation_possible = 0;
220 wsi->ws->owed_a_fin = 0;
223 if (!wsi->ws->final)
224 wsi->ws->owed_a_fin = 1;
227 if (wsi->ws->rsv &&
230 !wsi->ws->count_act_ext ||
232 (wsi->ws->rsv & ~0x40))) {
241 wsi->ws->this_frame_masked = !!(c & 0x80);
246 if (wsi->ws->opcode & 8)
253 if (wsi->ws->opcode & 8)
259 wsi->ws->rx_packet_length = c & 0x7f;
262 if (wsi->ws->this_frame_masked)
266 if (wsi->ws->rx_packet_length) {
278 wsi->ws->rx_packet_length = (size_t)(c << 8);
283 wsi->ws->rx_packet_length |= c;
284 if (wsi->ws->this_frame_masked)
300 wsi->ws->rx_packet_length = ((size_t)c) << 56;
302 wsi->ws->rx_packet_length = 0;
309 wsi->ws->rx_packet_length |= ((size_t)c) << 48;
316 wsi->ws->rx_packet_length |= ((size_t)c) << 40;
323 wsi->ws->rx_packet_length |= ((size_t)c) << 32;
329 wsi->ws->rx_packet_length |= ((size_t)c) << 24;
334 wsi->ws->rx_packet_length |= ((size_t)c) << 16;
339 wsi->ws->rx_packet_length |= ((size_t)c) << 8;
344 wsi->ws->rx_packet_length |= ((size_t)c);
345 if (wsi->ws->this_frame_masked)
353 wsi->ws->mask[0] = c;
355 wsi->ws->all_zero_nonce = 0;
360 wsi->ws->mask[1] = c;
362 wsi->ws->all_zero_nonce = 0;
367 wsi->ws->mask[2] = c;
369 wsi->ws->all_zero_nonce = 0;
374 wsi->ws->mask[3] = c;
376 wsi->ws->all_zero_nonce = 0;
378 wsi->ws->mask_idx = 0;
379 if (wsi->ws->rx_packet_length == 0) {
387 assert(wsi->ws->rx_ubuf);
389 if (wsi->ws->rx_ubuf_head + LWS_PRE >= wsi->ws->rx_ubuf_alloc) {
394 if (wsi->ws->all_zero_nonce)
395 wsi->ws->rx_ubuf[LWS_PRE +
396 (wsi->ws->rx_ubuf_head++)] = c;
398 wsi->ws->rx_ubuf[LWS_PRE +
399 (wsi->ws->rx_ubuf_head++)] =
400 c ^ wsi->ws->mask[(wsi->ws->mask_idx++) & 3];
402 --wsi->ws->rx_packet_length;
405 if (!wsi->ws->rx_packet_length) {
406 lwsl_debug("%s: ws fragment length exhausted\n",
413 if (wsi->ws->rx_draining_ext) {
423 wsi->ws->rx_ubuf_head != wsi->a.context->pt_serv_buf_size)
427 wsi->ws->rx_ubuf_head != wsi->a.protocol->rx_buffer_size)
439 switch (wsi->ws->opcode) {
442 if (wsi->ws->peer_has_sent_close)
445 wsi->ws->peer_has_sent_close = 1;
447 pp = &wsi->ws->rx_ubuf[LWS_PRE];
450 wsi->ws->rx_ubuf_head > 2 &&
451 lws_check_utf8(&wsi->ws->utf8, pp + 2,
452 wsi->ws->rx_ubuf_head - 2))
480 if (wsi->ws->rx_ubuf_head >= 2) {
501 &wsi->ws->rx_ubuf[LWS_PRE],
502 wsi->ws->rx_ubuf_head))
508 wsi->ws->payload_is_close = 1;
513 (int)wsi->ws->rx_ubuf_head);
515 if (wsi->ws->pong_pending_flag) {
525 if (wsi->ws->rx_ubuf_head > 128 - 3) {
531 memcpy(wsi->ws->pong_payload_buf + LWS_PRE,
532 &wsi->ws->rx_ubuf[LWS_PRE],
533 wsi->ws->rx_ubuf_head);
535 wsi->ws->pong_payload_len = (uint8_t)wsi->ws->rx_ubuf_head;
536 wsi->ws->pong_pending_flag = 1;
541 wsi->ws->rx_ubuf_head = 0;
546 lwsl_hexdump(&wsi->ws->rx_ubuf[LWS_PRE],
547 wsi->ws->rx_ubuf_head);
561 lwsl_parser("unknown opc %x\n", wsi->ws->opcode);
581 pmdrx.eb_in.token = &wsi->ws->rx_ubuf[LWS_PRE];
582 pmdrx.eb_in.len = (int)wsi->ws->rx_ubuf_head;
588 if (wsi->ws->opcode == LWSWSOPC_PONG && !pmdrx.eb_in.len)
615 if (wsi->ws->rx_draining_ext)
655 rx_draining_ext = wsi->ws->rx_draining_ext;
659 wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) {
660 if (lws_check_utf8(&wsi->ws->utf8,
670 if (!wsi->ws->rx_packet_length &&
671 wsi->ws->final && wsi->ws->utf8
722 wsi->ws->first_fragment = 0;
737 wsi->ws->rx_ubuf_head = 0;
754 return wsi->ws->rx_packet_length;
759 return wsi->ws->frame_is_binary;
768 if (wsi->ws->rx_draining_ext)
773 wsi->ws->rx_draining_ext = 1;
774 wsi->ws->rx_draining_ext_list = pt->ws.rx_draining_ext_list;
775 pt->ws.rx_draining_ext_list = wsi;
784 struct lws **w = &pt->ws.rx_draining_ext_list;
786 if (!wsi->ws->rx_draining_ext)
791 wsi->ws->rx_draining_ext = 0;
797 *w = wsi->ws->rx_draining_ext_list;
800 w = &((*w)->ws->rx_draining_ext_list);
802 wsi->ws->rx_draining_ext_list = NULL;
812 n = lws_get_random(lws_get_context(wsi), wsi->ws->mask, 4);
820 wsi->ws->mask_idx = 0;
842 wsi->ws->rx_ubuf = lws_malloc((unsigned int)n + 4 /* 0x0000ffff zlib */, "rx_ubuf");
843 if (!wsi->ws->rx_ubuf) {
847 wsi->ws->rx_ubuf_alloc = (uint32_t)n;
863 lwsl_debug("ws established\n");
875 wsi->ws->final, (long)wsi->ws->rx_packet_length,
876 (long)wsi->ws->rx_draining_ext);
877 return wsi->ws->final && !wsi->ws->rx_packet_length &&
878 !wsi->ws->rx_draining_ext;
880 return wsi->ws->final && !wsi->ws->rx_packet_length;
887 return wsi->ws->first_fragment;
893 return wsi->ws->rsv;
899 return wsi->ws->close_in_ping_buffer_len;
905 return &wsi->ws->ping_payload_buf[LWS_PRE];
913 int budget = sizeof(wsi->ws->ping_payload_buf) - LWS_PRE;
917 start = p = &wsi->ws->ping_payload_buf[LWS_PRE];
926 wsi->ws->close_in_ping_buffer_len = (uint8_t)lws_ptr_diff(p, start);
935 return lwsi_role_ws(wsi) && !!wsi->ws->count_act_ext;
951 if (!wsi->ws) {
952 lwsl_err("ws role wsi with no ws\n");
1008 if (wsi->ws)
1009 wsi->ws->tx_draining_ext = 0;
1013 if (wsi->ws->tx_draining_ext) {
1060 if (wsi->ws->rx_draining_ext) {
1076 if (wsi->ws->rx_draining_ext)
1123 ebuf.len = (int)wsi->ws->rx_ubuf_alloc;
1221 pending = pending > wsi->ws->rx_ubuf_alloc ?
1222 wsi->ws->rx_ubuf_alloc : pending;
1262 lwsl_debug("%s: %s: wsi->ws->tx_draining_ext %d\n", __func__,
1263 wsi->a.protocol->name, wsi->ws->tx_draining_ext);
1273 lwsl_hexdump_debug(&wsi->ws->ping_payload_buf[LWS_PRE],
1274 wsi->ws->close_in_ping_buffer_len);
1276 n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE],
1277 wsi->ws->close_in_ping_buffer_len,
1297 if ((lwsi_role_ws(wsi) && wsi->ws->pong_pending_flag) ||
1299 wsi->ws->payload_is_close)) {
1301 if (wsi->ws->payload_is_close)
1306 wsi->ws->pong_pending_flag = 0;
1310 wsi->ws->pong_payload_len, lws_wsi_tag(wsi));
1313 n = lws_write(wsi, &wsi->ws->pong_payload_buf[LWS_PRE],
1314 wsi->ws->pong_payload_len, (enum lws_write_protocol)write_type);
1319 wsi->ws->pong_pending_flag = 0;
1320 if (wsi->ws->payload_is_close) {
1331 wsi->ws->send_check_ping) {
1337 wsi->ws->send_check_ping = 0;
1338 n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE],
1360 if (wsi->ws->tx_draining_ext) {
1370 if (!wsi->ws->extension_data_pending && !wsi->ws->tx_draining_ext) {
1371 lwsl_ext("%s: !wsi->ws->extension_data_pending\n", __func__);
1460 wsi->ws->extension_data_pending = 0;
1480 wsi = pt->ws.rx_draining_ext_list;
1488 wsi = wsi->ws->rx_draining_ext_list;
1500 if (!wsi->ws)
1503 if (!wsi->ws->close_in_ping_buffer_len && /* already a reason */
1512 if (!wsi->ws->close_in_ping_buffer_len) {
1513 wsi->ws->close_in_ping_buffer_len = 2;
1514 wsi->ws->ping_payload_buf[LWS_PRE] = (reason >> 8) & 0xff;
1515 wsi->ws->ping_payload_buf[LWS_PRE + 1] = reason & 0xff;
1531 if (!wsi->ws)
1536 if (wsi->ws->rx_draining_ext) {
1537 struct lws **w = &pt->ws.rx_draining_ext_list;
1539 wsi->ws->rx_draining_ext = 0;
1543 *w = wsi->ws->rx_draining_ext_list;
1546 w = &((*w)->ws->rx_draining_ext_list);
1548 wsi->ws->rx_draining_ext_list = NULL;
1551 if (wsi->ws->tx_draining_ext) {
1552 struct lws **w = &pt->ws.tx_draining_ext_list;
1554 wsi->ws->tx_draining_ext = 0;
1558 *w = wsi->ws->tx_draining_ext_list;
1561 w = &((*w)->ws->tx_draining_ext_list);
1563 wsi->ws->tx_draining_ext_list = NULL;
1566 lws_free_set_NULL(wsi->ws->rx_ubuf);
1568 wsi->ws->pong_payload_len = 0;
1569 wsi->ws->pong_pending_flag = 0;
1596 if (wsi->ws->tx_draining_ext) {
1598 struct lws **w = &pt->ws.tx_draining_ext_list;
1601 wsi->ws->tx_draining_ext = 0;
1605 *w = wsi->ws->tx_draining_ext_list;
1608 w = &((*w)->ws->tx_draining_ext_list);
1610 wsi->ws->tx_draining_ext_list = NULL;
1613 *wp = (wsi->ws->tx_draining_stashed_wp & 0xc0) |
1627 wsi->ws->tx_draining_stashed_wp, wpt);
1642 if (wsi->ws->inside_frame) {
1647 wsi->ws->clean_buffer = 1;
1691 wsi->ws->tx_draining_ext = 1;
1692 wsi->ws->tx_draining_ext_list =
1693 pt->ws.tx_draining_ext_list;
1694 pt->ws.tx_draining_ext_list = wsi;
1702 wsi->ws->tx_draining_stashed_wp = (uint8_t)*wp;
1716 if (pmdrx.eb_out.len && wsi->ws->stashed_write_pending) {
1717 wsi->ws->stashed_write_pending = 0;
1718 *wp = (unsigned int)(((*wp) & 0xc0) | (unsigned int)wsi->ws->stashed_write_type);
1734 if (!wsi->ws->stashed_write_pending)
1735 wsi->ws->stashed_write_type =
1737 wsi->ws->stashed_write_pending = 1;
1744 wsi->ws->clean_buffer = 0;
1755 switch (wsi->ws->ietf_spec_revision) {
1834 if (!wsi->ws->inside_frame)
1845 dropmask[n] = dropmask[n] ^ wsi->ws->mask[
1846 (wsi->ws->mask_idx++) & 3];
1849 memcpy(dropmask, wsi->ws->mask, 4);
1886 * incomplete, ie, if wsi->ws->clean_buffer is 0
1888 * wsi->ws->clean_buffer is 1, it will instead return
1894 wsi->ws->inside_frame = 1;
1901 wsi->ws->inside_frame = 0;
1926 /* deal with ws encapsulation in h2 */
1978 vh->ws.extensions = lws_zalloc(sizeof(struct lws_extension) *
1981 if (!vh->ws.extensions)
1984 memcpy((struct lws_extension *)vh->ws.extensions, info->extensions,
1991 memcpy((struct lws_extension *)&vh->ws.extensions[m],
2000 vh->ws.extensions = info->extensions;
2012 lws_free((void *)vh->ws.extensions);
2033 lws_dll2_foreach_safe(&wsi->ws->proxy_owner, NULL, ws_destroy_proxy_buf);
2036 lws_free_set_NULL(wsi->ws);
2064 memcpy(&wsi->ws->ping_payload_buf[LWS_PRE], &us, 8);
2065 wsi->ws->send_check_ping = 1;
2088 /* role name */ "ws",