Lines Matching refs:h2n
136 wsi->h2.h2n->our_set = wsi->vhost->h2.set; in lws_h2_init()
137 wsi->h2.h2n->peer_set = lws_h2_defaults; in lws_h2_init()
219 struct lws_h2_netconn *h2n = nwsi->h2.h2n; in lws_wsi_server_new() local
229 if (sid <= h2n->highest_sid_opened) { in lws_wsi_server_new()
231 sid, (int)h2n->highest_sid_opened); in lws_wsi_server_new()
238 parent_wsi->h2.h2n->our_set.s[H2SET_MAX_CONCURRENT_STREAMS]) { in lws_wsi_server_new()
248 h2n->highest_sid_opened = sid; in lws_wsi_server_new()
251 if (sid >= h2n->highest_sid) in lws_wsi_server_new()
252 h2n->highest_sid = sid + 2; in lws_wsi_server_new()
257 wsi->txc.tx_cr = nwsi->h2.h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_wsi_server_new()
259 nwsi->h2.h2n->our_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_wsi_server_new()
306 parent_wsi->h2.h2n->our_set.s[H2SET_MAX_CONCURRENT_STREAMS]) { in lws_wsi_h2_adopt()
322 wsi->mux.my_sid = nwsi->h2.h2n->highest_sid; in lws_wsi_h2_adopt()
323 nwsi->h2.h2n->highest_sid += 2; in lws_wsi_h2_adopt()
328 wsi, (int)wsi->mux.my_sid, (int)nwsi->h2.h2n->highest_sid); in lws_wsi_h2_adopt()
332 wsi->txc.tx_cr = nwsi->h2.h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_wsi_h2_adopt()
334 nwsi->h2.h2n->our_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_wsi_h2_adopt()
368 struct lws_h2_netconn *h2n = wsi->h2.h2n; in lws_h2_issue_preface() local
378 h2n->count = 0; in lws_h2_issue_preface()
397 struct lws_h2_netconn *h2n = nwsi->h2.h2n; in lws_pps_schedule() local
399 pps->next = h2n->pps; in lws_pps_schedule()
400 h2n->pps = pps; in lws_pps_schedule()
409 struct lws_h2_netconn *h2n = wsi->h2.h2n; in lws_h2_goaway() local
412 if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) in lws_h2_goaway()
422 pps->u.ga.highest_sid = h2n->highest_sid; in lws_h2_goaway()
426 h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ in lws_h2_goaway()
435 struct lws_h2_netconn *h2n = nwsi->h2.h2n; in lws_h2_rst_stream() local
438 if (!h2n) in lws_h2_rst_stream()
441 if (!wsi->h2_stream_carries_ws && h2n->type == LWS_H2_FRAME_TYPE_COUNT) in lws_h2_rst_stream()
456 h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ in lws_h2_rst_stream()
669 *buf++ = wsi->h2.h2n->our_set.s[n] >> 24; in lws_h2_set_bin()
670 *buf++ = wsi->h2.h2n->our_set.s[n] >> 16; in lws_h2_set_bin()
671 *buf++ = wsi->h2.h2n->our_set.s[n] >> 8; in lws_h2_set_bin()
672 *buf = wsi->h2.h2n->our_set.s[n]; in lws_h2_set_bin()
679 struct lws_h2_netconn *h2n = wsi->h2.h2n; in lws_h2_do_pps_send() local
685 if (!h2n) in lws_h2_do_pps_send()
690 lws_start_foreach_llp(struct lws_h2_protocol_send **, pps1, h2n->pps) { in lws_h2_do_pps_send()
712 if (h2n->our_set.s[n] != lws_h2_defaults.s[n]) { in lws_h2_do_pps_send()
715 wsi->h2.h2n->our_set.s[n]); in lws_h2_do_pps_send()
718 m += sizeof(h2n->one_setting); in lws_h2_do_pps_send()
772 h2n->swsi = lws_wsi_server_new(wsi->vhost, wsi, 1); in lws_h2_do_pps_send()
773 if (!h2n->swsi) in lws_h2_do_pps_send()
777 h2n->swsi->http.ah = wsi->http.ah; in lws_h2_do_pps_send()
781 h2n->swsi->http.ah); in lws_h2_do_pps_send()
782 h2n->swsi->txc.tx_cr = in lws_h2_do_pps_send()
783 h2n->our_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_h2_do_pps_send()
785 h2n->swsi, (int)h2n->swsi->txc.tx_cr); in lws_h2_do_pps_send()
786 h2n->swsi->h2.initialized = 1; in lws_h2_do_pps_send()
788 h2n->swsi->h2.END_STREAM = 1; in lws_h2_do_pps_send()
795 if (lws_http_action(h2n->swsi)) in lws_h2_do_pps_send()
838 h2n->we_told_goaway = 1; in lws_h2_do_pps_send()
911 struct lws_h2_netconn *h2n = wsi->h2.h2n; in lws_h2_parse_frame_header() local
918 h2n->count = 0; in lws_h2_parse_frame_header()
919 h2n->swsi = wsi; in lws_h2_parse_frame_header()
921 h2n->sid = h2n->sid & 0x7fffffff; in lws_h2_parse_frame_header()
923 if (h2n->sid && !(h2n->sid & 1)) { in lws_h2_parse_frame_header()
936 if (h2n->sid) in lws_h2_parse_frame_header()
937 h2n->swsi = lws_wsi_mux_from_id(wsi, h2n->sid); in lws_h2_parse_frame_header()
940 wsi, h2n->swsi, h2n->type, h2n->flags, (unsigned int)h2n->sid, in lws_h2_parse_frame_header()
941 (unsigned int)h2n->length); in lws_h2_parse_frame_header()
943 if (h2n->we_told_goaway && h2n->sid > h2n->highest_sid) in lws_h2_parse_frame_header()
944 h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ in lws_h2_parse_frame_header()
946 if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) in lws_h2_parse_frame_header()
949 if (h2n->length > h2n->our_set.s[H2SET_MAX_FRAME_SIZE]) { in lws_h2_parse_frame_header()
955 (unsigned int)h2n->length); in lws_h2_parse_frame_header()
961 if (h2n->swsi) in lws_h2_parse_frame_header()
963 __func__, h2n->swsi, in lws_h2_parse_frame_header()
964 h2_state_names[h2n->swsi->h2.h2_state], h2n->type); in lws_h2_parse_frame_header()
967 if (h2n->type == LWS_H2_FRAME_TYPE_DATA) { in lws_h2_parse_frame_header()
968 if (h2n->sid <= h2n->highest_sid_opened in lws_h2_parse_frame_header()
974 h2n->flags); in lws_h2_parse_frame_header()
976 h2n->type = LWS_H2_FRAME_TYPE_COUNT; in lws_h2_parse_frame_header()
984 if (h2n->sid > h2n->highest_sid_opened && in lws_h2_parse_frame_header()
985 h2n->type != LWS_H2_FRAME_TYPE_HEADERS && in lws_h2_parse_frame_header()
986 h2n->type != LWS_H2_FRAME_TYPE_PRIORITY) { in lws_h2_parse_frame_header()
989 __func__, h2n->swsi, (unsigned int)h2n->sid, h2n->type); in lws_h2_parse_frame_header()
996 if (h2n->swsi && h2n->sid && in lws_h2_parse_frame_header()
997 !(http2_rx_validity[h2n->swsi->h2.h2_state] & (1 << h2n->type))) { in lws_h2_parse_frame_header()
999 __func__, h2n->swsi, in lws_h2_parse_frame_header()
1000 h2_state_names[h2n->swsi->h2.h2_state], h2n->type, in lws_h2_parse_frame_header()
1001 http2_rx_validity[h2n->swsi->h2.h2_state]); in lws_h2_parse_frame_header()
1003 if (h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED || in lws_h2_parse_frame_header()
1004 h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE) in lws_h2_parse_frame_header()
1013 if (h2n->cont_exp && (h2n->cont_exp_sid != h2n->sid || in lws_h2_parse_frame_header()
1014 h2n->type != LWS_H2_FRAME_TYPE_CONTINUATION)) { in lws_h2_parse_frame_header()
1016 __func__, (unsigned int)h2n->cont_exp_sid, h2n->type, in lws_h2_parse_frame_header()
1017 (unsigned int)h2n->sid); in lws_h2_parse_frame_header()
1018 h2n->cont_exp = 0; in lws_h2_parse_frame_header()
1019 if (h2n->cont_exp_headers) in lws_h2_parse_frame_header()
1028 switch (h2n->type) { in lws_h2_parse_frame_header()
1031 if (!h2n->sid) { in lws_h2_parse_frame_header()
1037 (unsigned int)h2n->sid, h2n->flags, in lws_h2_parse_frame_header()
1038 (unsigned int)h2n->length); in lws_h2_parse_frame_header()
1040 if (!h2n->swsi) { in lws_h2_parse_frame_header()
1045 lwsl_info("DATA rx on state %d\n", h2n->swsi->h2.h2_state); in lws_h2_parse_frame_header()
1048 h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE || in lws_h2_parse_frame_header()
1049 h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED) { in lws_h2_parse_frame_header()
1054 if (h2n->length == 0) in lws_h2_parse_frame_header()
1061 if (!h2n->sid) { in lws_h2_parse_frame_header()
1066 if (h2n->length != 5) { in lws_h2_parse_frame_header()
1082 if (!h2n->sid) in lws_h2_parse_frame_header()
1084 if (!h2n->swsi) { in lws_h2_parse_frame_header()
1085 if (h2n->sid <= h2n->highest_sid_opened) in lws_h2_parse_frame_header()
1091 if (h2n->length != 4) { in lws_h2_parse_frame_header()
1096 lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); in lws_h2_parse_frame_header()
1102 if (h2n->sid) { in lws_h2_parse_frame_header()
1108 if (!(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) { in lws_h2_parse_frame_header()
1109 if ((!h2n->length) || h2n->length % 6) { in lws_h2_parse_frame_header()
1115 if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) in lws_h2_parse_frame_header()
1136 if (h2n->length) { in lws_h2_parse_frame_header()
1143 if (h2n->sid) { in lws_h2_parse_frame_header()
1148 if (h2n->length != 8) { in lws_h2_parse_frame_header()
1156 (unsigned int)h2n->sid, (int)h2n->cont_exp, in lws_h2_parse_frame_header()
1157 (int)h2n->cont_exp_sid); in lws_h2_parse_frame_header()
1159 if (!h2n->cont_exp || in lws_h2_parse_frame_header()
1160 h2n->cont_exp_sid != h2n->sid || in lws_h2_parse_frame_header()
1161 !h2n->sid || in lws_h2_parse_frame_header()
1162 !h2n->swsi) { in lws_h2_parse_frame_header()
1168 if (h2n->swsi->h2.END_HEADERS) { in lws_h2_parse_frame_header()
1178 (unsigned int)h2n->sid); in lws_h2_parse_frame_header()
1179 if (!h2n->sid) { in lws_h2_parse_frame_header()
1184 if (h2n->swsi && !h2n->swsi->h2.END_STREAM && in lws_h2_parse_frame_header()
1185 h2n->swsi->h2.END_HEADERS && in lws_h2_parse_frame_header()
1186 !(h2n->flags & LWS_H2_FLAG_END_STREAM)) { in lws_h2_parse_frame_header()
1194 if (h2n->sid) { in lws_h2_parse_frame_header()
1195 h2n->swsi = lws_wsi_mux_from_id(wsi, h2n->sid); in lws_h2_parse_frame_header()
1198 (unsigned int)h2n->sid, h2n->swsi); in lws_h2_parse_frame_header()
1199 if (!h2n->swsi) in lws_h2_parse_frame_header()
1206 if (!h2n->swsi) { in lws_h2_parse_frame_header()
1209 wsi->h2.h2n->our_set.s[H2SET_MAX_CONCURRENT_STREAMS]) { in lws_h2_parse_frame_header()
1221 h2n->swsi = lws_wsi_server_new(wsi->vhost, wsi, in lws_h2_parse_frame_header()
1222 h2n->sid); in lws_h2_parse_frame_header()
1223 if (!h2n->swsi) { in lws_h2_parse_frame_header()
1230 if (h2n->sid >= h2n->highest_sid) in lws_h2_parse_frame_header()
1231 h2n->highest_sid = h2n->sid + 2; in lws_h2_parse_frame_header()
1233 h2n->swsi->h2.initialized = 1; in lws_h2_parse_frame_header()
1235 if (lws_h2_update_peer_txcredit(h2n->swsi, in lws_h2_parse_frame_header()
1236 h2n->swsi->mux.my_sid, 4 * 65536)) in lws_h2_parse_frame_header()
1244 if (!h2n->swsi->http.ah) in lws_h2_parse_frame_header()
1245 if (lws_header_table_attach(h2n->swsi, 0)) { in lws_h2_parse_frame_header()
1261 if (w->mux.my_sid < h2n->sid && in lws_h2_parse_frame_header()
1267 if (lws_check_opt(h2n->swsi->vhost->options, in lws_h2_parse_frame_header()
1275 lws_mux_mark_immortal(h2n->swsi); in lws_h2_parse_frame_header()
1277 __func__, h2n->swsi); in lws_h2_parse_frame_header()
1280 h2n->swsi->h2.END_STREAM = in lws_h2_parse_frame_header()
1281 !!(h2n->flags & LWS_H2_FLAG_END_STREAM); in lws_h2_parse_frame_header()
1283 h2n->swsi->h2.END_STREAM); in lws_h2_parse_frame_header()
1286 h2n->cont_exp = !(h2n->flags & LWS_H2_FLAG_END_HEADERS); in lws_h2_parse_frame_header()
1287 h2n->cont_exp_sid = h2n->sid; in lws_h2_parse_frame_header()
1288 h2n->cont_exp_headers = 1; in lws_h2_parse_frame_header()
1293 h2n->swsi->h2.END_HEADERS = in lws_h2_parse_frame_header()
1294 !!(h2n->flags & LWS_H2_FLAG_END_HEADERS); in lws_h2_parse_frame_header()
1295 lwsl_info("%p: END_HEADERS %d\n", h2n->swsi, in lws_h2_parse_frame_header()
1296 h2n->swsi->h2.END_HEADERS); in lws_h2_parse_frame_header()
1297 if (h2n->swsi->h2.END_HEADERS) in lws_h2_parse_frame_header()
1298 h2n->cont_exp = 0; in lws_h2_parse_frame_header()
1299 lwsl_debug("END_HEADERS %d\n", h2n->swsi->h2.END_HEADERS); in lws_h2_parse_frame_header()
1307 if (h2n->length != 4) { in lws_h2_parse_frame_header()
1317 lwsl_info("%s: ILLEGAL FRAME TYPE %d\n", __func__, h2n->type); in lws_h2_parse_frame_header()
1318 h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ in lws_h2_parse_frame_header()
1321 if (h2n->length == 0) in lws_h2_parse_frame_header()
1322 h2n->frame_state = 0; in lws_h2_parse_frame_header()
1361 struct lws_h2_netconn *h2n = wsi->h2.h2n; in lws_h2_parse_end_of_frame() local
1366 h2n->frame_state = 0; in lws_h2_parse_end_of_frame()
1367 h2n->count = 0; in lws_h2_parse_end_of_frame()
1369 if (h2n->sid) in lws_h2_parse_end_of_frame()
1370 h2n->swsi = lws_wsi_mux_from_id(wsi, h2n->sid); in lws_h2_parse_end_of_frame()
1372 if (h2n->sid > h2n->highest_sid) in lws_h2_parse_end_of_frame()
1373 h2n->highest_sid = h2n->sid; in lws_h2_parse_end_of_frame()
1375 if (h2n->collected_priority && (h2n->dep & ~(1u << 31)) == h2n->sid) { in lws_h2_parse_end_of_frame()
1380 switch (h2n->type) { in lws_h2_parse_end_of_frame()
1386 !(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) { in lws_h2_parse_end_of_frame()
1399 h2n->swsi = lws_wsi_server_new(wsi->vhost, wsi, 1); in lws_h2_parse_end_of_frame()
1400 if (!h2n->swsi) in lws_h2_parse_end_of_frame()
1402 h2n->sid = 1; in lws_h2_parse_end_of_frame()
1404 assert(lws_wsi_mux_from_id(wsi, 1) == h2n->swsi); in lws_h2_parse_end_of_frame()
1410 lws_role_transition(h2n->swsi, LWSIFR_CLIENT, in lws_h2_parse_end_of_frame()
1415 h2n->swsi->http.ah = wsi->http.ah; in lws_h2_parse_end_of_frame()
1416 h2n->swsi->client_mux_substream = 1; in lws_h2_parse_end_of_frame()
1417 h2n->swsi->client_h2_alpn = 1; in lws_h2_parse_end_of_frame()
1419 h2n->swsi->flags = wsi->flags; in lws_h2_parse_end_of_frame()
1422 h2n->swsi->protocol = wsi->protocol; in lws_h2_parse_end_of_frame()
1423 if (h2n->swsi->user_space && in lws_h2_parse_end_of_frame()
1424 !h2n->swsi->user_space_externally_allocated) in lws_h2_parse_end_of_frame()
1425 lws_free(h2n->swsi->user_space); in lws_h2_parse_end_of_frame()
1426 h2n->swsi->user_space = wsi->user_space; in lws_h2_parse_end_of_frame()
1427 h2n->swsi->user_space_externally_allocated = in lws_h2_parse_end_of_frame()
1429 h2n->swsi->opaque_user_data = wsi->opaque_user_data; in lws_h2_parse_end_of_frame()
1431 h2n->swsi->txc.manual_initial_tx_credit = in lws_h2_parse_end_of_frame()
1436 if (h2n->swsi->http.ah) in lws_h2_parse_end_of_frame()
1437 h2n->swsi->http.ah->wsi = h2n->swsi; in lws_h2_parse_end_of_frame()
1441 wsi, h2n->swsi); in lws_h2_parse_end_of_frame()
1442 h2n->swsi->txc.tx_cr = in lws_h2_parse_end_of_frame()
1443 h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_h2_parse_end_of_frame()
1445 __func__, h2n->swsi, (int)h2n->swsi->txc.tx_cr); in lws_h2_parse_end_of_frame()
1446 h2n->swsi->h2.initialized = 1; in lws_h2_parse_end_of_frame()
1451 h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; in lws_h2_parse_end_of_frame()
1459 lws_callback_on_writable(h2n->swsi); in lws_h2_parse_end_of_frame()
1482 if (!h2n->swsi) in lws_h2_parse_end_of_frame()
1487 if (h2n->last_action_dyntable_resize) { in lws_h2_parse_end_of_frame()
1493 if (!h2n->swsi->h2.END_HEADERS) { in lws_h2_parse_end_of_frame()
1496 h2n->cont_exp_sid = h2n->sid; in lws_h2_parse_end_of_frame()
1497 h2n->cont_exp = 1; in lws_h2_parse_end_of_frame()
1503 if (h2n->hpack != HPKS_TYPE) { in lws_h2_parse_end_of_frame()
1506 h2n->hpack, h2n->type, in lws_h2_parse_end_of_frame()
1507 (unsigned int)h2n->hpack_len); in lws_h2_parse_end_of_frame()
1514 switch (h2n->swsi->h2.h2_state) { in lws_h2_parse_end_of_frame()
1516 lws_h2_state(h2n->swsi, LWS_H2_STATE_OPEN); in lws_h2_parse_end_of_frame()
1519 lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_LOCAL); in lws_h2_parse_end_of_frame()
1523 lwsl_info("http req, wsi=%p, h2n->swsi=%p\n", wsi, h2n->swsi); in lws_h2_parse_end_of_frame()
1524 h2n->swsi->hdr_parsing_completed = 1; in lws_h2_parse_end_of_frame()
1527 if (h2n->swsi->client_mux_substream && in lws_h2_parse_end_of_frame()
1528 lws_client_interpret_server_handshake(h2n->swsi)) { in lws_h2_parse_end_of_frame()
1534 if (lws_hdr_extant(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { in lws_h2_parse_end_of_frame()
1535 h2n->swsi->http.rx_content_length = atoll( in lws_h2_parse_end_of_frame()
1536 lws_hdr_simple_ptr(h2n->swsi, in lws_h2_parse_end_of_frame()
1538 h2n->swsi->http.rx_content_remain = in lws_h2_parse_end_of_frame()
1539 h2n->swsi->http.rx_content_length; in lws_h2_parse_end_of_frame()
1541 (long long)h2n->swsi->http.rx_content_length); in lws_h2_parse_end_of_frame()
1556 len = lws_hdr_total_length(h2n->swsi, n); in lws_h2_parse_end_of_frame()
1562 if (lws_hdr_copy(h2n->swsi, buf, sizeof buf, in lws_h2_parse_end_of_frame()
1576 if (h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE || in lws_h2_parse_end_of_frame()
1577 h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED) { in lws_h2_parse_end_of_frame()
1583 switch (h2n->swsi->h2.h2_state) { in lws_h2_parse_end_of_frame()
1585 lws_h2_state(h2n->swsi, LWS_H2_STATE_OPEN); in lws_h2_parse_end_of_frame()
1588 if (h2n->swsi->h2.END_STREAM) in lws_h2_parse_end_of_frame()
1589 lws_h2_state(h2n->swsi, in lws_h2_parse_end_of_frame()
1593 if (h2n->swsi->h2.END_STREAM) in lws_h2_parse_end_of_frame()
1594 lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); in lws_h2_parse_end_of_frame()
1599 if (h2n->swsi->client_mux_substream) { in lws_h2_parse_end_of_frame()
1601 __func__, wsi, h2_state_names[h2n->swsi->h2.h2_state]); in lws_h2_parse_end_of_frame()
1606 if (!lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_PATH) || in lws_h2_parse_end_of_frame()
1607 !lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_METHOD) || in lws_h2_parse_end_of_frame()
1608 !lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_SCHEME) || in lws_h2_parse_end_of_frame()
1609 lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_STATUS) || in lws_h2_parse_end_of_frame()
1610 lws_hdr_extant(h2n->swsi, WSI_TOKEN_CONNECTION)) { in lws_h2_parse_end_of_frame()
1616 if (lws_hdr_extant(h2n->swsi, WSI_TOKEN_TE)) { in lws_h2_parse_end_of_frame()
1617 n = lws_hdr_total_length(h2n->swsi, WSI_TOKEN_TE); in lws_h2_parse_end_of_frame()
1620 strncmp(lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_TE), in lws_h2_parse_end_of_frame()
1629 lws_http_compression_validate(h2n->swsi); in lws_h2_parse_end_of_frame()
1635 p = lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_HTTP_COLON_METHOD); in lws_h2_parse_end_of_frame()
1642 h2n->swsi->http.ah->frag_index[method_index[n]] = in lws_h2_parse_end_of_frame()
1643 h2n->swsi->http.ah->frag_index[ in lws_h2_parse_end_of_frame()
1649 (unsigned int)h2n->swsi->wsistate); in lws_h2_parse_end_of_frame()
1650 lwsi_set_state(h2n->swsi, LRS_DEFERRING_ACTION); in lws_h2_parse_end_of_frame()
1651 lws_callback_on_writable(h2n->swsi); in lws_h2_parse_end_of_frame()
1655 lwsl_info("%s: DATA flags 0x%x\n", __func__, h2n->flags); in lws_h2_parse_end_of_frame()
1656 if (!h2n->swsi) in lws_h2_parse_end_of_frame()
1659 if (lws_hdr_total_length(h2n->swsi, in lws_h2_parse_end_of_frame()
1661 h2n->swsi->h2.END_STREAM && in lws_h2_parse_end_of_frame()
1662 h2n->swsi->http.rx_content_length && in lws_h2_parse_end_of_frame()
1663 h2n->swsi->http.rx_content_remain) { in lws_h2_parse_end_of_frame()
1664 lws_h2_rst_stream(h2n->swsi, H2_ERR_PROTOCOL_ERROR, in lws_h2_parse_end_of_frame()
1669 if (h2n->swsi->h2.END_STREAM && in lws_h2_parse_end_of_frame()
1670 h2n->swsi->h2.h2_state == LWS_H2_STATE_OPEN) in lws_h2_parse_end_of_frame()
1671 lws_h2_state(h2n->swsi, in lws_h2_parse_end_of_frame()
1674 if (h2n->swsi->h2.END_STREAM && in lws_h2_parse_end_of_frame()
1675 h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_LOCAL) in lws_h2_parse_end_of_frame()
1676 lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); in lws_h2_parse_end_of_frame()
1684 if (h2n->swsi->client_mux_substream && in lws_h2_parse_end_of_frame()
1685 (h2n->flags & LWS_H2_FLAG_END_STREAM)) { in lws_h2_parse_end_of_frame()
1687 __func__, h2n->swsi); in lws_h2_parse_end_of_frame()
1689 if (h2n->swsi->h2.h2_state == LWS_H2_STATE_OPEN) { in lws_h2_parse_end_of_frame()
1690 lws_h2_state(h2n->swsi, in lws_h2_parse_end_of_frame()
1701 lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); in lws_h2_parse_end_of_frame()
1703 lws_h2_rst_stream(h2n->swsi, H2_ERR_NO_ERROR, in lws_h2_parse_end_of_frame()
1706 if (lws_http_transaction_completed_client(h2n->swsi)) in lws_h2_parse_end_of_frame()
1714 if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) in lws_h2_parse_end_of_frame()
1725 memcpy(pps->u.ping.ping_payload, h2n->ping_payload, 8); in lws_h2_parse_end_of_frame()
1735 h2n->hpack_e_dep &= ~(1u << 31); in lws_h2_parse_end_of_frame()
1737 (unsigned int)h2n->sid, in lws_h2_parse_end_of_frame()
1738 (unsigned int)h2n->hpack_e_dep, in lws_h2_parse_end_of_frame()
1739 (unsigned int)h2n->hpack_e_dep); in lws_h2_parse_end_of_frame()
1741 if (h2n->sid) in lws_h2_parse_end_of_frame()
1742 eff_wsi = h2n->swsi; in lws_h2_parse_end_of_frame()
1745 if (h2n->sid > h2n->highest_sid_opened) in lws_h2_parse_end_of_frame()
1753 (uint64_t)eff_wsi->txc.tx_cr + (uint64_t)h2n->hpack_e_dep > in lws_h2_parse_end_of_frame()
1755 h2n->hpack_e_dep = 0x7fffffff - eff_wsi->txc.tx_cr; in lws_h2_parse_end_of_frame()
1757 if ((uint64_t)eff_wsi->txc.tx_cr + (uint64_t)h2n->hpack_e_dep > in lws_h2_parse_end_of_frame()
1759 if (h2n->sid) in lws_h2_parse_end_of_frame()
1760 lws_h2_rst_stream(h2n->swsi, in lws_h2_parse_end_of_frame()
1769 if (!h2n->hpack_e_dep) { in lws_h2_parse_end_of_frame()
1775 eff_wsi->txc.tx_cr += h2n->hpack_e_dep; in lws_h2_parse_end_of_frame()
1778 (int32_t)h2n->hpack_e_dep); in lws_h2_parse_end_of_frame()
1809 (unsigned int)h2n->goaway_last_sid, in lws_h2_parse_end_of_frame()
1810 (unsigned int)h2n->goaway_err, h2n->goaway_str); in lws_h2_parse_end_of_frame()
1816 (unsigned int)h2n->sid, in lws_h2_parse_end_of_frame()
1817 (unsigned int)h2n->hpack_e_dep); in lws_h2_parse_end_of_frame()
1847 struct lws_h2_netconn *h2n = wsi->h2.h2n; in lws_h2_parser() local
1852 if (!h2n) in lws_h2_parser()
1863 if (preface[h2n->count++] != c) in lws_h2_parser()
1866 if (preface[h2n->count]) in lws_h2_parser()
1872 h2n->count = 0; in lws_h2_parser()
1889 if (h2n->frame_state != LWS_H2_FRAME_HEADER_LENGTH) in lws_h2_parser()
1895 h2n->count++; in lws_h2_parser()
1897 if (h2n->flags & LWS_H2_FLAG_PADDED && in lws_h2_parser()
1898 !h2n->pad_length) { in lws_h2_parser()
1903 h2n->padding = c; in lws_h2_parser()
1904 h2n->pad_length = 1; in lws_h2_parser()
1905 h2n->preamble++; in lws_h2_parser()
1907 if (h2n->padding > h2n->length - 1) in lws_h2_parser()
1914 if (h2n->flags & LWS_H2_FLAG_PRIORITY && in lws_h2_parser()
1915 !h2n->collected_priority) { in lws_h2_parser()
1920 if (h2n->preamble++ - h2n->pad_length < 4) { in lws_h2_parser()
1921 h2n->dep = ((h2n->dep) << 8) | c; in lws_h2_parser()
1924 h2n->weight_temp = c; in lws_h2_parser()
1925 h2n->collected_priority = 1; in lws_h2_parser()
1927 (unsigned int)h2n->dep, in lws_h2_parser()
1928 h2n->weight_temp); in lws_h2_parser()
1931 if (h2n->padding && h2n->count > in lws_h2_parser()
1932 (h2n->length - h2n->padding)) { in lws_h2_parser()
1942 switch(h2n->type) { in lws_h2_parser()
1945 n = (h2n->count - 1 - h2n->preamble) % in lws_h2_parser()
1947 h2n->one_setting[n] = c; in lws_h2_parser()
1950 lws_h2_settings(wsi, &h2n->peer_set, in lws_h2_parser()
1951 h2n->one_setting, in lws_h2_parser()
1957 if (!h2n->swsi) in lws_h2_parser()
1959 if (lws_hpack_interpret(h2n->swsi, c)) { in lws_h2_parser()
1967 switch (h2n->inside++) { in lws_h2_parser()
1972 h2n->goaway_last_sid <<= 8; in lws_h2_parser()
1973 h2n->goaway_last_sid |= c; in lws_h2_parser()
1974 h2n->goaway_str[0] = '\0'; in lws_h2_parser()
1981 h2n->goaway_err <<= 8; in lws_h2_parser()
1982 h2n->goaway_err |= c; in lws_h2_parser()
1986 if (h2n->inside - 9 < in lws_h2_parser()
1987 sizeof(h2n->goaway_str) - 1) in lws_h2_parser()
1988 h2n->goaway_str[ in lws_h2_parser()
1989 h2n->inside - 9] = c; in lws_h2_parser()
1990 h2n->goaway_str[ in lws_h2_parser()
1991 sizeof(h2n->goaway_str) - 1] = '\0'; in lws_h2_parser()
1999 __func__, h2n->flags); in lws_h2_parser()
2012 if (!h2n->swsi) in lws_h2_parser()
2016 &h2n->swsi->buflist, NULL)) in lws_h2_parser()
2020 if (lwsi_role_http(h2n->swsi) && in lws_h2_parser()
2021 lwsi_state(h2n->swsi) == LRS_ESTABLISHED) { in lws_h2_parser()
2022 lwsi_set_state(h2n->swsi, LRS_BODY); in lws_h2_parser()
2024 __func__, h2n->swsi); in lws_h2_parser()
2027 if (lws_hdr_total_length(h2n->swsi, in lws_h2_parser()
2029 h2n->swsi->http.rx_content_length && in lws_h2_parser()
2030 h2n->swsi->http.rx_content_remain < in lws_h2_parser()
2032 h2n->inside < h2n->length) { in lws_h2_parser()
2046 if (n > (int)(h2n->length - h2n->count + 1)) { in lws_h2_parser()
2047 n = h2n->length - h2n->count + 1; in lws_h2_parser()
2052 if (h2n->swsi->client_mux_substream) { in lws_h2_parser()
2053 if (!h2n->swsi->protocol) { in lws_h2_parser()
2055 __func__, h2n->swsi); in lws_h2_parser()
2058 h2n->swsi->txc.peer_tx_cr_est -= n; in lws_h2_parser()
2060 lws_wsi_txc_describe(&h2n->swsi->txc, in lws_h2_parser()
2062 h2n->swsi->mux.my_sid); in lws_h2_parser()
2064 h2n->swsi->protocol->callback, in lws_h2_parser()
2065 h2n->swsi, in lws_h2_parser()
2067 h2n->swsi->user_space, in lws_h2_parser()
2072 h2n->inside += n; in lws_h2_parser()
2073 h2n->count += n - 1; in lws_h2_parser()
2086 if (lwsi_state(h2n->swsi) == LRS_DEFERRING_ACTION) { in lws_h2_parser()
2088 &h2n->swsi->buflist, in - 1, n); in lws_h2_parser()
2098 &h2n->swsi->dll_buflist, in lws_h2_parser()
2102 h2n->inside += n; in lws_h2_parser()
2103 h2n->count += n - 1; in lws_h2_parser()
2110 h2n->swsi->outer_will_close = 1; in lws_h2_parser()
2117 n = lws_read_h1(h2n->swsi, in - 1, n); in lws_h2_parser()
2119 h2n->swsi->outer_will_close = 0; in lws_h2_parser()
2129 (unsigned int)h2n->count, in lws_h2_parser()
2130 (unsigned int)h2n->length); in lws_h2_parser()
2131 in += h2n->length - h2n->count; in lws_h2_parser()
2132 h2n->inside = h2n->length; in lws_h2_parser()
2133 h2n->count = h2n->length - 1; in lws_h2_parser()
2142 h2n->inside += n; in lws_h2_parser()
2143 h2n->count += n - 1; in lws_h2_parser()
2144 h2n->swsi->txc.peer_tx_cr_est -= n; in lws_h2_parser()
2150 if (!(h2n->swsi->flags & LCCSCF_H2_MANUAL_RXFLOW)) in lws_h2_parser()
2164 lws_h2_update_peer_txcredit_thresh(h2n->swsi, in lws_h2_parser()
2165 h2n->sid, m, m); in lws_h2_parser()
2176 h2n->swsi->txc.manual = 1; in lws_h2_parser()
2182 if (h2n->count <= 4) { in lws_h2_parser()
2183 h2n->dep <<= 8; in lws_h2_parser()
2184 h2n->dep |= c; in lws_h2_parser()
2187 h2n->weight_temp = c; in lws_h2_parser()
2189 (unsigned int)h2n->dep, h2n->weight_temp); in lws_h2_parser()
2191 if ((h2n->dep & ~(1u << 31)) == h2n->sid) { in lws_h2_parser()
2199 h2n->hpack_e_dep <<= 8; in lws_h2_parser()
2200 h2n->hpack_e_dep |= c; in lws_h2_parser()
2207 if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) { // ack in lws_h2_parser()
2209 if (h2n->count > 8) in lws_h2_parser()
2211 h2n->ping_payload[h2n->count - 1] = c; in lws_h2_parser()
2216 h2n->hpack_e_dep <<= 8; in lws_h2_parser()
2217 h2n->hpack_e_dep |= c; in lws_h2_parser()
2225 __func__, h2n->type); in lws_h2_parser()
2231 if (h2n->count > h2n->length) { in lws_h2_parser()
2233 __func__, (unsigned int)h2n->count, in lws_h2_parser()
2234 (unsigned int)h2n->length); in lws_h2_parser()
2237 if (h2n->count != h2n->length) in lws_h2_parser()
2249 if (h2n->frame_state <= 8) { in lws_h2_parser()
2251 switch (h2n->frame_state++) { in lws_h2_parser()
2253 h2n->pad_length = 0; in lws_h2_parser()
2254 h2n->collected_priority = 0; in lws_h2_parser()
2255 h2n->padding = 0; in lws_h2_parser()
2256 h2n->preamble = 0; in lws_h2_parser()
2257 h2n->length = c; in lws_h2_parser()
2258 h2n->inside = 0; in lws_h2_parser()
2262 h2n->length <<= 8; in lws_h2_parser()
2263 h2n->length |= c; in lws_h2_parser()
2266 h2n->type = c; in lws_h2_parser()
2269 h2n->flags = c; in lws_h2_parser()
2276 h2n->sid <<= 8; in lws_h2_parser()
2277 h2n->sid |= c; in lws_h2_parser()
2282 if (h2n->frame_state == LWS_H2_FRAME_HEADER_LENGTH) in lws_h2_parser()
2298 lws_close_free_wsi(h2n->swsi, 0, "close_swsi_and_return"); in lws_h2_parser()
2299 h2n->swsi = NULL; in lws_h2_parser()
2300 h2n->frame_state = 0; in lws_h2_parser()
2301 h2n->count = 0; in lws_h2_parser()
2332 int sid = nwsi->h2.h2n->highest_sid_opened + 2; in lws_h2_client_handshake()
2344 wsi->mux.my_sid = nwsi->h2.h2n->highest_sid_opened = sid; in lws_h2_client_handshake()