annotate src/event/quic/ngx_event_quic_streams.h @ 8822:ad046179eb91 quic

QUIC: handle EAGAIN properly on UDP sockets. Previously, the error was ignored leading to unnecessary retransmits. Now, unsent frames are returned into output queue, state is reset, and timer is started for the next send attempt.
author Vladimir Homutov <vl@nginx.com>
date Wed, 28 Jul 2021 17:23:18 +0300
parents b3f6ad181df4
children fe919fd63b0b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8750
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 /*
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 */
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 #ifndef _NGX_EVENT_QUIC_STREAMS_H_INCLUDED_
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 #define _NGX_EVENT_QUIC_STREAMS_H_INCLUDED_
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11 #include <ngx_config.h>
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12 #include <ngx_core.h>
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
14
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
15 ngx_int_t ngx_quic_handle_stream_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16 ngx_quic_header_t *pkt, ngx_quic_frame_t *frame);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
17 void ngx_quic_handle_stream_ack(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
18 ngx_quic_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
19 ngx_int_t ngx_quic_handle_max_data_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
20 ngx_quic_max_data_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
21 ngx_int_t ngx_quic_handle_streams_blocked_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
22 ngx_quic_header_t *pkt, ngx_quic_streams_blocked_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23 ngx_int_t ngx_quic_handle_stream_data_blocked_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24 ngx_quic_header_t *pkt, ngx_quic_stream_data_blocked_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25 ngx_int_t ngx_quic_handle_max_stream_data_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26 ngx_quic_header_t *pkt, ngx_quic_max_stream_data_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27 ngx_int_t ngx_quic_handle_reset_stream_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28 ngx_quic_header_t *pkt, ngx_quic_reset_stream_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 ngx_int_t ngx_quic_handle_stop_sending_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30 ngx_quic_header_t *pkt, ngx_quic_stop_sending_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 ngx_int_t ngx_quic_handle_max_streams_frame(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32 ngx_quic_header_t *pkt, ngx_quic_max_streams_frame_t *f);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
34 void ngx_quic_rbtree_insert_stream(ngx_rbtree_node_t *temp,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
35 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36 ngx_quic_stream_t *ngx_quic_find_stream(ngx_rbtree_t *rbtree,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
37 uint64_t id);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38 ngx_int_t ngx_quic_close_streams(ngx_connection_t *c,
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39 ngx_quic_connection_t *qc);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
40
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
41 #endif /* _NGX_EVENT_QUIC_STREAMS_H_INCLUDED_ */