Lines Matching refs:session
124 static ssize_t null_send_callback(nghttp2_session *session, const uint8_t *data,
126 (void)session;
134 static ssize_t fail_send_callback(nghttp2_session *session, const uint8_t *data,
136 (void)session;
145 static ssize_t fixed_bytes_send_callback(nghttp2_session *session,
149 (void)session;
156 static ssize_t scripted_recv_callback(nghttp2_session *session, uint8_t *data,
160 (void)session;
172 static ssize_t eof_recv_callback(nghttp2_session *session, uint8_t *data,
174 (void)session;
183 static ssize_t accumulator_send_callback(nghttp2_session *session,
187 (void)session;
196 static int on_begin_frame_callback(nghttp2_session *session,
200 (void)session;
207 static int on_frame_recv_callback(nghttp2_session *session,
210 (void)session;
219 static int on_invalid_frame_recv_callback(nghttp2_session *session,
223 (void)session;
231 static int on_frame_send_callback(nghttp2_session *session,
234 (void)session;
241 static int on_frame_not_send_callback(nghttp2_session *session,
245 (void)session;
253 static int cancel_before_frame_send_callback(nghttp2_session *session,
257 (void)session;
264 static int on_data_chunk_recv_callback(nghttp2_session *session, uint8_t flags,
268 (void)session;
278 static int pause_on_data_chunk_recv_callback(nghttp2_session *session,
283 (void)session;
293 static ssize_t select_padding_callback(nghttp2_session *session,
297 (void)session;
303 nghttp2_session *session, uint8_t frame_type, int32_t stream_id,
306 (void)session;
318 nghttp2_session *session, uint8_t frame_type, int32_t stream_id,
321 (void)session;
333 nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t len,
337 (void)session;
355 nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t len,
357 (void)session;
368 static ssize_t fail_data_source_read_callback(nghttp2_session *session,
373 (void)session;
385 nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t len,
387 (void)session;
399 nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t len,
403 (void)session;
424 static int send_data_callback(nghttp2_session *session, nghttp2_frame *frame,
428 (void)session;
447 static ssize_t block_count_send_callback(nghttp2_session *session,
451 (void)session;
463 static int on_header_callback(nghttp2_session *session,
468 (void)session;
481 static int pause_on_header_callback(nghttp2_session *session,
486 on_header_callback(session, frame, name, namelen, value, valuelen, flags,
492 nghttp2_session *session, const nghttp2_frame *frame, const uint8_t *name,
495 on_header_callback(session, frame, name, namelen, value, valuelen, flags,
500 static int on_invalid_header_callback(nghttp2_session *session,
506 (void)session;
519 static int pause_on_invalid_header_callback(nghttp2_session *session,
525 on_invalid_header_callback(session, frame, name, namelen, value, valuelen,
530 static int reset_on_invalid_header_callback(nghttp2_session *session,
536 on_invalid_header_callback(session, frame, name, namelen, value, valuelen,
541 static int on_begin_headers_callback(nghttp2_session *session,
545 (void)session;
553 nghttp2_session *session, const nghttp2_frame *frame, void *user_data) {
554 on_begin_headers_callback(session, frame, user_data);
558 static ssize_t defer_data_source_read_callback(nghttp2_session *session,
563 (void)session;
574 static int on_stream_close_callback(nghttp2_session *session, int32_t stream_id,
577 (void)session;
587 static int fatal_error_on_stream_close_callback(nghttp2_session *session,
591 on_stream_close_callback(session, stream_id, error_code, user_data);
596 static ssize_t pack_extension_callback(nghttp2_session *session, uint8_t *buf,
600 (void)session;
609 static int on_extension_chunk_recv_callback(nghttp2_session *session,
615 (void)session;
623 static int cancel_on_extension_chunk_recv_callback(nghttp2_session *session,
628 (void)session;
637 static int unpack_extension_callback(nghttp2_session *session, void **payload,
642 (void)session;
650 static int cancel_unpack_extension_callback(nghttp2_session *session,
654 (void)session;
670 nghttp2_session *session;
696 nghttp2_session_server_new(&session, &callbacks, &user_data);
722 CU_ASSERT(0 == nghttp2_session_recv(session));
741 CU_ASSERT(0 == nghttp2_session_recv(session));
748 nghttp2_session_del(session);
751 nghttp2_session_server_new(&session, &callbacks, &user_data);
773 CU_ASSERT(0 == nghttp2_session_recv(session));
777 item = nghttp2_session_get_next_ob_item(session);
780 CU_ASSERT(0 == nghttp2_session_send(session));
783 nghttp2_session_del(session);
787 nghttp2_session *session;
808 nghttp2_session_server_new(&session, &callbacks, &user_data);
823 CU_ASSERT(0 == nghttp2_session_recv(session));
828 nghttp2_session_del(session);
832 nghttp2_session *session;
854 nghttp2_session_server_new(&session, &callbacks, &user_data);
867 CU_ASSERT(0 == nghttp2_session_recv(session));
868 CU_ASSERT(0 == nghttp2_session_send(session));
875 CU_ASSERT(0 == nghttp2_session_recv(session));
876 CU_ASSERT(0 == nghttp2_session_send(session));
884 nghttp2_session_del(session);
888 nghttp2_session *session;
895 nghttp2_session_client_new(&session, &callbacks, NULL);
896 CU_ASSERT(NGHTTP2_ERR_EOF == nghttp2_session_recv(session));
898 nghttp2_session_del(session);
902 nghttp2_session *session;
918 nghttp2_session_client_new(&session, &callbacks, &ud);
932 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
937 item = nghttp2_session_get_next_ob_item(session);
940 nghttp2_session_del(session);
942 nghttp2_session_client_new(&session, &callbacks, &ud);
945 stream = open_sent_stream2(session, 1, NGHTTP2_STREAM_CLOSING);
953 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
958 item = nghttp2_session_get_next_ob_item(session);
966 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
972 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
976 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
983 item = nghttp2_session_get_next_ob_item(session);
986 CU_ASSERT(0 == nghttp2_session_send(session));
996 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
999 item = nghttp2_session_get_next_ob_item(session);
1002 CU_ASSERT(0 == nghttp2_session_send(session));
1013 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
1018 item = nghttp2_session_get_next_ob_item(session);
1022 nghttp2_session_del(session);
1024 /* Check window_update_queued flag in both session and stream */
1025 nghttp2_session_server_new(&session, &callbacks, &ud);
1033 stream = open_recv_stream(session, 1);
1039 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
1045 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4095);
1048 /* Now 2 WINDOW_UPDATEs for session and stream should be queued. */
1050 CU_ASSERT(0 == session->recv_window_size);
1052 CU_ASSERT(1 == session->window_update_queued);
1060 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
1064 /* WINDOW_UPDATE is blocked for session and stream, so
1067 CU_ASSERT(32768 == session->recv_window_size);
1069 CU_ASSERT(1 == session->window_update_queued);
1074 recv_window_size, and queue WINDOW_UPDATEs for both session and
1076 CU_ASSERT(0 == nghttp2_session_send(session));
1080 CU_ASSERT(0 == session->recv_window_size);
1082 CU_ASSERT(0 == session->window_update_queued);
1084 nghttp2_session_del(session);
1088 nghttp2_session *session;
1107 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
1121 open_recv_stream(session, 1);
1125 rv = nghttp2_session_mem_recv(session, data, sendlen);
1129 CU_ASSERT(1 == session->consumed_size);
1132 nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 1, NGHTTP2_NO_ERROR);
1133 nghttp2_session_send(session);
1137 rv = nghttp2_session_mem_recv(session, data + sendlen,
1143 session->consumed_size);
1145 nghttp2_session_del(session);
1149 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
1153 stream = open_recv_stream(session, 1);
1156 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + hd.length);
1161 CU_ASSERT((int32_t)hd.length == session->consumed_size);
1163 nghttp2_session_del(session);
1165 /* Check window_update_queued flag in both session and stream */
1166 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
1168 stream = open_recv_stream(session, 1);
1178 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4096);
1185 rv = nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 4095);
1188 CU_ASSERT(65535 == session->recv_window_size);
1193 nghttp2_session_consume_connection(session, 32767);
1194 nghttp2_session_consume_connection(session, 32768);
1196 CU_ASSERT(32768 == session->recv_window_size);
1198 CU_ASSERT(1 == session->window_update_queued);
1205 CU_ASSERT(0 == nghttp2_session_send(session));
1206 CU_ASSERT(0 == session->recv_window_size);
1208 CU_ASSERT(0 == session->window_update_queued);
1213 nghttp2_session_consume_stream(session, 1, 32767);
1214 nghttp2_session_consume_stream(session, 1, 32768);
1216 CU_ASSERT(0 == session->recv_window_size);
1218 CU_ASSERT(0 == session->window_update_queued);
1223 CU_ASSERT(0 == nghttp2_session_send(session));
1224 CU_ASSERT(0 == session->recv_window_size);
1226 CU_ASSERT(0 == session->window_update_queued);
1230 nghttp2_session_del(session);
1235 nghttp2_session *session;
1259 nghttp2_session_server_new(&session, &callbacks, &ud);
1313 rv = nghttp2_session_mem_recv(session, data, datalen);
1319 nghttp2_session_del(session);
1322 nghttp2_session_server_new(&session, &callbacks, &ud);
1369 rv = nghttp2_session_mem_recv(session, data, datalen);
1376 nghttp2_session_del(session);
1379 nghttp2_session_server_new(&session, &callbacks, &ud);
1417 rv = nghttp2_session_mem_recv(session, data, datalen);
1422 nghttp2_session_get_next_ob_item(session)->frame.hd.type);
1426 nghttp2_session_del(session);
1430 nghttp2_session *session;
1451 nghttp2_session_server_new(&session, &callbacks, &ud);
1455 open_recv_stream(session, 1);
1479 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1484 stream = nghttp2_session_get_stream(session, 3);
1516 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1521 stream = nghttp2_session_get_stream(session, 5);
1525 item = nghttp2_session_get_next_ob_item(session);
1533 nghttp2_session_del(session);
1536 nghttp2_session_server_new(&session, &callbacks, &ud);
1561 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1566 stream = nghttp2_session_get_stream(session, 1);
1570 item = nghttp2_session_get_next_ob_item(session);
1579 nghttp2_session_del(session);
1583 nghttp2_session *session;
1599 nghttp2_session_server_new(&session, &callbacks, &ud);
1600 nghttp2_session_send(session);
1621 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1626 item = nghttp2_session_get_next_ob_item(session);
1632 nghttp2_session_del(session);
1635 nghttp2_session_client_new(&session, &callbacks, &ud);
1636 nghttp2_session_send(session);
1638 open_sent_stream(session, 1);
1656 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1661 item = nghttp2_session_get_next_ob_item(session);
1667 nghttp2_session_del(session);
1670 static int response_on_begin_frame_callback(nghttp2_session *session,
1680 rv = nghttp2_submit_response(session, hd->stream_id, resnv, ARRLEN(resnv),
1689 nghttp2_session *session;
1708 nghttp2_session_server_new(&session, &callbacks, NULL);
1728 rv = nghttp2_session_mem_recv(session, buf->pos, 9);
1732 rv = nghttp2_session_send(session);
1737 nghttp2_session_mem_recv(session, buf->pos + 9, nghttp2_buf_len(buf) - 9);
1741 stream = nghttp2_session_get_stream_raw(session, 1);
1746 nghttp2_session_del(session);
1751 nghttp2_session *session;
1772 nghttp2_session_server_new(&session, &callbacks, &ud);
1797 rv = nghttp2_session_mem_recv(session, buf->pos, NGHTTP2_FRAME_HDLEN);
1803 stream = nghttp2_session_get_stream(session, 1);
1807 rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 1,
1812 rv = nghttp2_session_mem_send(session, &data);
1816 stream = nghttp2_session_get_stream(session, 1);
1823 rv = nghttp2_session_mem_recv(session, buf->pos + NGHTTP2_FRAME_HDLEN,
1832 nghttp2_session_del(session);
1836 nghttp2_session *session;
1859 nghttp2_session_server_new(&session, &callbacks, NULL);
1864 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
1884 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1886 stream = nghttp2_session_get_stream(session, 1);
1892 nghttp2_session_del(session);
1898 nghttp2_session_client_new(&session, &callbacks, NULL);
1900 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
1902 open_sent_stream(session, 1);
1922 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1924 stream = nghttp2_session_get_stream(session, 2);
1932 nghttp2_session_del(session);
1937 nghttp2_session *session;
1955 nghttp2_session_server_new(&session, &callbacks, &ud);
1959 open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
1977 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
1984 nghttp2_session_del(session);
1988 nghttp2_session *session;
2005 nghttp2_session_server_new(&session, &callbacks, &ud);
2016 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf) - 1);
2020 item = nghttp2_session_get_next_ob_item(session);
2026 CU_ASSERT(0 == nghttp2_session_send(session));
2030 nghttp2_session_del(session);
2033 nghttp2_session_client_new(&session, &callbacks, &ud);
2036 open_sent_stream3(session, 1, NGHTTP2_STREAM_FLAG_NONE, &pri_spec_default,
2048 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf) - 1);
2052 item = nghttp2_session_get_next_ob_item(session);
2058 CU_ASSERT(0 == nghttp2_session_send(session));
2061 nghttp2_session_del(session);
2066 nghttp2_session *session;
2082 nghttp2_session_server_new(&session, &callbacks, &ud);
2087 rv = nghttp2_session_mem_recv(session, data, datalen);
2091 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
2093 nghttp2_session_del(session);
2097 nghttp2_session *session;
2115 nghttp2_session_server_new(&session, &callbacks, &ud);
2117 open_recv_stream(session, 1);
2122 rv = nghttp2_session_mem_recv(session, data, datalen);
2127 item = nghttp2_session_get_next_ob_item(session);
2131 nghttp2_session_del(session);
2135 nghttp2_session *session;
2153 nghttp2_session_client_new(&session, &callbacks, &ud);
2176 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
2181 CU_ASSERT(3000 == session->remote_settings.header_table_size);
2182 CU_ASSERT(16384 == session->remote_settings.initial_window_size);
2211 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
2216 CU_ASSERT(3001 == session->remote_settings.header_table_size);
2217 CU_ASSERT(16383 == session->remote_settings.initial_window_size);
2224 nghttp2_submit_request(session, NULL, &nv, 1, NULL, NULL);
2225 nghttp2_session_send(session);
2227 CU_ASSERT(0 < session->hd_deflater.ctx.hd_table.len);
2253 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
2258 CU_ASSERT(4096 == session->remote_settings.header_table_size);
2259 CU_ASSERT(16382 == session->remote_settings.initial_window_size);
2260 CU_ASSERT(0 == session->hd_deflater.ctx.hd_table.len);
2267 nghttp2_submit_request(session, NULL, &nv, 1, NULL, NULL);
2268 nghttp2_session_send(session);
2270 CU_ASSERT(0 < session->hd_deflater.ctx.hd_table.len);
2296 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
2301 CU_ASSERT(0 == session->remote_settings.header_table_size);
2302 CU_ASSERT(16381 == session->remote_settings.initial_window_size);
2303 CU_ASSERT(0 == session->hd_deflater.ctx.hd_table.len);
2308 nghttp2_session_del(session);
2312 nghttp2_session *session;
2324 nghttp2_session_server_new(&session, &callbacks, NULL);
2328 CU_ASSERT(sizeof(buf) == nghttp2_session_mem_recv(session, buf, sizeof(buf)));
2330 item = nghttp2_session_get_next_ob_item(session);
2335 nghttp2_session_del(session);
2339 nghttp2_session *session;
2368 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2371 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2379 nghttp2_session_del(session);
2387 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2390 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2395 nghttp2_session_del(session);
2403 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2406 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2411 nghttp2_session_del(session);
2420 nghttp2_session *session;
2444 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2456 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2464 nghttp2_session_del(session);
2469 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2480 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2485 nghttp2_session_del(session);
2490 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2501 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2506 nghttp2_session_del(session);
2511 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2513 open_sent_stream(session, 1);
2525 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2530 nghttp2_session_del(session);
2535 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2546 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2551 nghttp2_session_del(session);
2556 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2569 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2576 nghttp2_session_del(session);
2581 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2583 session->local_settings.max_frame_size = NGHTTP2_MAX_FRAME_SIZE_MIN - 1;
2596 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2601 nghttp2_session_del(session);
2606 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2618 rv = nghttp2_session_mem_recv(session, buf.pos, nghttp2_buf_len(&buf));
2623 nghttp2_session_del(session);
2630 nghttp2_session *session;
2655 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2664 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2673 nghttp2_session_del(session);
2677 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2688 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2694 nghttp2_session_del(session);
2699 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2708 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2714 nghttp2_session_del(session);
2718 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2727 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2733 nghttp2_session_del(session);
2737 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2745 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2751 nghttp2_session_del(session);
2755 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2763 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2770 nghttp2_session_del(session);
2777 nghttp2_session *session;
2788 uint8_t large_field_value[sizeof(session->iframe.raw_sbuf) + 1];
2811 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2813 session->pending_no_rfc7540_priorities = 1;
2820 open_recv_stream(session, 1);
2823 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2832 stream = nghttp2_session_get_stream_raw(session, 1);
2837 nghttp2_session_del(session);
2842 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2844 session->pending_no_rfc7540_priorities = 1;
2852 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2861 stream = nghttp2_session_get_stream_raw(session, 1);
2875 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2887 nghttp2_session_del(session);
2891 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2893 session->pending_no_rfc7540_priorities = 1;
2900 open_recv_stream(session, 1);
2903 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2909 stream = nghttp2_session_get_stream_raw(session, 1);
2913 nghttp2_session_del(session);
2917 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
2919 session->pending_no_rfc7540_priorities = 1;
2926 open_sent_stream(session, 1);
2929 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2935 item = nghttp2_session_get_next_ob_item(session);
2939 nghttp2_session_del(session);
2943 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
2945 session->pending_no_rfc7540_priorities = 1;
2946 session->local_settings.max_concurrent_streams = 100;
2956 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
2970 item = nghttp2_session_get_next_ob_item(session);
2974 nghttp2_session_del(session);
2980 nghttp2_session *session;
3011 nghttp2_session_server_new(&session, &callbacks, &user_data);
3013 session->opt_flags |= NGHTTP2_OPTMASK_NO_HTTP_MESSAGING;
3056 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3074 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3088 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3106 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3121 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3142 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3152 nghttp2_session_mem_recv(session, databuf.pos, nghttp2_buf_len(&databuf));
3158 rv = nghttp2_session_mem_recv(session, NULL, 0);
3164 nghttp2_session_del(session);
3168 nghttp2_session *session;
3185 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &user_data));
3198 (int32_t)session->next_stream_id, NGHTTP2_HCAT_REQUEST, NULL, nva, nvlen);
3200 session->next_stream_id += 2;
3202 CU_ASSERT(0 == nghttp2_session_add_item(session, item));
3203 CU_ASSERT(NULL != nghttp2_outbound_queue_top(&session->ob_syn));
3204 CU_ASSERT(0 == nghttp2_session_send(session));
3210 nghttp2_session_del(session);
3214 nghttp2_session *session;
3231 nghttp2_session_server_new(&session, &callbacks, &user_data);
3242 CU_ASSERT(0 == nghttp2_session_on_request_headers_received(session, &frame));
3244 stream = nghttp2_session_get_stream(session, stream_id);
3251 session->pending_local_max_concurrent_stream = 1;
3257 nghttp2_session_on_request_headers_received(session, &frame));
3259 CU_ASSERT(0 == (session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND));
3262 session->local_settings.max_concurrent_streams =
3272 nghttp2_session_on_request_headers_received(session, &frame));
3274 CU_ASSERT(0 == (session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND));
3285 nghttp2_session_on_request_headers_received(session, &frame));
3287 CU_ASSERT(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND);
3291 nghttp2_session_del(session);
3294 nghttp2_session_server_new(&session, &callbacks, &user_data);
3303 CU_ASSERT(0 == nghttp2_session_on_request_headers_received(session, &frame));
3309 nghttp2_session_del(session);
3312 nghttp2_session_client_new(&session, &callbacks, &user_data);
3320 nghttp2_session_on_request_headers_received(session, &frame));
3322 CU_ASSERT(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND);
3326 nghttp2_session_del(session);
3328 nghttp2_session_client_new(&session, &callbacks, &user_data);
3336 nghttp2_session_on_request_headers_received(session, &frame));
3338 CU_ASSERT(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND);
3342 nghttp2_session_del(session);
3344 nghttp2_session_client_new(&session, &callbacks, &user_data);
3346 session->next_stream_id = 5;
3347 session->last_sent_stream_id = 3;
3356 nghttp2_session_on_request_headers_received(session, &frame));
3358 CU_ASSERT(0 == (session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND));
3362 nghttp2_session_del(session);
3364 nghttp2_session_server_new(&session, &callbacks, &user_data);
3367 session->local_last_stream_id = 3;
3372 CU_ASSERT(0 == nghttp2_session_on_request_headers_received(session, &frame));
3380 session->goaway_flags |= NGHTTP2_GOAWAY_SENT;
3383 nghttp2_session_on_request_headers_received(session, &frame));
3385 CU_ASSERT(0 == (session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND));
3389 nghttp2_session_del(session);
3391 nghttp2_session_server_new(&session, &callbacks, &user_data);
3394 stream = open_recv_stream(session, 1);
3396 nghttp2_session_close_stream(session, 1, NGHTTP2_NO_ERROR);
3402 nghttp2_session_on_request_headers_received(session, &frame));
3403 CU_ASSERT(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND);
3407 nghttp2_session_del(session);
3411 nghttp2_session *session;
3423 nghttp2_session_client_new(&session, &callbacks, &user_data);
3424 stream = open_sent_stream2(session, 1, NGHTTP2_STREAM_OPENING);
3431 CU_ASSERT(0 == nghttp2_session_on_response_headers_received(session, &frame,
3437 nghttp2_session_del(session);
3441 nghttp2_session *session;
3453 nghttp2_session_client_new(&session, &callbacks, &user_data);
3454 stream = open_sent_stream2(session, 1, NGHTTP2_STREAM_OPENED);
3462 CU_ASSERT(0 == nghttp2_session_on_headers_received(session, &frame, stream));
3469 CU_ASSERT(0 == nghttp2_session_on_headers_received(session, &frame, stream));
3474 stream = open_sent_stream2(session, 3, NGHTTP2_STREAM_CLOSING);
3478 nghttp2_session_on_headers_received(session, &frame, stream));
3484 stream = open_recv_stream(session, 2);
3489 CU_ASSERT(0 == nghttp2_session_on_headers_received(session, &frame, stream));
3497 nghttp2_session_on_headers_received(session, &frame, stream));
3502 nghttp2_session_del(session);
3506 nghttp2_session *session;
3520 nghttp2_session_client_new(&session, &callbacks, &user_data);
3521 stream = open_recv_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
3525 stream's state is NGHTTP2_STREAM_RESERVED and session->server is
3531 CU_ASSERT(1 == session->num_incoming_reserved_streams);
3533 session, &frame, stream));
3535 CU_ASSERT(0 == session->num_incoming_reserved_streams);
3537 CU_ASSERT(1 == session->num_incoming_streams);
3542 session->pending_local_max_concurrent_stream = 1;
3543 stream = open_recv_stream2(session, 4, NGHTTP2_STREAM_RESERVED);
3546 nghttp2_session_on_push_response_headers_received(session, &frame,
3548 item = nghttp2_session_get_next_ob_item(session);
3551 CU_ASSERT(1 == session->num_incoming_streams);
3552 CU_ASSERT(1 == session->num_incoming_reserved_streams);
3554 CU_ASSERT(0 == nghttp2_session_send(session));
3555 CU_ASSERT(1 == session->num_incoming_streams);
3559 session->local_settings.max_concurrent_streams = 1;
3561 stream = open_recv_stream2(session, 6, NGHTTP2_STREAM_RESERVED);
3565 nghttp2_session_on_push_response_headers_received(session, &frame,
3567 item = nghttp2_session_get_next_ob_item(session);
3570 CU_ASSERT(1 == session->num_incoming_streams);
3571 CU_ASSERT(1 == session->num_incoming_reserved_streams);
3574 nghttp2_session_del(session);
3578 nghttp2_session *session;
3590 nghttp2_session_server_new(&session, &callbacks, &user_data);
3591 stream = open_recv_stream(session, 1);
3598 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
3602 stream = open_sent_stream(session, 2);
3603 dep_stream = open_recv_stream(session, 3);
3610 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
3617 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
3619 stream = nghttp2_session_get_stream_raw(session, frame.hd.stream_id);
3625 nghttp2_session_del(session);
3628 nghttp2_session_server_new(&session, &callbacks, &user_data);
3629 open_recv_stream(session, 1);
3635 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
3637 item = nghttp2_session_get_next_ob_item(session);
3642 nghttp2_session_del(session);
3645 nghttp2_session_server_new(&session, &callbacks, &user_data);
3651 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
3653 item = nghttp2_session_get_next_ob_item(session);
3658 nghttp2_session_del(session);
3662 nghttp2_session *session;
3667 nghttp2_session_server_new(&session, &callbacks, &user_data);
3668 open_recv_stream(session, 1);
3672 CU_ASSERT(0 == nghttp2_session_on_rst_stream_received(session, &frame));
3673 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 1));
3676 nghttp2_session_del(session);
3680 nghttp2_session *session;
3717 nghttp2_session_client_new(&session, &callbacks, &user_data);
3718 session->remote_settings.initial_window_size = 16 * 1024;
3720 stream1 = open_sent_stream(session, 1);
3721 stream2 = open_recv_stream(session, 2);
3731 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3732 CU_ASSERT(1000000009 == session->remote_settings.max_concurrent_streams);
3733 CU_ASSERT(64 * 1024 == session->remote_settings.initial_window_size);
3734 CU_ASSERT(1024 == session->remote_settings.header_table_size);
3735 CU_ASSERT(0 == session->remote_settings.enable_push);
3742 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3748 session, stream1->stream_id));
3750 session, stream2->stream_id));
3754 nghttp2_session_del(session);
3757 nghttp2_session_server_new(&session, &callbacks, NULL);
3760 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3761 item = nghttp2_session_get_next_ob_item(session);
3766 nghttp2_session_del(session);
3769 nghttp2_session_server_new(&session, &callbacks, NULL);
3772 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3773 item = nghttp2_session_get_next_ob_item(session);
3778 nghttp2_session_del(session);
3782 nghttp2_session_client_new(&session, &callbacks, NULL);
3784 nghttp2_submit_request(session, NULL, &nv, 1, NULL, NULL);
3786 nghttp2_session_send(session);
3788 CU_ASSERT(session->hd_deflater.ctx.hd_table.len > 0);
3799 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3801 CU_ASSERT(0 == session->hd_deflater.ctx.hd_table.len);
3802 CU_ASSERT(2048 == session->hd_deflater.ctx.hd_table_bufsize_max);
3803 CU_ASSERT(2048 == session->remote_settings.header_table_size);
3806 nghttp2_session_del(session);
3813 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
3814 CU_ASSERT(1000 == session->remote_settings.max_concurrent_streams);
3817 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3819 session->remote_settings.max_concurrent_streams);
3822 nghttp2_session_del(session);
3826 nghttp2_session_server_new(&session, &callbacks, NULL);
3834 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3836 item = nghttp2_session_get_next_ob_item(session);
3842 nghttp2_session_del(session);
3845 nghttp2_session_server_new(&session, &callbacks, NULL);
3847 stream1 = open_recv_stream(session, 1);
3853 CU_ASSERT(0 == nghttp2_session_on_window_update_received(session, &frame));
3865 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3869 item = nghttp2_session_get_next_ob_item(session);
3874 item = nghttp2_outbound_queue_top(&session->ob_reg);
3880 nghttp2_session_del(session);
3884 nghttp2_session_client_new(&session, &callbacks, NULL);
3886 session->remote_settings.enable_connect_protocol = 1;
3894 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3898 item = nghttp2_session_get_next_ob_item(session);
3903 nghttp2_session_del(session);
3911 nghttp2_session_server_new2(&session, &callbacks, NULL, option);
3916 rv = nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1);
3920 rv = nghttp2_session_send(session);
3924 stream = open_recv_stream(session, 1);
3934 nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + hd.length);
3938 rv = nghttp2_session_consume(session, 1, hd.length);
3946 rv = nghttp2_session_on_settings_received(session, &frame, 0);
3953 item = nghttp2_session_get_next_ob_item(session);
3960 nghttp2_session_del(session);
3965 nghttp2_session_client_new(&session, &callbacks, NULL);
3967 session->remote_settings.no_rfc7540_priorities = 1;
3975 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
3979 item = nghttp2_session_get_next_ob_item(session);
3984 nghttp2_session_del(session);
3988 nghttp2_session *session;
4006 nghttp2_session_client_new(&session, &callbacks, &user_data);
4008 stream = open_sent_stream(session, 1);
4016 CU_ASSERT(0 == nghttp2_session_on_push_promise_received(session, &frame));
4019 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4020 promised_stream = nghttp2_session_get_stream(session, 2);
4022 CU_ASSERT(2 == session->last_recv_stream_id);
4031 nghttp2_session_on_push_promise_received(session, &frame));
4035 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4036 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 4));
4037 item = nghttp2_session_get_next_ob_item(session);
4040 CU_ASSERT(0 == nghttp2_session_send(session));
4041 CU_ASSERT(4 == session->last_recv_stream_id);
4043 nghttp2_session_del(session);
4045 nghttp2_session_client_new(&session, &callbacks, &user_data);
4047 stream = open_sent_stream(session, 1);
4056 nghttp2_session_on_push_promise_received(session, &frame));
4059 CU_ASSERT(0 == session->num_incoming_reserved_streams);
4060 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 6));
4061 item = nghttp2_session_get_next_ob_item(session);
4065 CU_ASSERT(0 == nghttp2_session_send(session));
4074 nghttp2_session_on_push_promise_received(session, &frame));
4077 CU_ASSERT(0 == session->num_incoming_reserved_streams);
4078 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 8));
4079 item = nghttp2_session_get_next_ob_item(session);
4083 CU_ASSERT(0 == nghttp2_session_send(session));
4085 nghttp2_session_del(session);
4087 nghttp2_session_client_new(&session, &callbacks, &user_data);
4089 stream = open_sent_stream(session, 1);
4097 CU_ASSERT(0 == nghttp2_session_on_push_promise_received(session, &frame));
4100 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4101 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 2));
4106 nghttp2_session_on_push_promise_received(session, &frame));
4109 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4110 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 8));
4111 item = nghttp2_session_get_next_ob_item(session);
4114 CU_ASSERT(0 == nghttp2_session_send(session));
4122 nghttp2_session_on_push_promise_received(session, &frame));
4125 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4126 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 10));
4127 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
4130 nghttp2_session_del(session);
4132 nghttp2_session_client_new(&session, &callbacks, &user_data);
4134 open_recv_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
4143 nghttp2_session_on_push_promise_received(session, &frame));
4147 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4150 nghttp2_session_del(session);
4153 nghttp2_session_client_new(&session, &callbacks, &user_data);
4155 open_sent_stream(session, 1);
4157 session->local_settings.enable_push = 0;
4165 nghttp2_session_on_push_promise_received(session, &frame));
4169 CU_ASSERT(0 == session->num_incoming_reserved_streams);
4172 nghttp2_session_del(session);
4175 nghttp2_session_client_new(&session, &callbacks, &user_data);
4177 open_sent_stream(session, 1);
4185 CU_ASSERT(0 == nghttp2_session_on_push_promise_received(session, &frame));
4191 nghttp2_session_del(session);
4195 nghttp2_session_client_new(&session, &callbacks, &user_data);
4197 open_sent_stream(session, 1);
4200 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
4206 nghttp2_session_on_push_promise_received(session, &frame));
4208 CU_ASSERT(0 == session->num_incoming_reserved_streams);
4211 nghttp2_session_del(session);
4214 nghttp2_session_client_new(&session, &callbacks, &user_data);
4215 session->max_incoming_reserved_streams = 1;
4217 open_sent_stream(session, 1);
4218 open_recv_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
4220 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4226 nghttp2_session_on_push_promise_received(session, &frame));
4228 CU_ASSERT(1 == session->num_incoming_reserved_streams);
4230 item = nghttp2_session_get_next_ob_item(session);
4236 nghttp2_session_del(session);
4240 nghttp2_session *session;
4255 nghttp2_session_client_new(&session, &callbacks, &user_data);
4258 CU_ASSERT(0 == nghttp2_session_on_ping_received(session, &frame));
4263 CU_ASSERT(NULL == nghttp2_outbound_queue_top(&session->ob_urgent));
4268 CU_ASSERT(0 == nghttp2_session_on_ping_received(session, &frame));
4270 top = nghttp2_outbound_queue_top(&session->ob_urgent);
4276 nghttp2_session_del(session);
4282 nghttp2_session_server_new2(&session, &callbacks, &user_data, option);
4287 CU_ASSERT(0 == nghttp2_session_on_ping_received(session, &frame));
4289 CU_ASSERT(NULL == nghttp2_outbound_queue_top(&session->ob_urgent));
4292 nghttp2_session_del(session);
4297 nghttp2_session *session;
4315 nghttp2_session_client_new(&session, &callbacks, &user_data);
4318 if (nghttp2_session_is_my_stream_id(session, i)) {
4319 open_sent_stream(session, i);
4321 open_recv_stream(session, i);
4329 CU_ASSERT(0 == nghttp2_session_on_goaway_received(session, &frame));
4332 CU_ASSERT(3 == session->remote_last_stream_id);
4336 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 1));
4337 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 2));
4338 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 3));
4339 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 4));
4340 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 5));
4341 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 6));
4342 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 7));
4345 nghttp2_session_del(session);
4354 nghttp2_session_client_new(&session, &callbacks, &user_data);
4358 CU_ASSERT(0 == nghttp2_session_on_goaway_received(session, &frame));
4360 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
4362 datalen = nghttp2_session_mem_send(session, &data);
4368 nghttp2_session_del(session);
4372 nghttp2_session *session;
4388 nghttp2_session_client_new(&session, &callbacks, &user_data);
4390 stream = open_sent_stream(session, 1);
4399 CU_ASSERT(0 == nghttp2_session_on_window_update_received(session, &frame));
4406 CU_ASSERT(0 == nghttp2_session_on_window_update_received(session, &frame));
4416 open_recv_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
4421 CU_ASSERT(!(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND));
4422 CU_ASSERT(0 == nghttp2_session_on_window_update_received(session, &frame));
4423 CU_ASSERT(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND);
4427 nghttp2_session_del(session);
4430 nghttp2_session_server_new(&session, &callbacks, &user_data);
4432 stream = open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
4437 CU_ASSERT(0 == nghttp2_session_on_window_update_received(session, &frame));
4438 CU_ASSERT(!(session->goaway_flags & NGHTTP2_GOAWAY_TERM_ON_SEND));
4444 nghttp2_session_del(session);
4448 nghttp2_session *session;
4457 nghttp2_session_client_new(&session, &callbacks, &user_data);
4458 stream = open_recv_stream(session, 2);
4462 CU_ASSERT(0 == nghttp2_session_on_data_received(session, &frame));
4467 CU_ASSERT(0 == nghttp2_session_on_data_received(session, &frame));
4471 open_sent_stream2(session, 1, NGHTTP2_STREAM_CLOSING);
4476 CU_ASSERT(0 == nghttp2_session_on_data_received(session, &frame));
4477 CU_ASSERT(NULL == nghttp2_outbound_queue_top(&session->ob_reg));
4484 CU_ASSERT(0 == nghttp2_session_on_data_received(session, &frame));
4485 top = nghttp2_outbound_queue_top(&session->ob_reg);
4489 nghttp2_session_del(session);
4493 nghttp2_session *session;
4505 nghttp2_session_server_new(&session, &callbacks, NULL);
4508 stream = open_recv_stream(session, 1);
4512 nghttp2_session_mem_recv(session, buf, sizeof(buf)));
4514 item = nghttp2_session_get_next_ob_item(session);
4519 nghttp2_session_del(session);
4521 nghttp2_session_server_new(&session, &callbacks, NULL);
4524 stream = open_recv_stream(session, 1);
4526 nghttp2_session_close_stream(session, 1, NGHTTP2_NO_ERROR);
4529 nghttp2_session_mem_recv(session, buf, sizeof(buf)));
4531 item = nghttp2_session_get_next_ob_item(session);
4536 nghttp2_session_del(session);
4540 nghttp2_session *session;
4555 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
4557 frame.ext.payload = &session->iframe.ext_frame_payload;
4565 rv = nghttp2_session_on_altsvc_received(session, &frame);
4570 nghttp2_session_del(session);
4573 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
4575 frame.ext.payload = &session->iframe.ext_frame_payload;
4581 rv = nghttp2_session_on_altsvc_received(session, &frame);
4586 nghttp2_session_del(session);
4589 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
4591 frame.ext.payload = &session->iframe.ext_frame_payload;
4593 open_sent_stream(session, 1);
4599 rv = nghttp2_session_on_altsvc_received(session, &frame);
4604 nghttp2_session_del(session);
4607 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
4609 frame.ext.payload = &session->iframe.ext_frame_payload;
4611 open_sent_stream(session, 1);
4617 rv = nghttp2_session_on_altsvc_received(session, &frame);
4622 nghttp2_session_del(session);
4625 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
4627 frame.ext.payload = &session->iframe.ext_frame_payload;
4633 rv = nghttp2_session_on_altsvc_received(session, &frame);
4638 nghttp2_session_del(session);
4644 nghttp2_session *session;
4656 nghttp2_session_client_new(&session, &callbacks, NULL);
4665 (int32_t)session->next_stream_id,
4667 session->next_stream_id += 2;
4669 nghttp2_session_add_item(session, item);
4670 CU_ASSERT(0 == nghttp2_session_send(session));
4671 stream = nghttp2_session_get_stream(session, 1);
4674 nghttp2_session_del(session);
4678 nghttp2_session *session;
4690 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, NULL));
4691 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
4701 nghttp2_session_add_item(session, item);
4702 CU_ASSERT(0 == nghttp2_session_send(session));
4703 stream = nghttp2_session_get_stream(session, 1);
4706 nghttp2_session_del(session);
4710 nghttp2_session *session;
4739 nghttp2_session_client_new(&session, &callbacks, &ud);
4750 (int32_t)session->next_stream_id,
4753 session->next_stream_id += 2;
4755 nghttp2_session_add_item(session, item);
4759 CU_ASSERT(0 == nghttp2_session_send(session));
4768 nghttp2_session_del(session);
4772 nghttp2_session *session;
4784 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, NULL));
4785 open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
4795 nghttp2_session_add_item(session, item);
4796 CU_ASSERT(0 == session->num_outgoing_streams);
4797 CU_ASSERT(0 == nghttp2_session_send(session));
4798 CU_ASSERT(1 == session->num_outgoing_streams);
4799 stream = nghttp2_session_get_stream(session, 2);
4802 nghttp2_session_del(session);
4806 nghttp2_session *session;
4817 nghttp2_session_client_new(&session, &callbacks, &user_data);
4818 open_sent_stream(session, 1);
4827 nghttp2_session_add_item(session, item);
4828 CU_ASSERT(0 == nghttp2_session_send(session));
4830 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 1));
4832 nghttp2_session_del(session);
4836 nghttp2_session *session;
4850 nghttp2_session_server_new(&session, &callbacks, &ud);
4851 open_recv_stream(session, 1);
4861 (int32_t)session->next_stream_id, NULL, 0);
4863 session->next_stream_id += 2;
4865 nghttp2_session_add_item(session, item);
4867 CU_ASSERT(0 == nghttp2_session_send(session));
4868 stream = nghttp2_session_get_stream(session, 2);
4877 nghttp2_session_on_settings_received(session, frame, 1);
4889 nghttp2_session_add_item(session, item);
4892 CU_ASSERT(0 == nghttp2_session_send(session));
4898 nghttp2_session_del(session);
4901 nghttp2_session_client_new(&session, &callbacks, &ud);
4902 open_sent_stream(session, 1);
4911 nghttp2_session_add_item(session, item);
4913 CU_ASSERT(0 == nghttp2_session_send(session));
4914 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 3));
4916 nghttp2_session_del(session);
4920 nghttp2_session *session;
4923 nghttp2_session_server_new(&session, &callbacks, NULL);
4925 CU_ASSERT(0 == nghttp2_session_is_my_stream_id(session, 0));
4926 CU_ASSERT(0 == nghttp2_session_is_my_stream_id(session, 1));
4927 CU_ASSERT(1 == nghttp2_session_is_my_stream_id(session, 2));
4929 nghttp2_session_del(session);
4931 nghttp2_session_client_new(&session, &callbacks, NULL);
4933 CU_ASSERT(0 == nghttp2_session_is_my_stream_id(session, 0));
4934 CU_ASSERT(1 == nghttp2_session_is_my_stream_id(session, 1));
4935 CU_ASSERT(0 == nghttp2_session_is_my_stream_id(session, 2));
4937 nghttp2_session_del(session);
4941 nghttp2_session *session;
4967 nghttp2_session_client_new(&session, &callbacks, NULL);
4968 CU_ASSERT(0 == nghttp2_session_upgrade2(session, settings_payload,
4970 CU_ASSERT(1 == session->last_sent_stream_id);
4971 stream = nghttp2_session_get_stream(session, 1);
4975 item = nghttp2_session_get_next_ob_item(session);
4987 nghttp2_session_upgrade2(session, settings_payload,
4989 nghttp2_session_del(session);
4992 nghttp2_session_client_new(&session, &callbacks, NULL);
4994 CU_ASSERT(0 == nghttp2_session_upgrade2(session, settings_payload,
4997 stream = nghttp2_session_get_stream(session, 1);
5009 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
5015 nghttp2_session_del(session);
5020 nghttp2_session_server_new(&session, &callbacks, NULL);
5021 CU_ASSERT(0 == nghttp2_session_upgrade2(session, settings_payload,
5023 CU_ASSERT(1 == session->last_recv_stream_id);
5024 stream = nghttp2_session_get_stream(session, 1);
5028 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
5029 CU_ASSERT(1 == session->remote_settings.max_concurrent_streams);
5030 CU_ASSERT(4095 == session->remote_settings.initial_window_size);
5033 nghttp2_session_upgrade2(session, settings_payload,
5035 nghttp2_session_del(session);
5041 nghttp2_session_client_new(&session, &callbacks, NULL);
5042 CU_ASSERT(0 == nghttp2_session_upgrade2(session, settings_payload,
5044 nghttp2_session_del(session);
5049 nghttp2_session *session;
5059 nghttp2_session_server_new(&session, &callbacks, NULL);
5061 stream = open_recv_stream(session, 1);
5065 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5069 CU_ASSERT(&session->root == stream->dep_prev);
5075 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5081 dep_stream = nghttp2_session_get_stream_raw(session, 3);
5085 dep_stream = open_recv_stream(session, 3);
5090 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5099 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5110 rv = nghttp2_session_reprioritize_stream(session, dep_stream, &pri_spec);
5118 session->last_recv_stream_id = 9;
5122 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5127 nghttp2_session_del(session);
5129 nghttp2_session_server_new(&session, &callbacks, NULL);
5133 stream = open_recv_stream(session, 1);
5134 stream = open_recv_stream_with_dep(session, 3, stream);
5135 stream = open_recv_stream_with_dep(session, 5, stream);
5136 stream = open_recv_stream_with_dep(session, 7, stream);
5137 open_recv_stream_with_dep(session, 9, stream);
5141 stream = nghttp2_session_get_stream(session, 3);
5142 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5147 stream = nghttp2_session_get_stream(session, 7);
5151 stream = nghttp2_session_get_stream(session, 9);
5155 stream = nghttp2_session_get_stream(session, 5);
5159 nghttp2_session_del(session);
5161 nghttp2_session_server_new(&session, &callbacks, NULL);
5165 stream = open_recv_stream(session, 1);
5166 stream = open_recv_stream_with_dep(session, 3, stream);
5167 stream = open_recv_stream_with_dep(session, 5, stream);
5168 stream = open_recv_stream_with_dep(session, 7, stream);
5169 open_recv_stream_with_dep(session, 9, stream);
5173 stream = nghttp2_session_get_stream(session, 3);
5174 rv = nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5179 stream = nghttp2_session_get_stream(session, 7);
5183 stream = nghttp2_session_get_stream(session, 9);
5187 stream = nghttp2_session_get_stream(session, 5);
5191 nghttp2_session_del(session);
5195 nghttp2_session *session;
5203 nghttp2_session_server_new(&session, &callbacks, NULL);
5205 stream = open_recv_stream(session, 1);
5207 session->pending_local_max_concurrent_stream = 1;
5211 nghttp2_session_reprioritize_stream(session, stream, &pri_spec);
5218 stream = nghttp2_session_get_stream_raw(session, 101);
5222 nghttp2_session_del(session);
5226 nghttp2_session *session;
5241 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5242 aob = &session->aob;
5245 open_sent_stream(session, 1);
5248 0 == nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM, 1, &data_prd));
5251 CU_ASSERT(0 == nghttp2_session_send(session));
5262 nghttp2_session_del(session);
5266 nghttp2_session *session;
5283 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5284 aob = &session->aob;
5287 open_sent_stream(session, 1);
5290 0 == nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM, 1, &data_prd));
5293 CU_ASSERT(0 == nghttp2_session_send(session));
5305 nghttp2_session_del(session);
5308 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5312 session->remote_settings.max_frame_size = NGHTTP2_MAX_FRAME_SIZE_MAX;
5314 open_sent_stream(session, 1);
5317 0 == nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM, 1, &data_prd));
5320 CU_ASSERT(0 == nghttp2_session_send(session));
5322 aob = &session->aob;
5342 nghttp2_session_del(session);
5346 nghttp2_session *session;
5362 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5363 aob = &session->aob;
5366 open_sent_stream(session, 1);
5369 0 == nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM, 1, &data_prd));
5372 CU_ASSERT(0 == nghttp2_session_send(session));
5384 nghttp2_session_del(session);
5388 nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t len,
5390 (void)session;
5400 static int submit_data_twice_on_frame_send_callback(nghttp2_session *session,
5413 rv = nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM,
5422 nghttp2_session *session;
5437 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5439 open_sent_stream(session, 1);
5441 CU_ASSERT(0 == nghttp2_submit_data(session, NGHTTP2_FLAG_NONE, 1, &data_prd));
5442 CU_ASSERT(0 == nghttp2_session_send(session));
5447 nghttp2_session_del(session);
5451 nghttp2_session *session;
5465 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5466 CU_ASSERT(1 == nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv),
5468 item = nghttp2_session_get_next_ob_item(session);
5472 CU_ASSERT(0 == nghttp2_session_send(session));
5475 nghttp2_session_del(session);
5477 /* nghttp2_submit_request() with server session is error */
5478 nghttp2_session_server_new(&session, &callbacks, NULL);
5480 CU_ASSERT(NGHTTP2_ERR_PROTO == nghttp2_submit_request(session, NULL, reqnv,
5484 nghttp2_session_del(session);
5488 nghttp2_session *session;
5509 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5512 CU_ASSERT(1 == nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv),
5514 item = nghttp2_session_get_next_ob_item(session);
5520 CU_ASSERT(0 == nghttp2_session_send(session));
5535 nghttp2_priority_spec_init(&pri_spec, (int32_t)session->next_stream_id, 16,
5539 nghttp2_submit_request(session, &pri_spec, reqnv, ARRLEN(reqnv),
5542 nghttp2_session_del(session);
5546 nghttp2_session *session;
5560 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
5561 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
5562 CU_ASSERT(0 == nghttp2_submit_response(session, 1, resnv, ARRLEN(resnv),
5564 item = nghttp2_session_get_next_ob_item(session);
5568 CU_ASSERT(0 == nghttp2_session_send(session));
5571 nghttp2_session_del(session);
5574 nghttp2_session_client_new(&session, &callbacks, NULL);
5576 /* Calling nghttp2_submit_response() with client session is error */
5578 nghttp2_submit_response(session, 1, resnv, ARRLEN(resnv), NULL));
5582 nghttp2_submit_response(session, 0, resnv, ARRLEN(resnv), NULL));
5584 nghttp2_session_del(session);
5588 nghttp2_session *session;
5608 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
5611 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
5612 CU_ASSERT(0 == nghttp2_submit_response(session, 1, resnv, ARRLEN(resnv),
5614 item = nghttp2_session_get_next_ob_item(session);
5620 CU_ASSERT(0 == nghttp2_session_send(session));
5633 nghttp2_session_del(session);
5637 nghttp2_session *session;
5645 nghttp2_session_server_new(&session, &callbacks, &ud);
5647 open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
5649 session->goaway_flags |= NGHTTP2_GOAWAY_RECV;
5652 nghttp2_submit_response(session, 2, resnv, ARRLEN(resnv), NULL));
5656 CU_ASSERT(0 == nghttp2_session_send(session));
5659 nghttp2_session_del(session);
5663 nghttp2_session *session;
5684 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
5687 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
5688 CU_ASSERT(0 == nghttp2_submit_response(session, 1, resnv, ARRLEN(resnv),
5690 CU_ASSERT(0 == nghttp2_session_send(session));
5693 nghttp2_submit_trailer(session, 1, trailernv, ARRLEN(trailernv)));
5695 session->callbacks.send_callback = accumulator_send_callback;
5697 item = nghttp2_session_get_next_ob_item(session);
5702 CU_ASSERT(0 == nghttp2_session_send(session));
5715 nghttp2_session_del(session);
5718 nghttp2_session_server_new(&session, &callbacks, NULL);
5719 open_recv_stream(session, 1);
5722 nghttp2_submit_trailer(session, 0, trailernv, ARRLEN(trailernv)));
5725 nghttp2_submit_trailer(session, -1, trailernv, ARRLEN(trailernv)));
5727 nghttp2_session_del(session);
5731 nghttp2_session *session;
5739 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, NULL));
5740 CU_ASSERT(1 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, -1,
5742 item = nghttp2_session_get_next_ob_item(session);
5750 nghttp2_session_del(session);
5754 nghttp2_session *session;
5767 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
5768 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 1,
5770 item = nghttp2_session_get_next_ob_item(session);
5781 CU_ASSERT(0 == nghttp2_session_send(session));
5784 stream = open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
5786 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 1,
5788 CU_ASSERT(0 == nghttp2_session_send(session));
5793 nghttp2_session_del(session);
5797 nghttp2_session *session;
5807 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
5808 stream = open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
5809 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, 2, NULL,
5814 CU_ASSERT(0 == nghttp2_session_send(session));
5820 nghttp2_session_del(session);
5824 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5825 open_recv_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
5826 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, 2, NULL,
5831 CU_ASSERT(0 == nghttp2_session_send(session));
5834 nghttp2_session_del(session);
5838 nghttp2_session *session;
5861 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5864 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 1,
5866 item = nghttp2_session_get_next_ob_item(session);
5877 CU_ASSERT(0 == nghttp2_session_send(session));
5880 stream = open_sent_stream(session, 1);
5882 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 1,
5884 CU_ASSERT(0 == nghttp2_session_send(session));
5907 nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, 3, &pri_spec,
5910 session->next_stream_id = 5;
5914 nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, -1, &pri_spec,
5917 nghttp2_session_del(session);
5920 nghttp2_session_server_new(&session, &callbacks, NULL);
5923 session is error */
5925 nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, -1, NULL, reqnv,
5930 nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, 0, NULL, resnv,
5933 nghttp2_session_del(session);
5937 nghttp2_session *session;
5959 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, &ud));
5960 CU_ASSERT(1 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, -1,
5962 item = nghttp2_session_get_next_ob_item(session);
5969 CU_ASSERT(0 == nghttp2_session_send(session));
5972 nghttp2_session_del(session);
5976 nghttp2_session *session;
6003 CU_ASSERT(0 == nghttp2_session_client_new2(&session, &callbacks, &ud, opt));
6004 CU_ASSERT(1 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, -1,
6006 item = nghttp2_session_get_next_ob_item(session);
6013 CU_ASSERT(0 == nghttp2_session_send(session));
6016 nghttp2_session_del(session);
6021 nghttp2_session *session;
6031 nghttp2_session_client_new(&session, &callbacks, &ud);
6032 stream = open_sent_stream(session, 1);
6038 nghttp2_submit_priority(session, NGHTTP2_FLAG_NONE, 1, &pri_spec));
6039 CU_ASSERT(0 == nghttp2_session_send(session));
6044 nghttp2_submit_priority(session, NGHTTP2_FLAG_NONE, 3, &pri_spec));
6047 CU_ASSERT(0 == nghttp2_session_send(session));
6050 nghttp2_session_del(session);
6054 nghttp2_session *session;
6090 nghttp2_session_server_new(&session, &callbacks, &ud);
6093 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 7));
6097 session->local_settings.max_concurrent_streams);
6099 session->local_settings.initial_window_size);
6102 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 6));
6104 item = nghttp2_session_get_next_ob_item(session);
6122 CU_ASSERT(0 == nghttp2_session_send(session));
6125 CU_ASSERT(50 == session->pending_local_max_concurrent_stream);
6131 session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS));
6134 session, NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE));
6137 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &ack_frame, 0));
6140 CU_ASSERT(16 * 1024 == session->local_settings.initial_window_size);
6141 CU_ASSERT(111 == session->hd_inflater.ctx.hd_table_bufsize_max);
6142 CU_ASSERT(111 == session->hd_inflater.min_hd_table_bufsize_max);
6143 CU_ASSERT(50 == session->local_settings.max_concurrent_streams);
6146 session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS));
6148 session, NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE));
6151 CU_ASSERT(50 == session->pending_local_max_concurrent_stream);
6153 nghttp2_session_del(session);
6157 nghttp2_session_server_new(&session, &callbacks, &ud);
6165 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 2));
6167 nghttp2_session_del(session);
6171 nghttp2_session_server_new(&session, &callbacks, &ud);
6176 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1));
6182 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1));
6184 nghttp2_session_del(session);
6188 nghttp2_session *session;
6206 nghttp2_session_server_new(&session, &callbacks, NULL);
6208 stream = open_recv_stream(session, 1);
6212 open_recv_stream(session, 3);
6214 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1));
6215 CU_ASSERT(0 == nghttp2_session_send(session));
6216 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &ack_frame, 0));
6218 stream = nghttp2_session_get_stream(session, 1);
6222 stream = nghttp2_session_get_stream(session, 3);
6225 item = nghttp2_session_get_next_ob_item(session);
6229 nghttp2_session_del(session);
6235 nghttp2_session_server_new2(&session, &callbacks, NULL, option);
6239 stream = open_recv_stream(session, 1);
6243 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1));
6244 CU_ASSERT(0 == nghttp2_session_send(session));
6245 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &ack_frame, 0));
6247 stream = nghttp2_session_get_stream(session, 1);
6253 CU_ASSERT(0 == nghttp2_session_get_stream_local_window_size(session, 1));
6255 nghttp2_session_del(session);
6259 nghttp2_session_server_new(&session, &callbacks, NULL);
6260 stream = open_recv_stream(session, 1);
6263 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1));
6264 CU_ASSERT(0 == nghttp2_session_send(session));
6265 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &ack_frame, 0));
6267 item = nghttp2_session_get_next_ob_item(session);
6271 nghttp2_session_del(session);
6276 nghttp2_session *session;
6285 nghttp2_session_client_new(&session, &callbacks, NULL);
6294 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 2));
6296 inflight_settings = session->inflight_settings_head;
6305 CU_ASSERT(100 == session->pending_local_max_concurrent_stream);
6306 CU_ASSERT(0 == session->pending_enable_push);
6312 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 1));
6314 inflight_settings = session->inflight_settings_head->next;
6323 CU_ASSERT(99 == session->pending_local_max_concurrent_stream);
6324 CU_ASSERT(0 == session->pending_enable_push);
6329 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
6331 inflight_settings = session->inflight_settings_head;
6341 CU_ASSERT(100 == session->local_settings.max_concurrent_streams);
6344 CU_ASSERT(0 == nghttp2_session_on_settings_received(session, &frame, 0));
6346 CU_ASSERT(NULL == session->inflight_settings_head);
6347 CU_ASSERT(99 == session->local_settings.max_concurrent_streams);
6349 nghttp2_session_del(session);
6353 nghttp2_session *session;
6363 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
6364 open_recv_stream(session, 1);
6365 CU_ASSERT(2 == nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 1,
6368 stream = nghttp2_session_get_stream(session, 2);
6372 CU_ASSERT(&ud == nghttp2_session_get_stream_user_data(session, 2));
6377 CU_ASSERT(0 == nghttp2_session_send(session));
6381 stream = nghttp2_session_get_stream(session, 2);
6384 CU_ASSERT(&ud == nghttp2_session_get_stream_user_data(session, 2));
6388 nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 3, reqnv,
6393 nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 0, reqnv,
6396 nghttp2_session_del(session);
6400 nghttp2_session *session;
6409 nghttp2_session_client_new(&session, &callbacks, &ud);
6410 stream = open_recv_stream(session, 2);
6414 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2, 1024));
6415 item = nghttp2_session_get_next_ob_item(session);
6418 CU_ASSERT(0 == nghttp2_session_send(session));
6422 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2, 4096));
6423 item = nghttp2_session_get_next_ob_item(session);
6426 CU_ASSERT(0 == nghttp2_session_send(session));
6430 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2, 4096));
6431 item = nghttp2_session_get_next_ob_item(session);
6434 CU_ASSERT(0 == nghttp2_session_send(session));
6438 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2, 0));
6442 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 4, 4096));
6444 nghttp2_session_del(session);
6448 nghttp2_session *session;
6456 nghttp2_session_client_new(&session, &callbacks, NULL);
6457 stream = open_recv_stream(session, 2);
6460 CU_ASSERT(0 == nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2,
6464 item = nghttp2_session_get_next_ob_item(session);
6468 CU_ASSERT(0 == nghttp2_session_send(session));
6472 CU_ASSERT(0 == nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2,
6478 item = nghttp2_session_get_next_ob_item(session);
6483 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2, 16384));
6487 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
6490 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 2,
6493 CU_ASSERT(0 == nghttp2_session_send(session));
6496 session->recv_window_size = 4096;
6497 CU_ASSERT(0 == nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0,
6498 session->recv_window_size + 1));
6500 session->local_window_size);
6501 CU_ASSERT(0 == session->recv_window_size);
6502 item = nghttp2_session_get_next_ob_item(session);
6506 CU_ASSERT(0 == nghttp2_session_send(session));
6509 session->recv_window_size = 4096;
6510 CU_ASSERT(0 == nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0,
6511 -session->local_window_size / 2));
6512 CU_ASSERT(32768 == session->local_window_size);
6513 CU_ASSERT(-28672 == session->recv_window_size);
6514 CU_ASSERT(32768 == session->recv_reduction);
6515 item = nghttp2_session_get_next_ob_item(session);
6520 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0, 16384));
6521 CU_ASSERT(49152 == session->local_window_size);
6522 CU_ASSERT(-12288 == session->recv_window_size);
6523 CU_ASSERT(16384 == session->recv_reduction);
6524 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
6527 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0,
6530 nghttp2_session_del(session);
6534 nghttp2_session *session;
6543 nghttp2_session_server_new(&session, &callbacks, &ud);
6545 CU_ASSERT(0 == nghttp2_submit_shutdown_notice(session));
6549 nghttp2_session_send(session);
6553 CU_ASSERT((1u << 31) - 1 == session->local_last_stream_id);
6557 CU_ASSERT(0 == nghttp2_session_terminate_session(session, NGHTTP2_NO_ERROR));
6561 nghttp2_session_send(session);
6565 CU_ASSERT(0 == session->local_last_stream_id);
6567 CU_ASSERT(0 == nghttp2_submit_shutdown_notice(session));
6572 nghttp2_session_send(session);
6577 nghttp2_session_del(session);
6579 /* Using nghttp2_submit_shutdown_notice() with client side session
6581 nghttp2_session_client_new(&session, &callbacks, NULL);
6584 nghttp2_submit_shutdown_notice(session));
6586 nghttp2_session_del(session);
6590 nghttp2_session *session;
6600 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, NULL));
6603 CU_ASSERT(0 == nghttp2_submit_response(session, 2, empty_name_nv,
6607 open_recv_stream(session, 1);
6609 CU_ASSERT(0 < nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 1,
6613 nghttp2_session_del(session);
6615 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, NULL));
6618 CU_ASSERT(0 < nghttp2_submit_request(session, NULL, empty_name_nv,
6622 CU_ASSERT(0 < nghttp2_submit_headers(session, NGHTTP2_FLAG_NONE, -1, NULL,
6626 nghttp2_session_del(session);
6630 nghttp2_session *session;
6649 nghttp2_session_client_new(&session, &callbacks, &ud);
6654 rv = nghttp2_submit_extension(session, 211, 0x01, 3, &ud.scratchbuf);
6660 rv = nghttp2_session_send(session);
6676 nghttp2_session_del(session);
6679 nghttp2_session_server_new(&session, &callbacks, &ud);
6681 rv = nghttp2_submit_extension(session, NGHTTP2_GOAWAY, NGHTTP2_FLAG_NONE, 0,
6686 nghttp2_session_del(session);
6691 nghttp2_session *session;
6704 nghttp2_session_server_new(&session, &callbacks, &ud);
6706 rv = nghttp2_submit_altsvc(session, NGHTTP2_FLAG_NONE, 0, origin,
6714 len = nghttp2_session_mem_send(session, &data);
6735 rv = nghttp2_submit_altsvc(session, NGHTTP2_FLAG_NONE, 0, NULL, 0,
6741 rv = nghttp2_submit_altsvc(session, NGHTTP2_FLAG_NONE, 1, origin,
6747 nghttp2_session_del(session);
6749 /* submitting from client side session is error */
6750 nghttp2_session_client_new(&session, &callbacks, NULL);
6752 rv = nghttp2_submit_altsvc(session, NGHTTP2_FLAG_NONE, 0, origin,
6758 nghttp2_session_del(session);
6762 nghttp2_session *session;
6791 nghttp2_session_server_new(&session, &callbacks, &ud);
6793 rv = nghttp2_submit_origin(session, NGHTTP2_FLAG_NONE, ov, 2);
6798 len = nghttp2_session_mem_send(session, &data);
6819 nghttp2_session_del(session);
6821 /* Submitting ORIGIN frame from client session is error */
6822 nghttp2_session_client_new(&session, &callbacks, NULL);
6824 rv = nghttp2_submit_origin(session, NGHTTP2_FLAG_NONE, ov, 1);
6828 nghttp2_session_del(session);
6831 nghttp2_session_server_new(&session, &callbacks, &ud);
6833 rv = nghttp2_submit_origin(session, NGHTTP2_FLAG_NONE, NULL, 0);
6838 len = nghttp2_session_mem_send(session, &data);
6847 nghttp2_session_del(session);
6851 nghttp2_session *session;
6865 nghttp2_session_client_new(&session, &callbacks, &ud);
6867 session->pending_no_rfc7540_priorities = 1;
6870 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
6874 len = nghttp2_session_mem_send(session, &data);
6878 rv = nghttp2_submit_priority_update(session, NGHTTP2_FLAG_NONE, stream_id,
6886 len = nghttp2_session_mem_send(session, &data);
6903 nghttp2_session_del(session);
6905 /* Submitting PRIORITY_UPDATE frame from server session is error */
6906 nghttp2_session_server_new(&session, &callbacks, &ud);
6908 open_recv_stream(session, 1);
6910 rv = nghttp2_submit_priority_update(session, NGHTTP2_FLAG_NONE, 1,
6915 nghttp2_session_del(session);
6918 nghttp2_session_client_new(&session, &callbacks, &ud);
6921 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
6925 len = nghttp2_session_mem_send(session, &data);
6929 rv = nghttp2_submit_priority_update(session, NGHTTP2_FLAG_NONE, stream_id,
6936 len = nghttp2_session_mem_send(session, &data);
6951 nghttp2_session_del(session);
6955 nghttp2_session *session;
6964 nghttp2_session_client_new(&session, &callbacks, NULL);
6966 rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 1,
6971 item = nghttp2_outbound_queue_top(&session->ob_reg);
6975 nghttp2_session_del(session);
6978 nghttp2_session_client_new(&session, &callbacks, NULL);
6980 rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 2,
6985 item = nghttp2_outbound_queue_top(&session->ob_reg);
6989 nghttp2_session_del(session);
6992 nghttp2_session_client_new(&session, &callbacks, NULL);
6994 open_sent_stream(session, 1);
6996 rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 1,
7001 item = nghttp2_outbound_queue_top(&session->ob_reg);
7007 nghttp2_session_del(session);
7010 nghttp2_session_client_new(&session, &callbacks, NULL);
7012 open_recv_stream(session, 2);
7014 rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 2,
7019 item = nghttp2_outbound_queue_top(&session->ob_reg);
7025 nghttp2_session_del(session);
7028 nghttp2_session_client_new(&session, &callbacks, NULL);
7031 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
7035 item = nghttp2_outbound_queue_top(&session->ob_syn);
7041 rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, stream_id,
7046 item = nghttp2_outbound_queue_top(&session->ob_syn);
7052 nghttp2_session_del(session);
7056 nghttp2_session *session;
7062 nghttp2_session_server_new(&session, &callbacks, NULL);
7066 stream = nghttp2_session_open_stream(session, 1, NGHTTP2_STREAM_FLAG_NONE,
7068 CU_ASSERT(1 == session->num_incoming_streams);
7069 CU_ASSERT(0 == session->num_outgoing_streams);
7072 CU_ASSERT(&session->root == stream->dep_prev);
7075 stream = nghttp2_session_open_stream(session, 2, NGHTTP2_STREAM_FLAG_NONE,
7078 CU_ASSERT(1 == session->num_incoming_streams);
7079 CU_ASSERT(1 == session->num_outgoing_streams);
7080 CU_ASSERT(&session->root == stream->dep_prev);
7084 stream = nghttp2_session_open_stream(session, 4, NGHTTP2_STREAM_FLAG_NONE,
7087 CU_ASSERT(1 == session->num_incoming_streams);
7088 CU_ASSERT(1 == session->num_outgoing_streams);
7089 CU_ASSERT(&session->root == stream->dep_prev);
7095 stream = nghttp2_session_open_stream(session, 3, NGHTTP2_STREAM_FLAG_NONE,
7103 stream = nghttp2_session_open_stream(session, 5, NGHTTP2_STREAM_FLAG_NONE,
7108 stream = nghttp2_session_get_stream_raw(session, 1000000007);
7111 CU_ASSERT(&session->root == stream->dep_prev);
7114 session->last_recv_stream_id = 7;
7118 stream = nghttp2_session_open_stream(session, 9, NGHTTP2_FLAG_NONE, &pri_spec,
7122 CU_ASSERT(&session->root == stream->dep_prev);
7124 nghttp2_session_del(session);
7126 nghttp2_session_client_new(&session, &callbacks, NULL);
7127 stream = nghttp2_session_open_stream(session, 4, NGHTTP2_STREAM_FLAG_NONE,
7130 CU_ASSERT(0 == session->num_incoming_streams);
7131 CU_ASSERT(0 == session->num_outgoing_streams);
7132 CU_ASSERT(&session->root == stream->dep_prev);
7136 nghttp2_session_del(session);
7140 nghttp2_session *session;
7146 nghttp2_session_server_new(&session, &callbacks, NULL);
7151 stream = nghttp2_session_open_stream(session, 1, NGHTTP2_STREAM_FLAG_NONE,
7157 stream = nghttp2_session_get_stream_raw(session, 101);
7165 stream = nghttp2_session_open_stream(session, 101, NGHTTP2_STREAM_FLAG_NONE,
7171 stream = nghttp2_session_get_stream_raw(session, 211);
7176 nghttp2_session_del(session);
7180 nghttp2_session *session;
7187 nghttp2_session_client_new(&session, &callbacks, NULL);
7188 session->remote_settings.max_concurrent_streams = 2;
7190 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
7191 nghttp2_submit_ping(session, NGHTTP2_FLAG_NONE, NULL);
7193 nghttp2_session_get_next_ob_item(session)->frame.hd.type);
7195 CU_ASSERT(1 == nghttp2_submit_request(session, NULL, NULL, 0, NULL, NULL));
7197 nghttp2_session_get_next_ob_item(session)->frame.hd.type);
7199 CU_ASSERT(0 == nghttp2_session_send(session));
7200 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
7204 open_recv_stream(session, 2);
7209 nghttp2_submit_request(session, &pri_spec, NULL, 0, NULL, NULL));
7211 nghttp2_session_get_next_ob_item(session)->frame.hd.type);
7212 CU_ASSERT(0 == nghttp2_session_send(session));
7215 nghttp2_submit_request(session, &pri_spec, NULL, 0, NULL, NULL));
7216 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
7218 session->remote_settings.max_concurrent_streams = 3;
7221 nghttp2_session_get_next_ob_item(session)->frame.hd.type);
7223 nghttp2_session_del(session);
7226 nghttp2_session_server_new(&session, &callbacks, NULL);
7227 session->remote_settings.max_concurrent_streams = 0;
7228 open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
7229 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 2,
7231 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
7232 CU_ASSERT(1 == nghttp2_outbound_queue_size(&session->ob_syn));
7233 nghttp2_session_del(session);
7237 nghttp2_session *session;
7247 nghttp2_session_client_new(&session, &callbacks, NULL);
7248 session->remote_settings.max_concurrent_streams = 1;
7250 CU_ASSERT(NULL == nghttp2_session_pop_next_ob_item(session));
7252 nghttp2_submit_ping(session, NGHTTP2_FLAG_NONE, NULL);
7256 nghttp2_submit_request(session, &pri_spec, NULL, 0, NULL, NULL);
7258 item = nghttp2_session_pop_next_ob_item(session);
7263 item = nghttp2_session_pop_next_ob_item(session);
7268 CU_ASSERT(NULL == nghttp2_session_pop_next_ob_item(session));
7272 open_recv_stream(session, 4);
7274 open_sent_stream(session, 1);
7278 nghttp2_submit_request(session, &pri_spec, NULL, 0, NULL, NULL);
7280 CU_ASSERT(NULL == nghttp2_session_pop_next_ob_item(session));
7282 session->remote_settings.max_concurrent_streams = 2;
7284 item = nghttp2_session_pop_next_ob_item(session);
7289 nghttp2_session_del(session);
7292 nghttp2_session_server_new(&session, &callbacks, NULL);
7293 session->remote_settings.max_concurrent_streams = 0;
7294 open_sent_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
7295 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 2,
7297 CU_ASSERT(NULL == nghttp2_session_pop_next_ob_item(session));
7298 CU_ASSERT(1 == nghttp2_outbound_queue_size(&session->ob_syn));
7299 nghttp2_session_del(session);
7303 nghttp2_session *session;
7313 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
7314 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
7315 CU_ASSERT(0 == nghttp2_submit_response(session, 1, NULL, 0, &data_prd));
7316 CU_ASSERT(NGHTTP2_ERR_CALLBACK_FAILURE == nghttp2_session_send(session));
7317 nghttp2_session_del(session);
7321 nghttp2_session *session;
7331 nghttp2_session_server_new(&session, &callbacks, NULL);
7332 open_recv_stream(session, 1);
7337 session->pending_local_max_concurrent_stream = 1;
7340 nghttp2_session_on_request_headers_received(session, &frame));
7342 item = nghttp2_outbound_queue_top(&session->ob_reg);
7346 CU_ASSERT(0 == nghttp2_session_send(session));
7349 session->local_settings.max_concurrent_streams = 1;
7353 nghttp2_session_on_request_headers_received(session, &frame));
7355 item = nghttp2_outbound_queue_top(&session->ob_reg);
7360 nghttp2_session_del(session);
7364 nghttp2_session *session;
7378 nghttp2_session_server_new(&session, &callbacks, &ud);
7379 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
7380 nghttp2_submit_response(session, 1, NULL, 0, &data_prd);
7384 CU_ASSERT(0 == nghttp2_session_send(session));
7390 CU_ASSERT(0 == nghttp2_session_on_rst_stream_received(session, &frame));
7396 CU_ASSERT(0 == nghttp2_session_send(session));
7401 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 1));
7403 nghttp2_session_del(session);
7407 nghttp2_session *session;
7422 nghttp2_session_server_new(&session, &callbacks, &ud);
7423 stream = open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
7425 session->remote_window_size = 1 << 20;
7428 nghttp2_submit_response(session, 1, NULL, 0, &data_prd);
7432 CU_ASSERT(0 == nghttp2_session_send(session));
7438 nghttp2_submit_ping(session, NGHTTP2_FLAG_NONE, NULL);
7440 CU_ASSERT(0 == nghttp2_session_send(session));
7444 CU_ASSERT(0 == nghttp2_session_resume_data(session, 1));
7450 CU_ASSERT(0 == nghttp2_session_send(session));
7458 CU_ASSERT(0 == nghttp2_session_send(session));
7462 CU_ASSERT(0 == nghttp2_session_resume_data(session, 1));
7467 CU_ASSERT(0 == nghttp2_session_send(session));
7470 nghttp2_session_del(session);
7474 nghttp2_session *session;
7498 nghttp2_session_client_new(&session, &callbacks, &ud);
7500 session->remote_window_size = 64 * 1024;
7501 session->remote_settings.initial_window_size = 64 * 1024;
7503 nghttp2_submit_request(session, NULL, NULL, 0, &data_prd, NULL);
7506 CU_ASSERT(0 == nghttp2_session_send(session));
7512 nghttp2_session_on_window_update_received(session, &frame);
7515 CU_ASSERT(0 == nghttp2_session_send(session));
7520 nghttp2_session_on_window_update_received(session, &frame);
7523 CU_ASSERT(0 == nghttp2_session_send(session));
7526 stream = nghttp2_session_get_stream(session, 1);
7532 ((int32_t)session->remote_settings.initial_window_size -
7534 session->remote_settings.initial_window_size =
7541 nghttp2_session_on_window_update_received(session, &frame);
7544 CU_ASSERT(0 == nghttp2_session_send(session));
7550 nghttp2_session_on_window_update_received(session, &frame);
7555 nghttp2_session_on_window_update_received(session, &frame);
7558 CU_ASSERT(0 == nghttp2_session_send(session));
7567 nghttp2_session_on_settings_received(session, &settings_frame, 1);
7571 CU_ASSERT(0 == nghttp2_session_send(session));
7577 nghttp2_session_on_window_update_received(session, &frame);
7580 CU_ASSERT(0 == nghttp2_session_send(session));
7582 CU_ASSERT(nghttp2_session_get_stream(session, 1)->shut_flags &
7586 nghttp2_session_del(session);
7590 nghttp2_session *session;
7601 nghttp2_session_client_new(&session, &callbacks, NULL);
7603 stream = open_sent_stream(session, 1);
7607 session->local_window_size = NGHTTP2_MAX_PAYLOADLEN;
7618 session, data, NGHTTP2_MAX_PAYLOADLEN + NGHTTP2_FRAME_HDLEN));
7620 item = nghttp2_session_get_next_ob_item(session);
7628 CU_ASSERT(0 == nghttp2_session_send(session));
7637 session, data, NGHTTP2_MAX_PAYLOADLEN + NGHTTP2_FRAME_HDLEN));
7639 item = nghttp2_session_get_next_ob_item(session);
7645 nghttp2_session_del(session);
7649 nghttp2_session *session;
7665 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
7669 stream = open_sent_stream(session, 1);
7681 nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + hd.length));
7683 CU_ASSERT((int32_t)hd.length == session->recv_window_size);
7685 CU_ASSERT(256 == session->consumed_size);
7687 CU_ASSERT(357 == session->recv_window_size);
7693 nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 103));
7694 CU_ASSERT(258 == session->consumed_size);
7696 CU_ASSERT(460 == session->recv_window_size);
7700 CU_ASSERT(254 == nghttp2_session_mem_recv(session, data, 254));
7701 CU_ASSERT(512 == session->consumed_size);
7703 CU_ASSERT(714 == session->recv_window_size);
7710 nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 102));
7711 CU_ASSERT(513 == session->consumed_size);
7713 CU_ASSERT(816 == session->recv_window_size);
7717 CU_ASSERT(255 == nghttp2_session_mem_recv(session, data, 255));
7718 CU_ASSERT(768 == session->consumed_size);
7720 CU_ASSERT(1071 == session->recv_window_size);
7727 nghttp2_session_mem_recv(session, data, NGHTTP2_FRAME_HDLEN + 51));
7728 CU_ASSERT(769 == session->consumed_size);
7730 CU_ASSERT(1122 == session->recv_window_size);
7734 CU_ASSERT(306 == nghttp2_session_mem_recv(session, data, 306));
7735 CU_ASSERT(1024 == session->consumed_size);
7737 CU_ASSERT(1428 == session->recv_window_size);
7740 nghttp2_session_del(session);
7744 nghttp2_session *session;
7760 nghttp2_session_client_new(&session, &callbacks, &ud);
7761 nghttp2_submit_request(session, NULL, NULL, 0, &data_prd, NULL);
7765 CU_ASSERT(0 == nghttp2_session_send(session));
7768 stream = nghttp2_session_get_stream(session, 1);
7778 nghttp2_session_on_window_update_received(session, &frame);
7780 nghttp2_session_on_window_update_received(session, &frame);
7785 CU_ASSERT(0 == nghttp2_session_send(session));
7792 nghttp2_submit_request(session, NULL, NULL, 0, &data_prd, NULL);
7793 /* Sending data will fail (hard fail) and session tear down */
7794 CU_ASSERT(NGHTTP2_ERR_CALLBACK_FAILURE == nghttp2_session_send(session));
7796 nghttp2_session_del(session);
7800 nghttp2_session *session;
7809 nghttp2_session_client_new(&session, &callbacks, &user_data);
7811 open_sent_stream3(session, 1, NGHTTP2_STREAM_FLAG_NONE, &pri_spec_default,
7814 CU_ASSERT(nghttp2_session_close_stream(session, 1, NGHTTP2_NO_ERROR) == 0);
7816 nghttp2_session_del(session);
7820 nghttp2_session *session;
7832 nghttp2_session_server_new(&session, &callbacks, &user_data);
7834 open_recv_stream3(session, 1, NGHTTP2_STREAM_FLAG_NONE, &pri_spec_default,
7839 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 3,
7841 CU_ASSERT(0 == nghttp2_session_send(session));
7849 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 1,
7851 CU_ASSERT(0 == nghttp2_session_send(session));
7859 CU_ASSERT(0 == nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, 1,
7861 CU_ASSERT(0 == nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 1,
7863 CU_ASSERT(0 == nghttp2_session_send(session));
7868 nghttp2_session_del(session);
7872 CU_ASSERT(nghttp2_session_client_new(&session, &callbacks, &user_data) == 0);
7874 session->next_stream_id = (1u << 31) + 1;
7876 nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, -1, NULL,
7881 session->goaway_flags |= NGHTTP2_GOAWAY_RECV;
7882 session->next_stream_id = 9;
7884 CU_ASSERT(0 < nghttp2_submit_headers(session, NGHTTP2_FLAG_END_STREAM, -1,
7886 CU_ASSERT(0 == nghttp2_session_send(session));
7891 nghttp2_session_del(session);
7895 nghttp2_session *session;
7899 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, NULL));
7900 CU_ASSERT(0 == nghttp2_session_get_outbound_queue_size(session));
7902 CU_ASSERT(0 == nghttp2_submit_ping(session, NGHTTP2_FLAG_NONE, NULL));
7903 CU_ASSERT(1 == nghttp2_session_get_outbound_queue_size(session));
7905 CU_ASSERT(0 == nghttp2_submit_goaway(session, NGHTTP2_FLAG_NONE, 2,
7907 CU_ASSERT(2 == nghttp2_session_get_outbound_queue_size(session));
7909 nghttp2_session_del(session);
7913 nghttp2_session *session;
7918 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, NULL));
7920 stream = open_sent_stream(session, 1);
7923 nghttp2_session_get_effective_local_window_size(session));
7924 CU_ASSERT(0 == nghttp2_session_get_effective_recv_data_length(session));
7927 nghttp2_session_get_stream_effective_local_window_size(session, 1));
7929 nghttp2_session_get_stream_effective_recv_data_length(session, 1));
7932 session->recv_window_size = 100;
7933 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0, 1100);
7936 nghttp2_session_get_effective_local_window_size(session));
7938 nghttp2_session_get_local_window_size(session));
7939 CU_ASSERT(0 == nghttp2_session_get_effective_recv_data_length(session));
7941 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0, -50);
7942 /* Now session->recv_window_size = -50 */
7943 CU_ASSERT(-50 == session->recv_window_size);
7944 CU_ASSERT(50 == session->recv_reduction);
7946 nghttp2_session_get_effective_local_window_size(session));
7948 nghttp2_session_get_local_window_size(session));
7949 CU_ASSERT(0 == nghttp2_session_get_effective_recv_data_length(session));
7951 session->recv_window_size += 50;
7953 /* Now session->recv_window_size = 0 */
7956 nghttp2_session_get_local_window_size(session));
7958 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0, 100);
7959 CU_ASSERT(50 == session->recv_window_size);
7960 CU_ASSERT(0 == session->recv_reduction);
7962 nghttp2_session_get_effective_local_window_size(session));
7964 nghttp2_session_get_local_window_size(session));
7965 CU_ASSERT(50 == nghttp2_session_get_effective_recv_data_length(session));
7969 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 1, 1100);
7972 nghttp2_session_get_stream_effective_local_window_size(session, 1));
7974 nghttp2_session_get_stream_local_window_size(session, 1));
7976 nghttp2_session_get_stream_effective_recv_data_length(session, 1));
7978 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 1, -50);
7981 nghttp2_session_get_stream_effective_local_window_size(session, 1));
7983 nghttp2_session_get_stream_local_window_size(session, 1));
7985 nghttp2_session_get_stream_effective_recv_data_length(session, 1));
7989 nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 1, 100);
7991 nghttp2_session_get_stream_effective_local_window_size(session, 1));
7993 nghttp2_session_get_stream_local_window_size(session, 1));
7995 nghttp2_session_get_stream_effective_recv_data_length(session, 1));
7997 nghttp2_session_del(session);
8001 nghttp2_session *session;
8014 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
8016 CU_ASSERT(session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE);
8018 nghttp2_session_del(session);
8025 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
8027 CU_ASSERT(100 == session->remote_settings.max_concurrent_streams);
8028 nghttp2_session_del(session);
8035 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
8037 CU_ASSERT(99 == session->max_incoming_reserved_streams);
8038 nghttp2_session_del(session);
8045 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
8047 CU_ASSERT(session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_PING_ACK);
8049 nghttp2_session_del(session);
8056 nghttp2_session_client_new2(&session, &callbacks, NULL, option);
8058 deflater = &session->hd_deflater;
8060 rv = nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
8064 rv = nghttp2_session_send(session);
8070 nghttp2_session_del(session);
8075 nghttp2_session *session;
8089 nghttp2_session_client_new(&session, &callbacks, &ud);
8090 nghttp2_submit_request(session, NULL, NULL, 0, &data_prd, NULL);
8092 session->remote_window_size = 1 << 20;
8096 CU_ASSERT(0 == nghttp2_session_send(session));
8098 stream = nghttp2_session_get_stream(session, 1);
8105 nghttp2_submit_ping(session, NGHTTP2_FLAG_NONE, NULL);
8108 CU_ASSERT(0 == nghttp2_session_send(session));
8115 CU_ASSERT(0 == nghttp2_session_send(session));
8119 nghttp2_session_del(session);
8125 nghttp2_session *session;
8134 nghttp2_session_server_new(&session, &callbacks, &ud);
8136 open_recv_stream(session, 1);
8143 CU_ASSERT((ssize_t)inlen == nghttp2_session_mem_recv(session, in, inlen));
8149 nghttp2_session_del(session);
8153 nghttp2_session *session;
8170 nghttp2_session_client_new(&session, &callbacks, &ud);
8174 nghttp2_submit_request(session, NULL, NULL, 0, &data_prd, NULL);
8178 CU_ASSERT(0 == nghttp2_session_send(session));
8181 frame = &session->aob.item->frame;
8187 check_session_recv_data_with_padding(&session->aob.framebufs, datalen, mem);
8189 nghttp2_session_del(session);
8193 nghttp2_session *session, *sv_session;
8207 nghttp2_session_client_new(&session, &callbacks, &ud);
8212 CU_ASSERT(1 == nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv),
8214 CU_ASSERT(0 == nghttp2_session_send(session));
8224 nghttp2_session_del(session);
8270 nghttp2_session *session;
8276 nghttp2_session_server_new(&session, &callbacks, NULL);
8278 root = &session->root;
8280 a = open_stream(session, 1);
8282 c = open_stream_with_dep(session, 5, a);
8283 b = open_stream_with_dep(session, 3, a);
8284 d = open_stream_with_dep(session, 7, c);
8303 CU_ASSERT(a == session->root.dep_next);
8305 e = open_stream_with_dep_excl(session, 9, a);
8328 CU_ASSERT(a == session->root.dep_next);
8330 nghttp2_session_del(session);
8334 nghttp2_session *session;
8341 nghttp2_session_server_new(&session, &callbacks, NULL);
8343 root = &session->root;
8345 a = open_stream(session, 1);
8346 b = open_stream_with_dep(session, 3, a);
8347 c = open_stream_with_dep(session, 5, a);
8348 d = open_stream_with_dep(session, 7, c);
8375 CU_ASSERT(c == session->root.dep_next);
8377 nghttp2_session_del(session);
8380 nghttp2_session_server_new(&session, &callbacks, NULL);
8382 root = &session->root;
8384 a = open_stream(session, 1);
8385 b = open_stream_with_dep(session, 3, a);
8386 c = open_stream_with_dep(session, 5, a);
8387 d = open_stream_with_dep(session, 7, c);
8416 CU_ASSERT(a == session->root.dep_next);
8418 nghttp2_session_del(session);
8421 nghttp2_session_server_new(&session, &callbacks, NULL);
8423 root = &session->root;
8425 a = open_stream(session, 1);
8426 b = open_stream_with_dep(session, 3, a);
8427 c = open_stream_with_dep(session, 5, a);
8428 d = open_stream_with_dep(session, 7, c);
8429 e = open_stream_with_dep(session, 9, c);
8458 nghttp2_session_del(session);
8461 nghttp2_session_server_new(&session, &callbacks, NULL);
8463 root = &session->root;
8465 a = open_stream(session, 1);
8466 b = open_stream_with_dep(session, 3, a);
8467 c = open_stream_with_dep(session, 5, a);
8468 d = open_stream_with_dep(session, 7, a);
8469 e = open_stream_with_dep(session, 9, c);
8470 f = open_stream_with_dep(session, 11, c);
8510 nghttp2_session_del(session);
8514 nghttp2_session *session;
8521 nghttp2_session_server_new(&session, &callbacks, NULL);
8523 root = &session->root;
8525 a = open_stream(session, 1);
8526 b = open_stream_with_dep(session, 3, a);
8527 c = open_stream_with_dep(session, 5, a);
8528 d = open_stream_with_dep(session, 7, c);
8530 e = open_stream(session, 9);
8531 f = open_stream_with_dep(session, 11, e);
8565 nghttp2_session_del(session);
8568 nghttp2_session_server_new(&session, &callbacks, NULL);
8570 root = &session->root;
8572 a = open_stream(session, 1);
8573 b = open_stream_with_dep(session, 3, a);
8574 c = open_stream_with_dep(session, 5, a);
8575 d = open_stream_with_dep(session, 7, c);
8577 e = open_stream(session, 9);
8578 f = open_stream_with_dep(session, 11, e);
8614 nghttp2_session_del(session);
8618 nghttp2_session *session;
8625 nghttp2_session_server_new(&session, &callbacks, NULL);
8627 root = &session->root;
8629 a = open_stream(session, 1);
8630 b = open_stream_with_dep(session, 3, a);
8631 c = open_stream_with_dep(session, 5, a);
8632 d = open_stream_with_dep(session, 7, c);
8659 nghttp2_session_del(session);
8662 nghttp2_session_server_new(&session, &callbacks, NULL);
8664 root = &session->root;
8666 a = open_stream(session, 1);
8667 b = open_stream_with_dep(session, 3, a);
8668 c = open_stream_with_dep(session, 5, a);
8669 d = open_stream_with_dep(session, 7, c);
8698 nghttp2_session_del(session);
8701 nghttp2_session_server_new(&session, &callbacks, NULL);
8703 root = &session->root;
8705 a = open_stream(session, 1);
8706 e = open_stream_with_dep(session, 9, a);
8707 c = open_stream_with_dep(session, 5, a);
8708 b = open_stream_with_dep(session, 3, a);
8709 d = open_stream_with_dep(session, 7, c);
8738 nghttp2_session_del(session);
8742 nghttp2_session *session;
8752 nghttp2_session_server_new(&session, &callbacks, NULL);
8754 root = &session->root;
8756 a = open_stream(session, 1);
8757 b = open_stream_with_dep(session, 3, a);
8759 c = open_stream(session, 5);
8767 CU_ASSERT(0 == nghttp2_stream_dep_insert_subtree(&session->root, c));
8789 nghttp2_session_del(session);
8791 nghttp2_session_server_new(&session, &callbacks, NULL);
8793 root = &session->root;
8795 a = open_stream(session, 1);
8796 b = open_stream(session, 3);
8797 c = open_stream(session, 5);
8804 CU_ASSERT(0 == nghttp2_stream_dep_insert_subtree(&session->root, c));
8824 nghttp2_session_del(session);
8826 nghttp2_session_server_new(&session, &callbacks, NULL);
8828 root = &session->root;
8830 a = open_stream(session, 1);
8831 b = open_stream_with_dep(session, 3, a);
8833 c = open_stream(session, 5);
8834 d = open_stream_with_dep(session, 7, c);
8842 CU_ASSERT(0 == nghttp2_stream_dep_insert_subtree(&session->root, c));
8867 nghttp2_session_del(session);
8869 nghttp2_session_server_new(&session, &callbacks, NULL);
8871 root = &session->root;
8873 a = open_stream(session, 1);
8874 b = open_stream_with_dep(session, 3, a);
8876 c = open_stream(session, 5);
8877 d = open_stream_with_dep(session, 7, c);
8889 CU_ASSERT(0 == nghttp2_stream_dep_insert_subtree(&session->root, c));
8913 nghttp2_session_del(session);
8915 nghttp2_session_server_new(&session, &callbacks, NULL);
8917 root = &session->root;
8919 a = open_stream(session, 1);
8920 b = open_stream_with_dep(session, 3, a);
8922 c = open_stream(session, 5);
8923 d = open_stream_with_dep(session, 7, c);
8937 CU_ASSERT(0 == nghttp2_stream_dep_insert_subtree(&session->root, c));
8957 nghttp2_session_del(session);
8961 nghttp2_session *session;
8971 nghttp2_session_server_new(&session, &callbacks, NULL);
8973 a = open_stream(session, 1);
8974 b = open_stream_with_dep(session, 3, a);
8975 c = open_stream_with_dep(session, 5, a);
8976 d = open_stream_with_dep(session, 7, c);
9065 e = open_stream_with_dep_excl(session, 9, a);
9121 nghttp2_session_del(session);
9123 nghttp2_session_server_new(&session, &callbacks, NULL);
9125 a = open_stream(session, 1);
9126 b = open_stream_with_dep(session, 3, a);
9127 c = open_stream_with_dep(session, 5, a);
9128 d = open_stream_with_dep(session, 7, c);
9172 nghttp2_session_del(session);
9176 nghttp2_session *session;
9186 nghttp2_session_server_new(&session, &callbacks, NULL);
9188 a = open_stream(session, 1);
9189 b = open_stream_with_dep(session, 3, a);
9190 c = open_stream_with_dep(session, 5, a);
9191 d = open_stream_with_dep(session, 7, c);
9193 e = open_stream_with_dep_weight(session, 9, 32, &session->root);
9194 f = open_stream_with_dep(session, 11, e);
9259 CU_ASSERT(0 == nghttp2_stream_dep_add_subtree(&session->root, b));
9289 CU_ASSERT(0 == nghttp2_stream_dep_add_subtree(&session->root, a));
9309 CU_ASSERT(0 == nghttp2_stream_dep_add_subtree(&session->root, c));
9396 CU_ASSERT(0 == nghttp2_stream_dep_add_subtree(&session->root, b));
9512 nghttp2_session_del(session);
9516 nghttp2_session *session;
9534 nghttp2_session_server_new(&session, &callbacks, NULL);
9538 nghttp2_stream_get_state(nghttp2_session_get_root_stream(session)));
9545 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
9549 stream = nghttp2_session_find_stream(session, 1);
9563 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
9567 stream = nghttp2_session_find_stream(session, 3);
9577 nghttp2_submit_response(session, 1, resnv, ARRLEN(resnv), NULL);
9579 rv = nghttp2_session_send(session);
9583 stream = nghttp2_session_find_stream(session, 1);
9589 nghttp2_submit_response(session, 3, resnv, ARRLEN(resnv), NULL);
9591 rv = nghttp2_session_send(session);
9595 stream = nghttp2_session_find_stream(session, 3);
9605 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
9612 rv = nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 5, reqnv,
9617 rv = nghttp2_session_send(session);
9621 stream = nghttp2_session_find_stream(session, 2);
9627 nghttp2_submit_response(session, 2, resnv, ARRLEN(resnv), NULL);
9629 rv = nghttp2_session_send(session);
9633 stream = nghttp2_session_find_stream(session, 2);
9639 rv = nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 5, reqnv,
9644 rv = nghttp2_session_send(session);
9648 stream = nghttp2_session_find_stream(session, 4);
9656 nghttp2_submit_response(session, 4, resnv, ARRLEN(resnv), &data_prd);
9658 rv = nghttp2_session_send(session);
9662 stream = nghttp2_session_find_stream(session, 4);
9675 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
9679 stream = nghttp2_session_find_stream(session, 7);
9686 nghttp2_session_del(session);
9690 nghttp2_session_client_new(&session, &callbacks, NULL);
9693 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
9695 rv = nghttp2_session_send(session);
9704 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
9708 stream = nghttp2_session_find_stream(session, 2);
9720 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
9724 stream = nghttp2_session_find_stream(session, 2);
9732 nghttp2_session_del(session);
9738 nghttp2_session *session;
9744 nghttp2_session_server_new(&session, &callbacks, NULL);
9746 a = open_stream(session, 1);
9748 CU_ASSERT(nghttp2_session_get_root_stream(session) ==
9754 b = open_stream_with_dep(session, 3, a);
9755 c = open_stream_with_dep_weight(session, 5, 11, a);
9769 CU_ASSERT(0 == nghttp2_stream_get_stream_id(&session->root));
9771 nghttp2_session_del(session);
9775 nghttp2_session *session;
9781 nghttp2_session_server_new(&session, &callbacks, NULL);
9783 open_recv_stream(session, 1);
9785 stream = nghttp2_session_find_stream(session, 1);
9790 stream = nghttp2_session_find_stream(session, 0);
9792 CU_ASSERT(&session->root == stream);
9795 stream = nghttp2_session_find_stream(session, 2);
9799 nghttp2_session_del(session);
9803 nghttp2_session *session;
9813 nghttp2_session_server_new(&session, &callbacks, NULL);
9815 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
9818 open_recv_stream(session, (int32_t)i * 2 + 1);
9821 CU_ASSERT(0 == session->num_closed_streams);
9823 nghttp2_session_close_stream(session, 1, NGHTTP2_NO_ERROR);
9825 CU_ASSERT(1 == session->num_closed_streams);
9826 CU_ASSERT(1 == session->closed_stream_tail->stream_id);
9827 CU_ASSERT(session->closed_stream_tail == session->closed_stream_head);
9829 nghttp2_session_close_stream(session, 5, NGHTTP2_NO_ERROR);
9831 CU_ASSERT(2 == session->num_closed_streams);
9832 CU_ASSERT(5 == session->closed_stream_tail->stream_id);
9833 CU_ASSERT(1 == session->closed_stream_head->stream_id);
9834 CU_ASSERT(session->closed_stream_head ==
9835 session->closed_stream_tail->closed_prev);
9836 CU_ASSERT(NULL == session->closed_stream_tail->closed_next);
9837 CU_ASSERT(session->closed_stream_tail ==
9838 session->closed_stream_head->closed_next);
9839 CU_ASSERT(NULL == session->closed_stream_head->closed_prev);
9841 open_recv_stream(session, 11);
9842 nghttp2_session_adjust_closed_stream(session);
9844 CU_ASSERT(1 == session->num_closed_streams);
9845 CU_ASSERT(5 == session->closed_stream_tail->stream_id);
9846 CU_ASSERT(session->closed_stream_tail == session->closed_stream_head);
9847 CU_ASSERT(NULL == session->closed_stream_head->closed_prev);
9848 CU_ASSERT(NULL == session->closed_stream_head->closed_next);
9850 open_recv_stream(session, 13);
9851 nghttp2_session_adjust_closed_stream(session);
9853 CU_ASSERT(0 == session->num_closed_streams);
9854 CU_ASSERT(NULL == session->closed_stream_tail);
9855 CU_ASSERT(NULL == session->closed_stream_head);
9857 nghttp2_session_close_stream(session, 3, NGHTTP2_NO_ERROR);
9859 CU_ASSERT(1 == session->num_closed_streams);
9860 CU_ASSERT(3 == session->closed_stream_head->stream_id);
9863 open_sent_stream(session, 2);
9864 nghttp2_session_adjust_closed_stream(session);
9866 CU_ASSERT(1 == session->num_closed_streams);
9867 CU_ASSERT(3 == session->closed_stream_head->stream_id);
9869 nghttp2_session_close_stream(session, 2, NGHTTP2_NO_ERROR);
9871 CU_ASSERT(1 == session->num_closed_streams);
9872 CU_ASSERT(3 == session->closed_stream_head->stream_id);
9874 nghttp2_session_del(session);
9878 nghttp2_session *session;
9889 nghttp2_session_server_new(&session, &callbacks, NULL);
9891 nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
9896 open_recv_stream2(session, i * 2 + 1, NGHTTP2_STREAM_IDLE);
9897 nghttp2_session_adjust_idle_stream(session);
9900 CU_ASSERT(NGHTTP2_MIN_IDLE_STREAMS == session->num_idle_streams);
9903 CU_ASSERT(1 == session->idle_stream_head->stream_id);
9904 CU_ASSERT(stream_id == session->idle_stream_tail->stream_id);
9908 open_recv_stream2(session, stream_id, NGHTTP2_STREAM_IDLE);
9909 nghttp2_session_adjust_idle_stream(session);
9911 CU_ASSERT(NGHTTP2_MIN_IDLE_STREAMS == session->num_idle_streams);
9912 CU_ASSERT(3 == session->idle_stream_head->stream_id);
9913 CU_ASSERT(stream_id == session->idle_stream_tail->stream_id);
9915 nghttp2_session_del(session);
9919 nghttp2_session *session;
9927 nghttp2_session_server_new(&session, &callbacks, NULL);
9930 nghttp2_session_open_stream(session, i, NGHTTP2_STREAM_FLAG_NONE,
9934 CU_ASSERT(3 == session->num_idle_streams);
9937 stream = nghttp2_session_get_stream_raw(session, 2);
9939 CU_ASSERT(session->idle_stream_head == stream->closed_prev);
9940 CU_ASSERT(session->idle_stream_tail == stream->closed_next);
9941 CU_ASSERT(stream == session->idle_stream_head->closed_next);
9942 CU_ASSERT(stream == session->idle_stream_tail->closed_prev);
9944 nghttp2_session_detach_idle_stream(session, stream);
9946 CU_ASSERT(2 == session->num_idle_streams);
9951 CU_ASSERT(session->idle_stream_head ==
9952 session->idle_stream_tail->closed_prev);
9953 CU_ASSERT(session->idle_stream_tail ==
9954 session->idle_stream_head->closed_next);
9957 stream = session->idle_stream_head;
9959 nghttp2_session_detach_idle_stream(session, stream);
9961 CU_ASSERT(1 == session->num_idle_streams);
9963 CU_ASSERT(session->idle_stream_head == session->idle_stream_tail);
9964 CU_ASSERT(NULL == session->idle_stream_head->closed_prev);
9965 CU_ASSERT(NULL == session->idle_stream_head->closed_next);
9969 stream = session->idle_stream_head;
9971 nghttp2_session_detach_idle_stream(session, stream);
9973 CU_ASSERT(0 == session->num_idle_streams);
9975 CU_ASSERT(NULL == session->idle_stream_head);
9976 CU_ASSERT(NULL == session->idle_stream_tail);
9979 nghttp2_session_open_stream(session, i, NGHTTP2_STREAM_FLAG_NONE,
9983 CU_ASSERT(2 == session->num_idle_streams);
9987 stream = session->idle_stream_tail;
9989 nghttp2_session_detach_idle_stream(session, stream);
9991 CU_ASSERT(1 == session->num_idle_streams);
9993 CU_ASSERT(session->idle_stream_head == session->idle_stream_tail);
9994 CU_ASSERT(NULL == session->idle_stream_head->closed_prev);
9995 CU_ASSERT(NULL == session->idle_stream_head->closed_next);
9997 nghttp2_session_del(session);
10001 nghttp2_session *session;
10011 nghttp2_session_server_new(&session, &callbacks, NULL);
10015 dep_stream = open_stream_with_dep(session, stream_id, dep_stream);
10020 stream = nghttp2_session_get_stream(session, stream_id);
10021 CU_ASSERT(nghttp2_stream_dep_find_ancestor(stream, &session->root));
10025 nghttp2_session_del(session);
10029 nghttp2_session *session;
10038 nghttp2_session_server_new(&session, &callbacks, &ud);
10040 open_recv_stream(session, 301);
10041 open_sent_stream(session, 302);
10042 open_recv_stream(session, 309);
10043 open_recv_stream(session, 311);
10044 open_recv_stream(session, 319);
10046 CU_ASSERT(0 == nghttp2_submit_shutdown_notice(session));
10050 CU_ASSERT(0 == nghttp2_session_send(session));
10053 CU_ASSERT((1u << 31) - 1 == session->local_last_stream_id);
10055 CU_ASSERT(0 == nghttp2_submit_goaway(session, NGHTTP2_FLAG_NONE, 311,
10061 CU_ASSERT(0 == nghttp2_session_send(session));
10064 CU_ASSERT(311 == session->local_last_stream_id);
10068 nghttp2_session_terminate_session2(session, 301, NGHTTP2_NO_ERROR));
10073 CU_ASSERT(0 == nghttp2_session_send(session));
10076 CU_ASSERT(301 == session->local_last_stream_id);
10079 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 301));
10080 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 302));
10081 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 309));
10082 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 311));
10083 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 319));
10085 nghttp2_session_del(session);
10089 nghttp2_session *session;
10108 nghttp2_session_server_new(&session, &callbacks, &ud);
10137 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_bufs_len(&bufs));
10142 item = nghttp2_session_get_next_ob_item(session);
10148 CU_ASSERT(NGHTTP2_GOAWAY_NONE == session->goaway_flags);
10151 nghttp2_session_del(session);
10157 nghttp2_session_client_new(&session, &callbacks, &ud);
10159 open_sent_stream(session, 1);
10166 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
10171 item = nghttp2_session_get_next_ob_item(session);
10176 nghttp2_session_del(session);
10182 nghttp2_session *session;
10194 nghttp2_session_server_new(&session, &callbacks, NULL);
10196 rv = nghttp2_session_mem_recv(session, (const uint8_t *)NGHTTP2_CLIENT_MAGIC,
10200 CU_ASSERT(NGHTTP2_IB_READ_FIRST_SETTINGS == session->iframe.state);
10207 rv = nghttp2_session_mem_recv(session, buf, NGHTTP2_FRAME_HDLEN);
10209 CU_ASSERT(NGHTTP2_IB_IGN_ALL == session->iframe.state);
10210 CU_ASSERT(0 == session->iframe.payloadleft);
10214 nghttp2_session_del(session);
10217 nghttp2_session_server_new(&session, &callbacks, NULL);
10220 rv = nghttp2_session_mem_recv(session, (const uint8_t *)NGHTTP2_CLIENT_MAGIC,
10224 CU_ASSERT(NGHTTP2_IB_READ_CLIENT_MAGIC == session->iframe.state);
10225 CU_ASSERT(1 == session->iframe.payloadleft);
10227 rv = nghttp2_session_mem_recv(session, (const uint8_t *)"\0", 1);
10231 nghttp2_session_del(session);
10238 nghttp2_session *session;
10245 nghttp2_session_server_new(&session, &callbacks, NULL);
10247 a = open_recv_stream(session, 1);
10248 open_recv_stream_with_dep(session, 3, a);
10254 CU_ASSERT(0 == nghttp2_submit_data(session, NGHTTP2_FLAG_NONE, 1, &prd));
10255 CU_ASSERT(0 == nghttp2_submit_data(session, NGHTTP2_FLAG_NONE, 3, &prd));
10257 nghttp2_session_del(session);
10261 nghttp2_session *session;
10270 nghttp2_session_server_new(&session, &callbacks, NULL);
10276 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
10278 stream = nghttp2_session_get_stream_raw(session, 1);
10283 CU_ASSERT(1 == session->num_idle_streams);
10284 CU_ASSERT(session->idle_stream_head == stream);
10285 CU_ASSERT(session->idle_stream_tail == stream);
10287 opened_stream = open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
10291 CU_ASSERT(0 == session->num_idle_streams);
10292 CU_ASSERT(NULL == session->idle_stream_head);
10293 CU_ASSERT(NULL == session->idle_stream_tail);
10297 nghttp2_session_del(session);
10301 nghttp2_session *session;
10318 nghttp2_session_client_new(&session, &callbacks, NULL);
10322 stream = open_recv_stream2(session, 2, NGHTTP2_STREAM_RESERVED);
10324 nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 2, NGHTTP2_CANCEL);
10328 CU_ASSERT(0 == nghttp2_session_send(session));
10339 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
10349 CU_ASSERT(0 == nghttp2_outbound_queue_size(&session->ob_reg));
10353 open_recv_stream2(session, 4, NGHTTP2_STREAM_RESERVED);
10355 nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, 2, NGHTTP2_CANCEL);
10364 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
10369 CU_ASSERT(1 == nghttp2_outbound_queue_size(&session->ob_reg));
10375 nghttp2_session_del(session);
10381 nghttp2_session *session;
10393 nghttp2_session_client_new(&session, &callbacks, &ud);
10395 stream_id = nghttp2_submit_request(session, NULL, NULL, 0, NULL, NULL);
10398 nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE, stream_id,
10401 session->remote_settings.max_concurrent_streams = 0;
10405 CU_ASSERT(0 == nghttp2_session_send(session));
10409 stream = nghttp2_session_get_stream(session, stream_id);
10415 session->remote_settings.max_concurrent_streams = 1;
10419 CU_ASSERT(0 == nghttp2_session_send(session));
10425 stream = nghttp2_session_get_stream(session, stream_id);
10429 nghttp2_session_del(session);
10433 nghttp2_session *session;
10451 nghttp2_session_client_new(&session, &callbacks, &ud);
10453 open_sent_stream(session, 1);
10455 nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM, 1, &data_prd);
10457 CU_ASSERT(0 == nghttp2_session_send(session));
10473 nghttp2_session_del(session);
10477 nghttp2_session *session;
10496 nghttp2_session_server_new(&session, &callbacks, &ud);
10504 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
10510 item = nghttp2_session_get_next_ob_item(session);
10515 nghttp2_session_del(session);
10521 nghttp2_session_client_new(&session, &callbacks, &ud);
10523 open_sent_stream(session, 1);
10531 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
10537 item = nghttp2_session_get_next_ob_item(session);
10542 nghttp2_session_del(session);
10548 nghttp2_session *session;
10559 nghttp2_session_client_new(&session, &callbacks, NULL);
10563 rv = nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), &prd, NULL);
10567 datalen = nghttp2_session_mem_send(session, &datap);
10572 datalen = nghttp2_session_mem_send(session, &datap);
10579 rv = nghttp2_session_on_rst_stream_received(session, &frame);
10583 nghttp2_session_del(session);
10586 static int submit_response_on_stream_close(nghttp2_session *session,
10599 CU_ASSERT(0 == nghttp2_submit_response(session, stream_id, resnv,
10603 CU_ASSERT(0 == nghttp2_submit_data(session, NGHTTP2_FLAG_NONE, stream_id,
10612 nghttp2_session *session;
10620 nghttp2_session_server_new(&session, &callbacks, NULL);
10622 open_recv_stream(session, 1);
10623 open_recv_stream(session, 3);
10625 nghttp2_session_close_stream(session, 1, NGHTTP2_NO_ERROR);
10626 nghttp2_session_close_stream(session, 3, NGHTTP2_NO_ERROR);
10628 CU_ASSERT(0 == nghttp2_session_send(session));
10630 nghttp2_session_del(session);
10634 nghttp2_session *session;
10649 nghttp2_session_server_new(&session, &callbacks, NULL);
10660 nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf)));
10664 nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf)));
10666 nghttp2_session_del(session);
10671 nghttp2_session_server_new(&session, &callbacks, NULL);
10682 nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf)));
10686 nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf)));
10688 nghttp2_session_del(session);
10693 nghttp2_session *session;
10701 nghttp2_session_server_new(&session, &callbacks, NULL);
10703 stream1 = open_recv_stream(session, 1);
10704 stream3 = open_recv_stream_with_dep_weight(session, 3, 199, stream1);
10705 stream2 = open_sent_stream_with_dep_weight(session, 2, 101, stream3);
10709 rv = nghttp2_session_change_stream_priority(session, 2, &pri_spec);
10717 rv = nghttp2_session_change_stream_priority(session, 5, &pri_spec);
10721 rv = nghttp2_session_change_stream_priority(session, 1, &pri_spec);
10725 rv = nghttp2_session_change_stream_priority(session, 0, &pri_spec);
10732 rv = nghttp2_session_change_stream_priority(session, 2, &pri_spec);
10736 stream5 = nghttp2_session_get_stream_raw(session, 5);
10739 CU_ASSERT(&session->root == stream5->dep_prev);
10743 nghttp2_session_del(session);
10745 /* Check that this works in client session too */
10746 nghttp2_session_client_new(&session, &callbacks, NULL);
10748 stream1 = open_sent_stream(session, 1);
10752 rv = nghttp2_session_change_stream_priority(session, 1, &pri_spec);
10756 stream5 = nghttp2_session_get_stream_raw(session, 5);
10759 CU_ASSERT(&session->root == stream5->dep_prev);
10763 nghttp2_session_del(session);
10767 nghttp2_session *session;
10787 nghttp2_session_server_new2(&session, &callbacks, NULL, option);
10789 session->pending_no_rfc7540_priorities = 1;
10791 open_recv_stream(session, 1);
10797 session, 1, &extpri, /* ignore_client_signal = */ 0);
10801 stream = nghttp2_session_get_stream(session, 1);
10814 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
10821 session, 1, &extpri, /* ignore_client_signal = */ 1);
10825 stream = nghttp2_session_get_stream(session, 1);
10832 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
10839 nghttp2_session_del(session);
10845 nghttp2_session *session;
10855 nghttp2_session_server_new(&session, &callbacks, NULL);
10857 stream2 = open_sent_stream(session, 2);
10861 rv = nghttp2_session_create_idle_stream(session, 4, &pri_spec);
10865 stream4 = nghttp2_session_get_stream_raw(session, 4);
10876 rv = nghttp2_session_create_idle_stream(session, 8, &pri_spec);
10880 stream8 = nghttp2_session_get_stream_raw(session, 8);
10881 stream10 = nghttp2_session_get_stream_raw(session, 10);
10888 CU_ASSERT(&session->root == stream10->dep_prev);
10892 rv = nghttp2_session_create_idle_stream(session, 4, &pri_spec);
10899 rv = nghttp2_session_create_idle_stream(session, 6, &pri_spec);
10903 rv = nghttp2_session_create_idle_stream(session, 0, &pri_spec);
10907 session->last_sent_stream_id = 20;
10910 rv = nghttp2_session_create_idle_stream(session, 18, &pri_spec);
10914 nghttp2_session_del(session);
10916 /* Check that this works in client session too */
10917 nghttp2_session_client_new(&session, &callbacks, NULL);
10921 rv = nghttp2_session_create_idle_stream(session, 2, &pri_spec);
10925 stream4 = nghttp2_session_get_stream_raw(session, 4);
10926 stream2 = nghttp2_session_get_stream_raw(session, 2);
10930 CU_ASSERT(&session->root == stream4->dep_prev);
10935 nghttp2_session_del(session);
10939 nghttp2_session_server_new(&session, &callbacks, NULL);
10941 session->local_settings.max_concurrent_streams = 30;
10945 rv = nghttp2_session_create_idle_stream(session, i * 2 + 1, &pri_spec);
10952 CU_ASSERT(100 == session->num_idle_streams);
10953 CU_ASSERT(0 == nghttp2_session_send(session));
10954 CU_ASSERT(30 == session->num_idle_streams);
10955 CU_ASSERT(141 == session->idle_stream_head->stream_id);
10957 nghttp2_session_del(session);
10961 nghttp2_session_client_new(&session, &callbacks, NULL);
10963 session->local_settings.max_concurrent_streams = 30;
10967 rv = nghttp2_session_create_idle_stream(session, i * 2 + 1, &pri_spec);
10974 CU_ASSERT(100 == session->num_idle_streams);
10975 CU_ASSERT(0 == nghttp2_session_mem_recv(session, NULL, 0));
10976 CU_ASSERT(30 == session->num_idle_streams);
10977 CU_ASSERT(141 == session->idle_stream_head->stream_id);
10979 nghttp2_session_del(session);
10983 nghttp2_session *session;
10992 nghttp2_session_server_new(&session, &callbacks, NULL);
10994 session->local_settings.max_concurrent_streams = (uint32_t)max_streams;
11000 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
11011 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
11016 CU_ASSERT(20 == session->num_idle_streams);
11017 CU_ASSERT(1 == session->idle_stream_head->stream_id);
11023 CU_ASSERT(0 == nghttp2_session_on_priority_received(session, &frame));
11027 CU_ASSERT(20 == session->num_idle_streams);
11028 CU_ASSERT(3 == session->idle_stream_head->stream_id);
11030 nghttp2_session_del(session);
11034 nghttp2_session *session;
11044 nghttp2_session_client_new(&session, &callbacks, NULL);
11046 session->local_settings.max_concurrent_streams = max_streams;
11052 nghttp2_submit_priority(session, NGHTTP2_FLAG_NONE, 1, &pri_spec));
11061 0 == nghttp2_submit_priority(session, NGHTTP2_FLAG_NONE, 1, &pri_spec));
11064 CU_ASSERT(0 == nghttp2_session_send(session));
11065 CU_ASSERT(max_streams == session->num_idle_streams);
11066 CU_ASSERT(1 == session->idle_stream_head->stream_id);
11072 nghttp2_submit_priority(session, NGHTTP2_FLAG_NONE, 1, &pri_spec));
11074 CU_ASSERT(0 == nghttp2_session_send(session));
11075 CU_ASSERT(max_streams == session->num_idle_streams);
11076 CU_ASSERT(3 == session->idle_stream_head->stream_id);
11078 nghttp2_session_del(session);
11082 nghttp2_session *session;
11090 nghttp2_session_client_new(&session, &callbacks, NULL);
11091 stream = open_sent_stream(session, 1);
11095 session, NGHTTP2_FLAG_NONE, 1, 65536));
11100 nghttp2_session_get_stream_local_window_size(session, 1));
11102 item = nghttp2_session_get_next_ob_item(session);
11108 CU_ASSERT(0 == nghttp2_session_send(session));
11112 session, NGHTTP2_FLAG_NONE, 1, 32768));
11117 nghttp2_session_get_stream_local_window_size(session, 1));
11119 item = nghttp2_session_get_next_ob_item(session);
11125 session, NGHTTP2_FLAG_NONE, 1, 49152));
11130 nghttp2_session_get_stream_local_window_size(session, 1));
11131 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
11135 session, NGHTTP2_FLAG_NONE, 1, 65537));
11140 nghttp2_session_get_stream_local_window_size(session, 1));
11142 item = nghttp2_session_get_next_ob_item(session);
11146 CU_ASSERT(0 == nghttp2_session_send(session));
11149 session->recv_window_size = 4096;
11151 session, NGHTTP2_FLAG_NONE, 0, 65536));
11153 session->local_window_size);
11154 CU_ASSERT(4096 == session->recv_window_size);
11155 CU_ASSERT(65536 - 4096 == nghttp2_session_get_local_window_size(session));
11157 item = nghttp2_session_get_next_ob_item(session);
11163 CU_ASSERT(0 == nghttp2_session_send(session));
11167 session, NGHTTP2_FLAG_NONE, 0, 32768));
11168 CU_ASSERT(32768 == session->local_window_size);
11169 CU_ASSERT(-28672 == session->recv_window_size);
11170 CU_ASSERT(32768 == session->recv_reduction);
11171 CU_ASSERT(65536 - 4096 == nghttp2_session_get_local_window_size(session));
11173 item = nghttp2_session_get_next_ob_item(session);
11179 session, NGHTTP2_FLAG_NONE, 0, 49152));
11180 CU_ASSERT(49152 == session->local_window_size);
11181 CU_ASSERT(-12288 == session->recv_window_size);
11182 CU_ASSERT(16384 == session->recv_reduction);
11183 CU_ASSERT(65536 - 4096 == nghttp2_session_get_local_window_size(session));
11184 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
11188 session, NGHTTP2_FLAG_NONE, 0, 65537));
11189 CU_ASSERT(65537 == session->local_window_size);
11190 CU_ASSERT(4096 == session->recv_window_size);
11191 CU_ASSERT(0 == session->recv_reduction);
11192 CU_ASSERT(65537 - 4096 == nghttp2_session_get_local_window_size(session));
11194 item = nghttp2_session_get_next_ob_item(session);
11198 CU_ASSERT(0 == nghttp2_session_send(session));
11200 nghttp2_session_del(session);
11204 nghttp2_session_client_new(&session, &callbacks, NULL);
11205 stream = open_sent_stream(session, 1);
11209 session, NGHTTP2_FLAG_NONE, 1, 0));
11211 CU_ASSERT(0 == nghttp2_session_get_stream_local_window_size(session, 1));
11215 nghttp2_session_set_local_window_size(session, NGHTTP2_FLAG_NONE, 1,
11219 nghttp2_session_get_stream_local_window_size(session, 1));
11221 item = nghttp2_session_get_next_ob_item(session);
11228 nghttp2_session_del(session);
11233 nghttp2_session_client_new(&session, &callbacks, NULL);
11234 session->recv_window_size = NGHTTP2_INITIAL_WINDOW_SIZE;
11237 session, NGHTTP2_FLAG_NONE, 0, 0));
11238 CU_ASSERT(0 == session->recv_window_size);
11239 CU_ASSERT(0 == nghttp2_session_get_local_window_size(session));
11243 nghttp2_session_set_local_window_size(session, NGHTTP2_FLAG_NONE, 0,
11245 CU_ASSERT(0 == session->recv_window_size);
11247 nghttp2_session_get_local_window_size(session));
11249 item = nghttp2_session_get_next_ob_item(session);
11256 nghttp2_session_del(session);
11261 nghttp2_session *session;
11275 nghttp2_session_client_new(&session, &callbacks, &ud);
11280 rv = nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
11288 rv = nghttp2_session_send(session);
11298 stream_id = nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv),
11307 rv = nghttp2_session_send(session);
11314 stream = nghttp2_session_get_stream_raw(session, stream_id);
11318 nghttp2_session_del(session);
11320 nghttp2_session_server_new(&session, &callbacks, &ud);
11322 open_recv_stream(session, 1);
11324 stream_id = nghttp2_submit_push_promise(session, NGHTTP2_FLAG_NONE, 1, reqnv,
11333 rv = nghttp2_session_send(session);
11340 stream = nghttp2_session_get_stream_raw(session, stream_id);
11344 nghttp2_session_del(session);
11348 nghttp2_session *session;
11370 nghttp2_session_client_new2(&session, &callbacks, &ud, option);
11372 CU_ASSERT(1 == session->max_settings);
11397 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11400 item = nghttp2_session_get_next_ob_item(session);
11405 nghttp2_session_del(session);
11409 prepare_session_removed_closed_stream(nghttp2_session *session,
11427 rv = nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
11431 rv = nghttp2_session_send(session);
11442 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11450 nghttp2_session_close_stream(session, 3, NGHTTP2_NO_ERROR);
11459 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11464 stream = nghttp2_session_get_stream_raw(session, 3);
11478 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11482 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
11489 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11493 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
11501 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11510 nghttp2_session *session;
11528 nghttp2_session_server_new(&session, &callbacks, NULL);
11535 prepare_session_removed_closed_stream(session, &deflater);
11547 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11552 item = nghttp2_session_get_next_ob_item(session);
11557 nghttp2_session_del(session);
11559 nghttp2_session_server_new(&session, &callbacks, NULL);
11563 prepare_session_removed_closed_stream(session, &deflater);
11570 nread = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
11575 item = nghttp2_session_get_next_ob_item(session);
11580 nghttp2_session_del(session);
11586 nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t len,
11594 return fixed_length_data_source_read_callback(session, stream_id, buf, len,
11599 nghttp2_session *session;
11611 nghttp2_session_server_new(&session, &callbacks, &ud);
11613 open_recv_stream(session, 1);
11616 0 == nghttp2_submit_data(session, NGHTTP2_FLAG_END_STREAM, 1, &data_prd));
11621 CU_ASSERT(0 == nghttp2_session_send(session));
11623 CU_ASSERT(NULL == session->aob.item);
11624 CU_ASSERT(0 == nghttp2_session_send(session));
11627 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
11629 nghttp2_session_del(session);
11633 nghttp2_session *session;
11642 nghttp2_session_server_new2(&session, &callbacks, NULL, option);
11644 open_recv_stream(session, 1);
11646 nghttp2_session_close_stream(session, 1, NGHTTP2_NO_ERROR);
11648 CU_ASSERT(0 == session->num_closed_streams);
11650 nghttp2_session_del(session);
11655 nghttp2_session *session;
11665 nghttp2_session_client_new(&session, &callbacks, NULL);
11667 stream_id = nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL,
11670 rv = nghttp2_session_set_stream_user_data(session, stream_id, &user_data2);
11674 datalen = nghttp2_session_mem_send(session, &datap);
11679 nghttp2_session_get_stream_user_data(session, stream_id));
11682 nghttp2_session_set_stream_user_data(session, 2, NULL));
11684 nghttp2_session_del(session);
11688 nghttp2_session *session;
11707 CU_ASSERT(0 == nghttp2_session_server_new(&session, &callbacks, &ud));
11712 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1));
11713 CU_ASSERT(0 == nghttp2_session_send(session));
11715 open_recv_stream2(session, 1, NGHTTP2_STREAM_OPENING);
11716 CU_ASSERT(0 == nghttp2_submit_response(session, 1, resnv, ARRLEN(resnv),
11718 item = nghttp2_session_get_next_ob_item(session);
11723 CU_ASSERT(0 == nghttp2_session_send(session));
11725 &session->sched[NGHTTP2_EXTPRI_DEFAULT_URGENCY].ob_data));
11726 CU_ASSERT(nghttp2_pq_empty(&session->root.obq));
11728 nghttp2_session_del(session);
11732 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, NULL));
11737 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1));
11743 CU_ASSERT(1 == nghttp2_submit_request(session, &pri_spec, reqnv,
11746 item = nghttp2_outbound_queue_top(&session->ob_syn);
11754 nghttp2_session_del(session);
11758 CU_ASSERT(0 == nghttp2_session_client_new(&session, &callbacks, NULL));
11763 CU_ASSERT(0 == nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1));
11765 session->remote_settings.no_rfc7540_priorities = 1;
11771 CU_ASSERT(1 == nghttp2_submit_request(session, &pri_spec, reqnv,
11774 item = nghttp2_outbound_queue_top(&session->ob_syn);
11780 nghttp2_session_del(session);
11784 nghttp2_session *session;
11816 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
11818 rv = nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
11822 rv = nghttp2_session_send(session);
11834 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11837 CU_ASSERT(1 == session->fallback_rfc7540_priorities);
11855 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11859 anchor_stream = nghttp2_session_get_stream_raw(session, 3);
11864 CU_ASSERT(&session->root == anchor_stream->dep_prev);
11866 stream = nghttp2_session_get_stream(session, 1);
11881 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11885 anchor_stream = nghttp2_session_get_stream_raw(session, 5);
11888 CU_ASSERT(&session->root == anchor_stream->dep_prev);
11900 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11907 nghttp2_session_del(session);
11910 nghttp2_session_server_new2(&session, &callbacks, &ud, option);
11912 rv = nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
11916 rv = nghttp2_session_send(session);
11933 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11936 CU_ASSERT(0 == session->fallback_rfc7540_priorities);
11954 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
11957 CU_ASSERT(NULL == nghttp2_session_get_stream_raw(session, 3));
11959 stream = nghttp2_session_get_stream(session, 1);
11965 nghttp2_session_del(session);
11972 nghttp2_session *session;
11997 nghttp2_session_server_new2(&session, &callbacks, NULL, option);
12007 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
12012 rv = nghttp2_session_send(session);
12036 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
12049 rv = nghttp2_session_mem_recv(session, buf->pos, nghttp2_buf_len(buf));
12054 CU_ASSERT(0 == nghttp2_outbound_queue_size(&session->ob_reg));
12059 CU_ASSERT(1 == nghttp2_outbound_queue_size(&session->ob_reg));
12061 item = nghttp2_session_get_next_ob_item(session);
12069 nghttp2_session_del(session);
12075 nghttp2_session *session, nghttp2_hd_deflater *deflater, int32_t stream_id,
12086 ud = session->user_data;
12089 if (nghttp2_session_is_my_stream_id(session, stream_id)) {
12090 open_sent_stream2(session, stream_id, (nghttp2_stream_state)stream_state);
12092 open_recv_stream2(session, stream_id, (nghttp2_stream_state)stream_state);
12102 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12107 item = nghttp2_session_get_next_ob_item(session);
12112 CU_ASSERT(0 == nghttp2_session_send(session));
12118 nghttp2_session *session, nghttp2_hd_deflater *deflater, int32_t stream_id,
12128 ud = session->user_data;
12131 if (nghttp2_session_is_my_stream_id(session, stream_id)) {
12132 open_sent_stream2(session, stream_id, (nghttp2_stream_state)stream_state);
12134 open_recv_stream2(session, stream_id, (nghttp2_stream_state)stream_state);
12144 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12148 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
12155 nghttp2_session *session;
12256 nghttp2_session_client_new(&session, &callbacks, &ud);
12261 check_nghttp2_http_recv_headers_fail(session, &deflater, 1,
12266 check_nghttp2_http_recv_headers_fail(session, &deflater, 3,
12271 check_nghttp2_http_recv_headers_fail(session, &deflater, 5,
12276 check_nghttp2_http_recv_headers_fail(session, &deflater, 7,
12281 check_nghttp2_http_recv_headers_fail(session, &deflater, 9,
12286 check_nghttp2_http_recv_headers_fail(session, &deflater, 11,
12291 check_nghttp2_http_recv_headers_fail(session, &deflater, 13,
12296 check_nghttp2_http_recv_headers_fail(session, &deflater, 15,
12301 check_nghttp2_http_recv_headers_fail(session, &deflater, 17,
12306 check_nghttp2_http_recv_headers_ok(session, &deflater, 19,
12313 session, &deflater, 21, NGHTTP2_STREAM_OPENING, clnonzero204_resnv,
12318 check_nghttp2_http_recv_headers_fail(session, &deflater, 23,
12325 session, &deflater, 25, NGHTTP2_STREAM_OPENING, unexpectedhost_resnv,
12330 nghttp2_session_del(session);
12333 nghttp2_session_server_new(&session, &callbacks, &ud);
12338 check_nghttp2_http_recv_headers_fail(session, &deflater, 1, -1, nopath_reqnv,
12342 check_nghttp2_http_recv_headers_fail(session, &deflater, 3, -1,
12348 session, &deflater, 5, -1, lateconnect_reqnv, ARRLEN(lateconnect_reqnv));
12351 check_nghttp2_http_recv_headers_fail(session, &deflater, 7, -1, duppath_reqnv,
12355 check_nghttp2_http_recv_headers_fail(session, &deflater, 9, -1, badcl_reqnv,
12359 check_nghttp2_http_recv_headers_fail(session, &deflater, 11, -1, dupcl_reqnv,
12363 check_nghttp2_http_recv_headers_fail(session, &deflater, 13, -1, badhd_reqnv,
12368 check_nghttp2_http_recv_headers_fail(session, &deflater, 15, -1,
12374 check_nghttp2_http_recv_headers_fail(session, &deflater, 17, -1,
12379 check_nghttp2_http_recv_headers_fail(session, &deflater, 19, -1,
12385 check_nghttp2_http_recv_headers_fail(session, &deflater, 21, -1,
12391 check_nghttp2_http_recv_headers_ok(session, &deflater, 23, -1,
12397 check_nghttp2_http_recv_headers_ok(session, &deflater, 25, -1,
12403 check_nghttp2_http_recv_headers_fail(session, &deflater, 27, -1,
12409 nghttp2_session_del(session);
12412 nghttp2_session_server_new(&session, &callbacks, &ud);
12414 session->pending_enable_connect_protocol = 1;
12420 check_nghttp2_http_recv_headers_ok(session, &deflater, 1, -1,
12425 check_nghttp2_http_recv_headers_fail(session, &deflater, 3, -1,
12430 check_nghttp2_http_recv_headers_fail(session, &deflater, 5, -1,
12435 check_nghttp2_http_recv_headers_fail(session, &deflater, 7, -1,
12441 check_nghttp2_http_recv_headers_ok(session, &deflater, 9, -1,
12447 nghttp2_session_del(session);
12451 nghttp2_session *session;
12472 nghttp2_session_client_new(&session, &callbacks, NULL);
12476 stream = open_sent_stream2(session, 1, NGHTTP2_STREAM_OPENING);
12482 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12486 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
12492 nghttp2_session_del(session);
12497 nghttp2_session_server_new(&session, &callbacks, NULL);
12505 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12510 stream = nghttp2_session_get_stream(session, 1);
12512 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
12517 nghttp2_session_del(session);
12523 nghttp2_session *session;
12544 nghttp2_session_server_new(&session, &callbacks, NULL);
12554 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12559 item = nghttp2_session_get_next_ob_item(session);
12562 CU_ASSERT(0 == nghttp2_session_send(session));
12575 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12580 item = nghttp2_session_get_next_ob_item(session);
12583 CU_ASSERT(0 == nghttp2_session_send(session));
12596 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12601 item = nghttp2_session_get_next_ob_item(session);
12604 CU_ASSERT(0 == nghttp2_session_send(session));
12610 nghttp2_session_del(session);
12613 nghttp2_session_client_new(&session, &callbacks, NULL);
12618 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
12620 CU_ASSERT(0 == nghttp2_session_send(session));
12627 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12632 item = nghttp2_session_get_next_ob_item(session);
12635 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 1));
12636 CU_ASSERT(0 == nghttp2_session_send(session));
12638 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 1));
12643 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
12645 CU_ASSERT(0 == nghttp2_session_send(session));
12655 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12660 item = nghttp2_session_get_next_ob_item(session);
12663 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 3));
12664 CU_ASSERT(0 == nghttp2_session_send(session));
12666 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 3));
12671 nghttp2_submit_request(session, NULL, reqnv, ARRLEN(reqnv), NULL, NULL);
12673 CU_ASSERT(0 == nghttp2_session_send(session));
12683 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12688 item = nghttp2_session_get_next_ob_item(session);
12691 CU_ASSERT(NULL != nghttp2_session_get_stream(session, 5));
12692 CU_ASSERT(0 == nghttp2_session_send(session));
12694 CU_ASSERT(NULL == nghttp2_session_get_stream(session, 5));
12702 nghttp2_session_del(session);
12706 nghttp2_session *session;
12724 nghttp2_session_client_new(&session, &callbacks, NULL);
12729 open_sent_stream2(session, 1, NGHTTP2_STREAM_OPENING);
12736 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12741 item = nghttp2_session_get_next_ob_item(session);
12744 CU_ASSERT(0 == nghttp2_session_send(session));
12749 open_sent_stream2(session, 3, NGHTTP2_STREAM_OPENING);
12759 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12764 item = nghttp2_session_get_next_ob_item(session);
12767 CU_ASSERT(0 == nghttp2_session_send(session));
12773 open_sent_stream2(session, 5, NGHTTP2_STREAM_OPENING);
12783 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12788 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
12794 open_sent_stream2(session, 7, NGHTTP2_STREAM_OPENING);
12804 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12809 item = nghttp2_session_get_next_ob_item(session);
12813 CU_ASSERT(0 == nghttp2_session_send(session));
12818 open_sent_stream2(session, 9, NGHTTP2_STREAM_OPENING);
12824 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12835 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12840 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
12846 nghttp2_session_del(session);
12852 nghttp2_session *session;
12869 nghttp2_session_server_new(&session, &callbacks, NULL);
12878 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12890 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12895 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
12904 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12915 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12920 item = nghttp2_session_get_next_ob_item(session);
12924 CU_ASSERT(0 == nghttp2_session_send(session));
12933 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12944 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
12949 item = nghttp2_session_get_next_ob_item(session);
12953 CU_ASSERT(0 == nghttp2_session_send(session));
12959 nghttp2_session_del(session);
12965 nghttp2_session *session;
12994 nghttp2_session_server_new(&session, &callbacks, &ud);
13008 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos + proclen,
13015 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos + proclen,
13020 item = nghttp2_session_get_next_ob_item(session);
13028 nghttp2_session_del(session);
13033 nghttp2_session_server_new(&session, &callbacks, &ud);
13040 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos + proclen,
13049 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos + proclen,
13058 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos + proclen,
13064 nghttp2_session_del(session);
13071 nghttp2_session_server_new(&session, &callbacks, &ud);
13073 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13078 item = nghttp2_session_get_next_ob_item(session);
13083 nghttp2_session_del(session);
13088 nghttp2_session *session;
13109 nghttp2_session_client_new(&session, &callbacks, NULL);
13114 open_sent_stream2(session, 1, NGHTTP2_STREAM_OPENING);
13121 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13126 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
13131 stream = open_sent_stream2(session, 3, NGHTTP2_STREAM_OPENING);
13138 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13143 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
13149 nghttp2_session_del(session);
13152 nghttp2_session_server_new(&session, &callbacks, NULL);
13161 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13166 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
13168 stream = nghttp2_session_get_stream(session, 1);
13174 nghttp2_session_del(session);
13179 nghttp2_session *session;
13198 nghttp2_session_client_new(&session, &callbacks, NULL);
13202 CU_ASSERT(1 == nghttp2_submit_request(session, NULL, conn_reqnv,
13205 CU_ASSERT(0 == nghttp2_session_send(session));
13207 stream = nghttp2_session_get_stream(session, 1);
13215 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13224 item = nghttp2_session_get_next_ob_item(session);
13229 nghttp2_session_del(session);
13234 nghttp2_session *session;
13251 nghttp2_session_client_new(&session, &callbacks, NULL);
13255 open_sent_stream2(session, 1, NGHTTP2_STREAM_OPENING);
13261 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13266 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
13268 stream = nghttp2_session_get_stream(session, 2);
13278 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13283 CU_ASSERT(NULL == nghttp2_session_get_next_ob_item(session));
13295 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13300 item = nghttp2_session_get_next_ob_item(session);
13308 nghttp2_session_del(session);
13313 nghttp2_session *session;
13329 nghttp2_session_client_new(&session, &callbacks, NULL);
13333 nghttp2_session_upgrade(session, NULL, 0, NULL);
13340 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13345 stream = nghttp2_session_get_stream(session, 1);
13350 nghttp2_session_del(session);
13355 nghttp2_session *session;
13379 nghttp2_session_server_new(&session, &callbacks, NULL);
13389 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13394 item = nghttp2_session_get_next_ob_item(session);
13397 CU_ASSERT(0 == nghttp2_session_send(session));
13401 nghttp2_session_del(session);
13407 nghttp2_session_server_new2(&session, &callbacks, NULL, option);
13417 rv = nghttp2_session_mem_recv(session, bufs.head->buf.pos,
13422 item = nghttp2_session_get_next_ob_item(session);
13428 nghttp2_session_del(session);