Lines Matching refs:conn

45 static int conn_remote_stream_uni(nghttp3_conn *conn, int64_t stream_id) {
46 if (conn->server) {
52 static int conn_call_begin_headers(nghttp3_conn *conn, nghttp3_stream *stream) {
55 if (!conn->callbacks.begin_headers) {
59 rv = conn->callbacks.begin_headers(conn, stream->node.nid.id, conn->user_data,
69 static int conn_call_end_headers(nghttp3_conn *conn, nghttp3_stream *stream,
73 if (!conn->callbacks.end_headers) {
77 rv = conn->callbacks.end_headers(conn, stream->node.nid.id, fin,
78 conn->user_data, stream->user_data);
87 static int conn_call_begin_trailers(nghttp3_conn *conn,
91 if (!conn->callbacks.begin_trailers) {
95 rv = conn->callbacks.begin_trailers(conn, stream->node.nid.id,
96 conn->user_data, stream->user_data);
105 static int conn_call_end_trailers(nghttp3_conn *conn, nghttp3_stream *stream,
109 if (!conn->callbacks.end_trailers) {
113 rv = conn->callbacks.end_trailers(conn, stream->node.nid.id, fin,
114 conn->user_data, stream->user_data);
123 static int conn_call_end_stream(nghttp3_conn *conn, nghttp3_stream *stream) {
126 if (!conn->callbacks.end_stream) {
130 rv = conn->callbacks.end_stream(conn, stream->node.nid.id, conn->user_data,
139 static int conn_call_stop_sending(nghttp3_conn *conn, nghttp3_stream *stream,
143 if (!conn->callbacks.stop_sending) {
147 rv = conn->callbacks.stop_sending(conn, stream->node.nid.id, app_error_code,
148 conn->user_data, stream->user_data);
156 static int conn_call_reset_stream(nghttp3_conn *conn, nghttp3_stream *stream,
160 if (!conn->callbacks.reset_stream) {
164 rv = conn->callbacks.reset_stream(conn, stream->node.nid.id, app_error_code,
165 conn->user_data, stream->user_data);
173 static int conn_call_deferred_consume(nghttp3_conn *conn,
178 if (nconsumed == 0 || !conn->callbacks.deferred_consume) {
182 rv = conn->callbacks.deferred_consume(conn, stream->node.nid.id, nconsumed,
183 conn->user_data, stream->user_data);
218 nghttp3_conn *conn;
227 conn = nghttp3_mem_calloc(mem, 1, sizeof(nghttp3_conn));
228 if (conn == NULL) {
232 nghttp3_objalloc_init(&conn->out_chunk_objalloc,
234 nghttp3_objalloc_stream_init(&conn->stream_objalloc, 64, mem);
236 nghttp3_map_init(&conn->streams, mem);
238 rv = nghttp3_qpack_decoder_init(&conn->qdec,
246 &conn->qenc, settings->qpack_encoder_max_dtable_capacity, mem);
251 nghttp3_pq_init(&conn->qpack_blocked_streams, ricnt_less, mem);
254 nghttp3_pq_init(&conn->sched[i].spq, cycle_less, mem);
257 nghttp3_idtr_init(&conn->remote.bidi.idtr, server, mem);
259 conn->callbacks = *callbacks;
260 conn->local.settings = *settings;
262 conn->local.settings.enable_connect_protocol = 0;
264 nghttp3_settings_default(&conn->remote.settings);
265 conn->mem = mem;
266 conn->user_data = user_data;
267 conn->next_seq = 0;
268 conn->server = server;
269 conn->rx.goaway_id = NGHTTP3_VARINT_MAX + 1;
270 conn->tx.goaway_id = NGHTTP3_VARINT_MAX + 1;
271 conn->rx.max_stream_id_bidi = -4;
273 *pconn = conn;
278 nghttp3_qpack_decoder_free(&conn->qdec);
280 nghttp3_map_free(&conn->streams);
281 nghttp3_objalloc_free(&conn->stream_objalloc);
282 nghttp3_objalloc_free(&conn->out_chunk_objalloc);
283 nghttp3_mem_free(mem, conn);
332 void nghttp3_conn_del(nghttp3_conn *conn) {
335 if (conn == NULL) {
339 nghttp3_buf_free(&conn->tx.qpack.ebuf, conn->mem);
340 nghttp3_buf_free(&conn->tx.qpack.rbuf, conn->mem);
342 nghttp3_idtr_free(&conn->remote.bidi.idtr);
345 nghttp3_pq_free(&conn->sched[i].spq);
348 nghttp3_pq_free(&conn->qpack_blocked_streams);
350 nghttp3_qpack_encoder_free(&conn->qenc);
351 nghttp3_qpack_decoder_free(&conn->qdec);
353 nghttp3_map_each_free(&conn->streams, free_stream, NULL);
354 nghttp3_map_free(&conn->streams);
356 nghttp3_objalloc_free(&conn->stream_objalloc);
357 nghttp3_objalloc_free(&conn->out_chunk_objalloc);
359 nghttp3_mem_free(conn->mem, conn);
362 static int conn_bidi_idtr_open(nghttp3_conn *conn, int64_t stream_id) {
365 rv = nghttp3_idtr_open(&conn->remote.bidi.idtr, stream_id);
370 if (nghttp3_ksl_len(&conn->remote.bidi.idtr.gap.gap) > 32) {
371 nghttp3_gaptr_drop_first_gap(&conn->remote.bidi.idtr.gap);
377 nghttp3_ssize nghttp3_conn_read_stream(nghttp3_conn *conn, int64_t stream_id,
384 stream = nghttp3_conn_find_stream(conn, stream_id);
388 if (conn->server) {
390 rv = conn_bidi_idtr_open(conn, stream_id);
403 conn->rx.max_stream_id_bidi =
404 nghttp3_max(conn->rx.max_stream_id_bidi, stream_id);
405 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
410 if ((conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) &&
411 conn->tx.goaway_id <= stream_id) {
414 rv = nghttp3_conn_reject_stream(conn, stream);
425 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
438 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
450 } else if (conn->server) {
470 return nghttp3_conn_read_uni(conn, stream, src, srclen, fin);
476 return nghttp3_conn_read_bidi(conn, &bidi_nproc, stream, src, srclen, fin);
479 static nghttp3_ssize conn_read_type(nghttp3_conn *conn, nghttp3_stream *stream,
503 if (conn->flags & NGHTTP3_CONN_FLAG_CONTROL_OPENED) {
506 conn->flags |= NGHTTP3_CONN_FLAG_CONTROL_OPENED;
513 if (conn->flags & NGHTTP3_CONN_FLAG_QPACK_ENCODER_OPENED) {
516 conn->flags |= NGHTTP3_CONN_FLAG_QPACK_ENCODER_OPENED;
520 if (conn->flags & NGHTTP3_CONN_FLAG_QPACK_DECODER_OPENED) {
523 conn->flags |= NGHTTP3_CONN_FLAG_QPACK_DECODER_OPENED;
536 static int conn_delete_stream(nghttp3_conn *conn, nghttp3_stream *stream);
538 nghttp3_ssize nghttp3_conn_read_uni(nghttp3_conn *conn, nghttp3_stream *stream,
556 rv = conn_delete_stream(conn, stream);
561 nread = conn_read_type(conn, stream, src, srclen, fin);
583 nconsumed = nghttp3_conn_read_control(conn, stream, src, srclen);
589 nconsumed = nghttp3_conn_read_qpack_encoder(conn, src, srclen);
595 nconsumed = nghttp3_conn_read_qpack_decoder(conn, src, srclen);
600 rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_STREAM_CREATION_ERROR);
621 nghttp3_ssize nghttp3_conn_read_control(nghttp3_conn *conn,
676 if (!(conn->flags & NGHTTP3_CONN_FLAG_SETTINGS_RECVED)) {
680 conn->flags |= NGHTTP3_CONN_FLAG_SETTINGS_RECVED;
701 if (!conn->server) {
710 if (!conn->server) {
788 nghttp3_conn_on_settings_entry_received(conn, &rstate->fr.settings);
838 rv = nghttp3_conn_on_settings_entry_received(conn, &rstate->fr.settings);
865 if (!conn->server && !nghttp3_client_stream_bidi(rvint->acc)) {
868 if (conn->rx.goaway_id < rvint->acc) {
872 conn->flags |= NGHTTP3_CONN_FLAG_GOAWAY_RECVED;
873 conn->rx.goaway_id = rvint->acc;
876 if (conn->callbacks.shutdown) {
878 conn->callbacks.shutdown(conn, conn->rx.goaway_id, conn->user_data);
902 if (conn->local.uni.max_pushes > (uint64_t)rvint->acc + 1) {
906 conn->local.uni.max_pushes = (uint64_t)rvint->acc + 1;
934 rv = nghttp3_conn_on_priority_update(conn, &rstate->fr.priority_update);
951 if (conn->rx.pri_fieldbuflen == 0 && rstate->left == (int64_t)len) {
954 if (len > sizeof(conn->rx.pri_fieldbuf)) {
962 } else if (len + conn->rx.pri_fieldbuflen >
963 sizeof(conn->rx.pri_fieldbuf)) {
968 memcpy(conn->rx.pri_fieldbuf + conn->rx.pri_fieldbuflen, p, len);
969 conn->rx.pri_fieldbuflen += len;
972 pri_field_value = conn->rx.pri_fieldbuf;
973 pri_field_valuelen = conn->rx.pri_fieldbuflen;
994 rv = nghttp3_conn_on_priority_update(conn, &rstate->fr.priority_update);
999 conn->rx.pri_fieldbuflen = 0;
1024 static int conn_delete_stream(nghttp3_conn *conn, nghttp3_stream *stream) {
1028 rv = conn_call_deferred_consume(conn, stream,
1034 if (bidi && conn->callbacks.stream_close) {
1035 rv = conn->callbacks.stream_close(conn, stream->node.nid.id,
1036 stream->error_code, conn->user_data,
1043 rv = nghttp3_map_remove(&conn->streams,
1053 static int conn_process_blocked_stream_data(nghttp3_conn *conn,
1072 conn, &nproc, stream, buf->pos, nghttp3_buf_len(buf),
1080 rv = conn_call_deferred_consume(conn, stream, (size_t)nconsumed);
1099 rv = conn_delete_stream(conn, stream);
1108 nghttp3_ssize nghttp3_conn_read_qpack_encoder(nghttp3_conn *conn,
1112 nghttp3_qpack_decoder_read_encoder(&conn->qdec, src, srclen);
1120 for (; !nghttp3_pq_empty(&conn->qpack_blocked_streams);) {
1121 stream = nghttp3_struct_of(nghttp3_pq_top(&conn->qpack_blocked_streams),
1124 nghttp3_qpack_decoder_get_icnt(&conn->qdec)) {
1128 nghttp3_conn_qpack_blocked_streams_pop(conn);
1132 rv = conn_process_blocked_stream_data(conn, stream);
1141 nghttp3_ssize nghttp3_conn_read_qpack_decoder(nghttp3_conn *conn,
1144 return nghttp3_qpack_encoder_read_decoder(&conn->qenc, src, srclen);
1151 static int conn_update_stream_priority(nghttp3_conn *conn,
1159 nghttp3_conn_unschedule_stream(conn, stream);
1164 return nghttp3_conn_schedule_stream(conn, stream);
1170 nghttp3_ssize nghttp3_conn_read_bidi(nghttp3_conn *conn, size_t *pnproc,
1282 rv = conn_call_begin_headers(conn, stream);
1286 rv = conn_call_begin_trailers(conn, stream);
1320 rv = nghttp3_conn_on_data(conn, stream, p, len);
1339 nread = nghttp3_conn_on_headers(conn, stream, p, len,
1397 if (conn->server &&
1401 rv = conn_update_stream_priority(conn, stream, stream->rx.http.pri);
1408 rv = conn_call_end_headers(conn, stream, p == end && fin);
1412 rv = conn_call_end_trailers(conn, stream, p == end && fin);
1437 rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_MESSAGE_ERROR);
1442 rv = conn_call_reset_stream(conn, stream, NGHTTP3_H3_MESSAGE_ERROR);
1479 rv = conn_call_end_stream(conn, stream);
1495 int nghttp3_conn_on_data(nghttp3_conn *conn, nghttp3_stream *stream,
1504 if (!conn->callbacks.recv_data) {
1508 rv = conn->callbacks.recv_data(conn, stream->node.nid.id, data, datalen,
1509 conn->user_data, stream->user_data);
1517 static nghttp3_pq *conn_get_sched_pq(nghttp3_conn *conn, nghttp3_tnode *tnode) {
1522 return &conn->sched[urgency].spq;
1525 static nghttp3_ssize conn_decode_headers(nghttp3_conn *conn,
1531 nghttp3_qpack_decoder *qdec = &conn->qdec;
1545 recv_header = conn->callbacks.recv_header;
1552 recv_header = conn->callbacks.recv_trailer;
1575 if (conn->local.settings.qpack_blocked_streams <=
1576 nghttp3_pq_size(&conn->qpack_blocked_streams)) {
1581 rv = nghttp3_conn_qpack_blocked_streams_push(conn, stream);
1600 conn->server && conn->local.settings.enable_connect_protocol);
1609 rv = recv_header(conn, stream->node.nid.id, nv.token, nv.name,
1610 nv.value, nv.flags, conn->user_data,
1634 nghttp3_ssize nghttp3_conn_on_headers(nghttp3_conn *conn,
1642 return conn_decode_headers(conn, stream, src, srclen, fin);
1645 int nghttp3_conn_on_settings_entry_received(nghttp3_conn *conn,
1648 nghttp3_settings *dest = &conn->remote.settings;
1666 nghttp3_qpack_encoder_set_max_dtable_capacity(&conn->qenc,
1681 &conn->qenc, (size_t)nghttp3_min(100, ent->value));
1684 if (!conn->server) {
1709 conn_on_priority_update_stream(nghttp3_conn *conn,
1716 nghttp3_ord_stream_id(stream_id) > conn->remote.bidi.max_client_streams) {
1720 stream = nghttp3_conn_find_stream(conn, stream_id);
1722 if ((conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_QUEUED) &&
1723 conn->tx.goaway_id <= stream_id) {
1728 rv = conn_bidi_idtr_open(conn, stream_id);
1740 conn->rx.max_stream_id_bidi =
1741 nghttp3_max(conn->rx.max_stream_id_bidi, stream_id);
1742 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
1759 return conn_update_stream_priority(conn, stream,
1763 int nghttp3_conn_on_priority_update(nghttp3_conn *conn,
1765 assert(conn->server);
1768 return conn_on_priority_update_stream(conn, fr);
1773 nghttp3_conn *conn = stream->conn;
1776 if (!conn->callbacks.acked_stream_data) {
1780 rv = conn->callbacks.acked_stream_data(conn, stream_id, datalen,
1781 conn->user_data, user_data);
1789 int nghttp3_conn_create_stream(nghttp3_conn *conn, nghttp3_stream **pstream,
1797 rv = nghttp3_stream_new(&stream, stream_id, conn->next_seq, &callbacks,
1798 &conn->out_chunk_objalloc, &conn->stream_objalloc,
1799 conn->mem);
1804 stream->conn = conn;
1806 rv = nghttp3_map_insert(&conn->streams,
1813 ++conn->next_seq;
1819 nghttp3_stream *nghttp3_conn_find_stream(nghttp3_conn *conn,
1821 return nghttp3_map_find(&conn->streams, (nghttp3_map_key_type)stream_id);
1824 int nghttp3_conn_bind_control_stream(nghttp3_conn *conn, int64_t stream_id) {
1829 assert(!conn->server || nghttp3_server_stream_uni(stream_id));
1830 assert(conn->server || nghttp3_client_stream_uni(stream_id));
1832 if (conn->tx.ctrl) {
1836 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
1843 conn->tx.ctrl = stream;
1851 frent.aux.settings.local_settings = &conn->local.settings;
1856 int nghttp3_conn_bind_qpack_streams(nghttp3_conn *conn, int64_t qenc_stream_id,
1861 assert(!conn->server || nghttp3_server_stream_uni(qenc_stream_id));
1862 assert(!conn->server || nghttp3_server_stream_uni(qdec_stream_id));
1863 assert(conn->server || nghttp3_client_stream_uni(qenc_stream_id));
1864 assert(conn->server || nghttp3_client_stream_uni(qdec_stream_id));
1866 if (conn->tx.qenc || conn->tx.qdec) {
1870 rv = nghttp3_conn_create_stream(conn, &stream, qenc_stream_id);
1877 conn->tx.qenc = stream;
1884 rv = nghttp3_conn_create_stream(conn, &stream, qdec_stream_id);
1891 conn->tx.qdec = stream;
1896 static nghttp3_ssize conn_writev_stream(nghttp3_conn *conn, int64_t *pstream_id,
1913 if (!nghttp3_stream_uni(stream->node.nid.id) && conn->tx.qenc &&
1914 !nghttp3_stream_is_blocked(conn->tx.qenc)) {
1915 n = nghttp3_stream_writev(conn->tx.qenc, pfin, vec, veccnt);
1920 *pstream_id = conn->tx.qenc->node.nid.id;
1940 nghttp3_ssize nghttp3_conn_writev_stream(nghttp3_conn *conn,
1954 if (conn->tx.ctrl && !nghttp3_stream_is_blocked(conn->tx.ctrl)) {
1956 conn_writev_stream(conn, pstream_id, pfin, vec, veccnt, conn->tx.ctrl);
1962 if (conn->tx.qdec && !nghttp3_stream_is_blocked(conn->tx.qdec)) {
1963 rv = nghttp3_stream_write_qpack_decoder_stream(conn->tx.qdec);
1969 conn_writev_stream(conn, pstream_id, pfin, vec, veccnt, conn->tx.qdec);
1975 if (conn->tx.qenc && !nghttp3_stream_is_blocked(conn->tx.qenc)) {
1977 conn_writev_stream(conn, pstream_id, pfin, vec, veccnt, conn->tx.qenc);
1983 stream = nghttp3_conn_get_next_tx_stream(conn);
1988 ncnt = conn_writev_stream(conn, pstream_id, pfin, vec, veccnt, stream);
1995 nghttp3_conn_unschedule_stream(conn, stream);
2001 nghttp3_stream *nghttp3_conn_get_next_tx_stream(nghttp3_conn *conn) {
2007 pq = &conn->sched[i].spq;
2020 int nghttp3_conn_add_write_offset(nghttp3_conn *conn, int64_t stream_id,
2022 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2041 nghttp3_conn_unschedule_stream(conn, stream);
2049 return nghttp3_conn_schedule_stream(conn, stream);
2052 int nghttp3_conn_add_ack_offset(nghttp3_conn *conn, int64_t stream_id,
2054 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2063 static int conn_submit_headers_data(nghttp3_conn *conn, nghttp3_stream *stream,
2070 rv = nghttp3_nva_copy(&nnva, nva, nvlen, conn->mem);
2081 nghttp3_nva_del(nnva, conn->mem);
2096 return nghttp3_conn_schedule_stream(conn, stream);
2102 int nghttp3_conn_schedule_stream(nghttp3_conn *conn, nghttp3_stream *stream) {
2107 rv = nghttp3_tnode_schedule(node, conn_get_sched_pq(conn, node),
2118 int nghttp3_conn_ensure_stream_scheduled(nghttp3_conn *conn,
2124 return nghttp3_conn_schedule_stream(conn, stream);
2127 void nghttp3_conn_unschedule_stream(nghttp3_conn *conn,
2131 nghttp3_tnode_unschedule(node, conn_get_sched_pq(conn, node));
2134 int nghttp3_conn_submit_request(nghttp3_conn *conn, int64_t stream_id,
2141 assert(!conn->server);
2142 assert(conn->tx.qenc);
2152 if (conn->flags & NGHTTP3_CONN_FLAG_GOAWAY_RECVED) {
2156 stream = nghttp3_conn_find_stream(conn, stream_id);
2161 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
2175 return conn_submit_headers_data(conn, stream, nva, nvlen, dr);
2178 int nghttp3_conn_submit_info(nghttp3_conn *conn, int64_t stream_id,
2184 assert(conn->server);
2185 assert(conn->tx.qenc);
2187 stream = nghttp3_conn_find_stream(conn, stream_id);
2192 return conn_submit_headers_data(conn, stream, nva, nvlen, NULL);
2195 int nghttp3_conn_submit_response(nghttp3_conn *conn, int64_t stream_id,
2201 assert(conn->server);
2202 assert(conn->tx.qenc);
2204 stream = nghttp3_conn_find_stream(conn, stream_id);
2213 return conn_submit_headers_data(conn, stream, nva, nvlen, dr);
2216 int nghttp3_conn_submit_trailers(nghttp3_conn *conn, int64_t stream_id,
2221 assert(conn->tx.qenc);
2223 stream = nghttp3_conn_find_stream(conn, stream_id);
2234 return conn_submit_headers_data(conn, stream, nva, nvlen, NULL);
2237 int nghttp3_conn_submit_shutdown_notice(nghttp3_conn *conn) {
2241 assert(conn->tx.ctrl);
2244 frent.fr.goaway.id = conn->server ? NGHTTP3_SHUTDOWN_NOTICE_STREAM_ID
2247 assert(frent.fr.goaway.id <= conn->tx.goaway_id);
2249 rv = nghttp3_stream_frq_add(conn->tx.ctrl, &frent);
2254 conn->tx.goaway_id = frent.fr.goaway.id;
2255 conn->flags |= NGHTTP3_CONN_FLAG_GOAWAY_QUEUED;
2260 int nghttp3_conn_shutdown(nghttp3_conn *conn) {
2264 assert(conn->tx.ctrl);
2267 if (conn->server) {
2269 nghttp3_min((1ll << 62) - 4, conn->rx.max_stream_id_bidi + 4);
2274 assert(frent.fr.goaway.id <= conn->tx.goaway_id);
2276 rv = nghttp3_stream_frq_add(conn->tx.ctrl, &frent);
2281 conn->tx.goaway_id = frent.fr.goaway.id;
2282 conn->flags |= NGHTTP3_CONN_FLAG_GOAWAY_QUEUED;
2287 int nghttp3_conn_reject_stream(nghttp3_conn *conn, nghttp3_stream *stream) {
2290 rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_REQUEST_REJECTED);
2295 return conn_call_reset_stream(conn, stream, NGHTTP3_H3_REQUEST_REJECTED);
2298 void nghttp3_conn_block_stream(nghttp3_conn *conn, int64_t stream_id) {
2299 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2309 nghttp3_conn_unschedule_stream(conn, stream);
2313 void nghttp3_conn_shutdown_stream_write(nghttp3_conn *conn, int64_t stream_id) {
2314 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2324 nghttp3_conn_unschedule_stream(conn, stream);
2328 int nghttp3_conn_unblock_stream(nghttp3_conn *conn, int64_t stream_id) {
2329 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2339 return nghttp3_conn_ensure_stream_scheduled(conn, stream);
2345 int nghttp3_conn_is_stream_writable(nghttp3_conn *conn, int64_t stream_id) {
2346 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2358 int nghttp3_conn_resume_stream(nghttp3_conn *conn, int64_t stream_id) {
2359 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2369 return nghttp3_conn_ensure_stream_scheduled(conn, stream);
2375 int nghttp3_conn_close_stream(nghttp3_conn *conn, int64_t stream_id,
2377 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2391 nghttp3_conn_unschedule_stream(conn, stream);
2394 return conn_delete_stream(conn, stream);
2401 int nghttp3_conn_shutdown_stream_read(nghttp3_conn *conn, int64_t stream_id) {
2408 stream = nghttp3_conn_find_stream(conn, stream_id);
2417 return nghttp3_qpack_decoder_cancel_stream(&conn->qdec, stream_id);
2420 int nghttp3_conn_qpack_blocked_streams_push(nghttp3_conn *conn,
2424 return nghttp3_pq_push(&conn->qpack_blocked_streams,
2428 void nghttp3_conn_qpack_blocked_streams_pop(nghttp3_conn *conn) {
2429 assert(!nghttp3_pq_empty(&conn->qpack_blocked_streams));
2430 nghttp3_pq_pop(&conn->qpack_blocked_streams);
2433 void nghttp3_conn_set_max_client_streams_bidi(nghttp3_conn *conn,
2435 assert(conn->server);
2436 assert(conn->remote.bidi.max_client_streams <= max_streams);
2438 conn->remote.bidi.max_client_streams = max_streams;
2441 void nghttp3_conn_set_max_concurrent_streams(nghttp3_conn *conn,
2443 nghttp3_qpack_decoder_set_max_concurrent_streams(&conn->qdec,
2447 int nghttp3_conn_set_stream_user_data(nghttp3_conn *conn, int64_t stream_id,
2449 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2460 uint64_t nghttp3_conn_get_frame_payload_left(nghttp3_conn *conn,
2462 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2471 int nghttp3_conn_get_stream_priority(nghttp3_conn *conn, nghttp3_pri *dest,
2475 assert(conn->server);
2481 stream = nghttp3_conn_find_stream(conn, stream_id);
2492 int nghttp3_conn_set_stream_priority(nghttp3_conn *conn, int64_t stream_id,
2504 stream = nghttp3_conn_find_stream(conn, stream_id);
2509 if (conn->server) {
2512 return conn_update_stream_priority(conn, stream, nghttp3_pri_to_uint8(pri));
2519 return nghttp3_stream_frq_add(conn->tx.ctrl, &frent);
2522 int nghttp3_conn_is_remote_qpack_encoder_stream(nghttp3_conn *conn,
2526 if (!conn_remote_stream_uni(conn, stream_id)) {
2530 stream = nghttp3_conn_find_stream(conn, stream_id);