Lines Matching refs:stream

43  * unidirectional stream ID.
52 static int conn_call_begin_headers(nghttp3_conn *conn, nghttp3_stream *stream) {
59 rv = conn->callbacks.begin_headers(conn, stream->node.nid.id, conn->user_data,
60 stream->user_data);
69 static int conn_call_end_headers(nghttp3_conn *conn, nghttp3_stream *stream,
77 rv = conn->callbacks.end_headers(conn, stream->node.nid.id, fin,
78 conn->user_data, stream->user_data);
88 nghttp3_stream *stream) {
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,
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) {
130 rv = conn->callbacks.end_stream(conn, stream->node.nid.id, conn->user_data,
131 stream->user_data);
139 static int conn_call_stop_sending(nghttp3_conn *conn, nghttp3_stream *stream,
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,
164 rv = conn->callbacks.reset_stream(conn, stream->node.nid.id, app_error_code,
165 conn->user_data, stream->user_data);
174 nghttp3_stream *stream,
182 rv = conn->callbacks.deferred_consume(conn, stream->node.nid.id, nconsumed,
183 conn->user_data, stream->user_data);
323 nghttp3_stream *stream = data;
327 nghttp3_stream_del(stream);
380 nghttp3_stream *stream;
384 stream = nghttp3_conn_find_stream(conn, stream_id);
385 if (stream == NULL) {
387 /* QUIC transport ensures that this is new stream. */
397 are many gaps if QUIC stack allows too many holes in stream
405 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
412 stream->rstate.state = NGHTTP3_REQ_STREAM_STATE_IGN_REST;
414 rv = nghttp3_conn_reject_stream(conn, stream);
420 /* unidirectional stream */
425 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
431 stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_INITIAL;
432 stream->tx.hstate = NGHTTP3_HTTP_STATE_REQ_INITIAL;
438 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
443 stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_INITIAL;
444 stream->tx.hstate = NGHTTP3_HTTP_STATE_RESP_INITIAL;
446 /* client doesn't expect to receive new bidirectional stream
452 if (stream->rx.hstate == NGHTTP3_HTTP_STATE_NONE) {
453 stream->rx.hstate = NGHTTP3_HTTP_STATE_REQ_INITIAL;
454 stream->tx.hstate = NGHTTP3_HTTP_STATE_REQ_INITIAL;
458 stream->type == NGHTTP3_STREAM_TYPE_PUSH) {
459 if (stream->rx.hstate == NGHTTP3_HTTP_STATE_NONE) {
460 stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_INITIAL;
461 stream->tx.hstate = NGHTTP3_HTTP_STATE_RESP_INITIAL;
470 return nghttp3_conn_read_uni(conn, stream, src, srclen, fin);
474 stream->flags |= NGHTTP3_STREAM_FLAG_READ_EOF;
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,
482 nghttp3_stream_read_state *rstate = &stream->rstate;
507 stream->type = NGHTTP3_STREAM_TYPE_CONTROL;
517 stream->type = NGHTTP3_STREAM_TYPE_QPACK_ENCODER;
524 stream->type = NGHTTP3_STREAM_TYPE_QPACK_DECODER;
527 stream->type = NGHTTP3_STREAM_TYPE_UNKNOWN;
531 stream->flags |= NGHTTP3_STREAM_FLAG_TYPE_IDENTIFIED;
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,
547 if (!(stream->flags & NGHTTP3_STREAM_FLAG_TYPE_IDENTIFIED)) {
549 /* Ignore stream if it is closed before reading stream header.
552 if (stream->rstate.rvint.left) {
556 rv = conn_delete_stream(conn, stream);
561 nread = conn_read_type(conn, stream, src, srclen, fin);
565 if (!(stream->flags & NGHTTP3_STREAM_FLAG_TYPE_IDENTIFIED)) {
578 switch (stream->type) {
583 nconsumed = nghttp3_conn_read_control(conn, stream, src, srclen);
600 rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_STREAM_CREATION_ERROR);
622 nghttp3_stream *stream,
626 nghttp3_stream_read_state *rstate = &stream->rstate;
1024 static int conn_delete_stream(nghttp3_conn *conn, nghttp3_stream *stream) {
1025 int bidi = nghttp3_client_stream_bidi(stream->node.nid.id);
1028 rv = conn_call_deferred_consume(conn, stream,
1029 nghttp3_stream_get_buffered_datalen(stream));
1035 rv = conn->callbacks.stream_close(conn, stream->node.nid.id,
1036 stream->error_code, conn->user_data,
1037 stream->user_data);
1044 (nghttp3_map_key_type)stream->node.nid.id);
1048 nghttp3_stream_del(stream);
1054 nghttp3_stream *stream) {
1061 assert(nghttp3_client_stream_bidi(stream->node.nid.id));
1064 len = nghttp3_ringbuf_len(&stream->inq);
1069 buf = nghttp3_ringbuf_get(&stream->inq, 0);
1072 conn, &nproc, stream, buf->pos, nghttp3_buf_len(buf),
1073 len == 1 && (stream->flags & NGHTTP3_STREAM_FLAG_READ_EOF));
1080 rv = conn_call_deferred_consume(conn, stream, (size_t)nconsumed);
1086 nghttp3_buf_free(buf, stream->mem);
1087 nghttp3_ringbuf_pop_front(&stream->inq);
1090 if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) {
1095 if (!(stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) &&
1096 (stream->flags & NGHTTP3_STREAM_FLAG_CLOSED)) {
1097 assert(stream->qpack_blocked_pe.index == NGHTTP3_PQ_BAD_INDEX);
1099 rv = conn_delete_stream(conn, stream);
1113 nghttp3_stream *stream;
1121 stream = nghttp3_struct_of(nghttp3_pq_top(&conn->qpack_blocked_streams),
1123 if (nghttp3_qpack_stream_context_get_ricnt(&stream->qpack_sctx) >
1129 stream->qpack_blocked_pe.index = NGHTTP3_PQ_BAD_INDEX;
1130 stream->flags &= (uint16_t)~NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED;
1132 rv = conn_process_blocked_stream_data(conn, stream);
1147 static nghttp3_tnode *stream_get_sched_node(nghttp3_stream *stream) {
1148 return &stream->node;
1152 nghttp3_stream *stream, uint8_t pri) {
1153 assert(nghttp3_client_stream_bidi(stream->node.nid.id));
1155 if (stream->node.pri == pri) {
1159 nghttp3_conn_unschedule_stream(conn, stream);
1161 stream->node.pri = pri;
1163 if (nghttp3_stream_require_schedule(stream)) {
1164 return nghttp3_conn_schedule_stream(conn, stream);
1171 nghttp3_stream *stream, const uint8_t *src,
1175 nghttp3_stream_read_state *rstate = &stream->rstate;
1182 if (stream->flags & NGHTTP3_STREAM_FLAG_SHUT_RD) {
1188 if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) {
1195 rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p));
1244 stream, NGHTTP3_HTTP_EVENT_DATA_BEGIN);
1251 stream, NGHTTP3_HTTP_EVENT_DATA_END);
1261 stream, NGHTTP3_HTTP_EVENT_HEADERS_BEGIN);
1266 rv = nghttp3_stream_empty_headers_allowed(stream);
1272 stream, NGHTTP3_HTTP_EVENT_HEADERS_END);
1279 switch (stream->rx.hstate) {
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);
1331 rv = nghttp3_stream_transit_rx_http_state(stream,
1339 nread = nghttp3_conn_on_headers(conn, stream, p, len,
1353 if (stream->flags & NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED) {
1354 if (p != end && nghttp3_stream_get_buffered_datalen(stream) == 0) {
1355 rv = nghttp3_stream_buffer_data(stream, p, (size_t)(end - p));
1368 switch (stream->rx.hstate) {
1370 rv = nghttp3_http_on_request_headers(&stream->rx.http);
1373 rv = nghttp3_http_on_response_headers(&stream->rx.http);
1393 switch (stream->rx.hstate) {
1398 (stream->rx.http.flags & NGHTTP3_HTTP_FLAG_PRIORITY) &&
1399 !(stream->flags & NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED) &&
1400 !(stream->flags & NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET)) {
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);
1423 rv = nghttp3_stream_transit_rx_http_state(stream,
1432 stream->flags |= NGHTTP3_STREAM_FLAG_HTTP_ERROR;
1437 rv = conn_call_stop_sending(conn, stream, NGHTTP3_H3_MESSAGE_ERROR);
1442 rv = conn_call_reset_stream(conn, stream, NGHTTP3_H3_MESSAGE_ERROR);
1474 rv = nghttp3_stream_transit_rx_http_state(stream,
1479 rv = conn_call_end_stream(conn, stream);
1495 int nghttp3_conn_on_data(nghttp3_conn *conn, nghttp3_stream *stream,
1499 rv = nghttp3_http_on_data_chunk(stream, datalen);
1508 rv = conn->callbacks.recv_data(conn, stream->node.nid.id, data, datalen,
1509 conn->user_data, stream->user_data);
1526 nghttp3_stream *stream,
1540 switch (stream->rx.hstate) {
1558 http = &stream->rx.http;
1564 nread = nghttp3_qpack_decoder_read_request(qdec, &stream->qpack_sctx, &nv,
1580 stream->flags |= NGHTTP3_STREAM_FLAG_QPACK_DECODE_BLOCKED;
1581 rv = nghttp3_conn_qpack_blocked_streams_push(conn, stream);
1589 nghttp3_qpack_stream_context_reset(&stream->qpack_sctx);
1609 rv = recv_header(conn, stream->node.nid.id, nv.token, nv.name,
1611 stream->user_data);
1635 nghttp3_stream *stream,
1642 return conn_decode_headers(conn, stream, src, srclen, fin);
1712 nghttp3_stream *stream;
1720 stream = nghttp3_conn_find_stream(conn, stream_id);
1721 if (stream == NULL) {
1736 /* The stream is gone. Just ignore. */
1742 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
1747 stream->node.pri = nghttp3_pri_to_uint8(&fr->pri);
1748 stream->flags |= NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED;
1753 if (stream->flags & NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET) {
1757 stream->flags |= NGHTTP3_STREAM_FLAG_PRIORITY_UPDATE_RECVED;
1759 return conn_update_stream_priority(conn, stream,
1771 static int conn_stream_acked_data(nghttp3_stream *stream, int64_t stream_id,
1773 nghttp3_conn *conn = stream->conn;
1791 nghttp3_stream *stream;
1797 rv = nghttp3_stream_new(&stream, stream_id, conn->next_seq, &callbacks,
1804 stream->conn = conn;
1807 (nghttp3_map_key_type)stream->node.nid.id, stream);
1809 nghttp3_stream_del(stream);
1814 *pstream = stream;
1825 nghttp3_stream *stream;
1836 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
1841 stream->type = NGHTTP3_STREAM_TYPE_CONTROL;
1843 conn->tx.ctrl = stream;
1845 rv = nghttp3_stream_write_stream_type(stream);
1853 return nghttp3_stream_frq_add(stream, &frent);
1858 nghttp3_stream *stream;
1870 rv = nghttp3_conn_create_stream(conn, &stream, qenc_stream_id);
1875 stream->type = NGHTTP3_STREAM_TYPE_QPACK_ENCODER;
1877 conn->tx.qenc = stream;
1879 rv = nghttp3_stream_write_stream_type(stream);
1884 rv = nghttp3_conn_create_stream(conn, &stream, qdec_stream_id);
1889 stream->type = NGHTTP3_STREAM_TYPE_QPACK_DECODER;
1891 conn->tx.qdec = stream;
1893 return nghttp3_stream_write_stream_type(stream);
1898 size_t veccnt, nghttp3_stream *stream) {
1904 /* If stream is blocked by read callback, don't attempt to fill
1906 if (!(stream->flags & NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED)) {
1907 rv = nghttp3_stream_fill_outq(stream);
1913 if (!nghttp3_stream_uni(stream->node.nid.id) && conn->tx.qenc &&
1925 n = nghttp3_stream_writev(stream, pfin, vec, veccnt);
1929 /* We might just want to write stream fin without sending any stream
1935 *pstream_id = stream->node.nid.id;
1944 nghttp3_stream *stream;
1983 stream = nghttp3_conn_get_next_tx_stream(conn);
1984 if (stream == NULL) {
1988 ncnt = conn_writev_stream(conn, pstream_id, pfin, vec, veccnt, stream);
1993 if (nghttp3_client_stream_bidi(stream->node.nid.id) &&
1994 !nghttp3_stream_require_schedule(stream)) {
1995 nghttp3_conn_unschedule_stream(conn, stream);
2022 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2025 if (stream == NULL) {
2029 rv = nghttp3_stream_add_outq_offset(stream, n);
2034 stream->unscheduled_nwrite += n;
2036 if (!nghttp3_client_stream_bidi(stream->node.nid.id)) {
2040 if (!nghttp3_stream_require_schedule(stream)) {
2041 nghttp3_conn_unschedule_stream(conn, stream);
2045 if (stream->unscheduled_nwrite < NGHTTP3_STREAM_MIN_WRITELEN) {
2049 return nghttp3_conn_schedule_stream(conn, stream);
2054 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2056 if (stream == NULL) {
2060 return nghttp3_stream_add_ack_offset(stream, n);
2063 static int conn_submit_headers_data(nghttp3_conn *conn, nghttp3_stream *stream,
2079 rv = nghttp3_stream_frq_add(stream, &frent);
2089 rv = nghttp3_stream_frq_add(stream, &frent);
2095 if (nghttp3_stream_require_schedule(stream)) {
2096 return nghttp3_conn_schedule_stream(conn, stream);
2102 int nghttp3_conn_schedule_stream(nghttp3_conn *conn, nghttp3_stream *stream) {
2103 /* Assume that stream stays on the same urgency level */
2104 nghttp3_tnode *node = stream_get_sched_node(stream);
2108 stream->unscheduled_nwrite);
2113 stream->unscheduled_nwrite = 0;
2119 nghttp3_stream *stream) {
2120 if (nghttp3_tnode_is_scheduled(stream_get_sched_node(stream))) {
2124 return nghttp3_conn_schedule_stream(conn, stream);
2128 nghttp3_stream *stream) {
2129 nghttp3_tnode *node = stream_get_sched_node(stream);
2138 nghttp3_stream *stream;
2147 /* TODO Check GOAWAY last stream ID */
2156 stream = nghttp3_conn_find_stream(conn, stream_id);
2157 if (stream != NULL) {
2161 rv = nghttp3_conn_create_stream(conn, &stream, stream_id);
2165 stream->rx.hstate = NGHTTP3_HTTP_STATE_RESP_INITIAL;
2166 stream->tx.hstate = NGHTTP3_HTTP_STATE_REQ_END;
2167 stream->user_data = stream_user_data;
2169 nghttp3_http_record_request_method(stream, nva, nvlen);
2172 stream->flags |= NGHTTP3_STREAM_FLAG_WRITE_END_STREAM;
2175 return conn_submit_headers_data(conn, stream, nva, nvlen, dr);
2180 nghttp3_stream *stream;
2187 stream = nghttp3_conn_find_stream(conn, stream_id);
2188 if (stream == NULL) {
2192 return conn_submit_headers_data(conn, stream, nva, nvlen, NULL);
2198 nghttp3_stream *stream;
2204 stream = nghttp3_conn_find_stream(conn, stream_id);
2205 if (stream == NULL) {
2210 stream->flags |= NGHTTP3_STREAM_FLAG_WRITE_END_STREAM;
2213 return conn_submit_headers_data(conn, stream, nva, nvlen, dr);
2218 nghttp3_stream *stream;
2223 stream = nghttp3_conn_find_stream(conn, stream_id);
2224 if (stream == NULL) {
2228 if (stream->flags & NGHTTP3_STREAM_FLAG_WRITE_END_STREAM) {
2232 stream->flags |= NGHTTP3_STREAM_FLAG_WRITE_END_STREAM;
2234 return conn_submit_headers_data(conn, stream, nva, nvlen, NULL);
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);
2299 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2301 if (stream == NULL) {
2305 stream->flags |= NGHTTP3_STREAM_FLAG_FC_BLOCKED;
2306 stream->unscheduled_nwrite = 0;
2308 if (nghttp3_client_stream_bidi(stream->node.nid.id)) {
2309 nghttp3_conn_unschedule_stream(conn, stream);
2314 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2316 if (stream == NULL) {
2320 stream->flags |= NGHTTP3_STREAM_FLAG_SHUT_WR;
2321 stream->unscheduled_nwrite = 0;
2323 if (nghttp3_client_stream_bidi(stream->node.nid.id)) {
2324 nghttp3_conn_unschedule_stream(conn, stream);
2329 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2331 if (stream == NULL) {
2335 stream->flags &= (uint16_t)~NGHTTP3_STREAM_FLAG_FC_BLOCKED;
2337 if (nghttp3_client_stream_bidi(stream->node.nid.id) &&
2338 nghttp3_stream_require_schedule(stream)) {
2339 return nghttp3_conn_ensure_stream_scheduled(conn, stream);
2346 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2348 if (stream == NULL) {
2352 return (stream->flags &
2359 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2361 if (stream == NULL) {
2365 stream->flags &= (uint16_t)~NGHTTP3_STREAM_FLAG_READ_DATA_BLOCKED;
2367 if (nghttp3_client_stream_bidi(stream->node.nid.id) &&
2368 nghttp3_stream_require_schedule(stream)) {
2369 return nghttp3_conn_ensure_stream_scheduled(conn, stream);
2377 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2379 if (stream == NULL) {
2384 stream->type != NGHTTP3_STREAM_TYPE_PUSH &&
2385 stream->type != NGHTTP3_STREAM_TYPE_UNKNOWN) {
2389 stream->error_code = app_error_code;
2391 nghttp3_conn_unschedule_stream(conn, stream);
2393 if (stream->qpack_blocked_pe.index == NGHTTP3_PQ_BAD_INDEX) {
2394 return conn_delete_stream(conn, stream);
2397 stream->flags |= NGHTTP3_STREAM_FLAG_CLOSED;
2402 nghttp3_stream *stream;
2408 stream = nghttp3_conn_find_stream(conn, stream_id);
2409 if (stream) {
2410 if (stream->flags & NGHTTP3_STREAM_FLAG_SHUT_RD) {
2414 stream->flags |= NGHTTP3_STREAM_FLAG_SHUT_RD;
2421 nghttp3_stream *stream) {
2422 assert(stream->qpack_blocked_pe.index == NGHTTP3_PQ_BAD_INDEX);
2425 &stream->qpack_blocked_pe);
2449 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2451 if (stream == NULL) {
2455 stream->user_data = stream_user_data;
2462 nghttp3_stream *stream = nghttp3_conn_find_stream(conn, stream_id);
2464 if (stream == NULL) {
2468 return (uint64_t)stream->rstate.left;
2473 nghttp3_stream *stream;
2481 stream = nghttp3_conn_find_stream(conn, stream_id);
2482 if (stream == NULL) {
2486 dest->urgency = nghttp3_pri_uint8_urgency(stream->node.pri);
2487 dest->inc = nghttp3_pri_uint8_inc(stream->node.pri);
2494 nghttp3_stream *stream;
2504 stream = nghttp3_conn_find_stream(conn, stream_id);
2505 if (stream == NULL) {
2510 stream->flags |= NGHTTP3_STREAM_FLAG_SERVER_PRIORITY_SET;
2512 return conn_update_stream_priority(conn, stream, nghttp3_pri_to_uint8(pri));
2524 nghttp3_stream *stream;
2530 stream = nghttp3_conn_find_stream(conn, stream_id);
2531 return stream && stream->type == NGHTTP3_STREAM_TYPE_QPACK_ENCODER;