annotate src/event/quic/ngx_event_quic_connection.h @ 9189:fcec773dd249

QUIC: avoid partial expansion of PATH_CHALLENGE/PATH_RESPONSE. By default packets with these frames are expanded to 1200 bytes. Previously, if anti-amplification limit did not allow this expansion, it was limited to whatever size was allowed. However RFC 9000 clearly states no partial expansion should happen in both cases. Section 8.2.1. Initiating Path Validation: An endpoint MUST expand datagrams that contain a PATH_CHALLENGE frame to at least the smallest allowed maximum datagram size of 1200 bytes, unless the anti-amplification limit for the path does not permit sending a datagram of this size. Section 8.2.2. Path Validation Responses: An endpoint MUST expand datagrams that contain a PATH_RESPONSE frame to at least the smallest allowed maximum datagram size of 1200 bytes. ... However, an endpoint MUST NOT expand the datagram containing the PATH_RESPONSE if the resulting data exceeds the anti-amplification limit.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 29 Nov 2023 18:13:25 +0400
parents 2880f60a80c3
children a6f79f044de5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1 /*
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 * Copyright (C) Nginx, Inc.
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6 #ifndef _NGX_EVENT_QUIC_CONNECTION_H_INCLUDED_
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 #define _NGX_EVENT_QUIC_CONNECTION_H_INCLUDED_
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10 #include <ngx_config.h>
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11 #include <ngx_core.h>
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12 #include <ngx_event.h>
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
13
8764
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8763
diff changeset
14
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8763
diff changeset
15 /* #define NGX_QUIC_DEBUG_PACKETS */ /* dump packet contents */
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8763
diff changeset
16 /* #define NGX_QUIC_DEBUG_FRAMES */ /* dump frames contents */
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8763
diff changeset
17 /* #define NGX_QUIC_DEBUG_ALLOC */ /* log frames and bufs alloc */
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8763
diff changeset
18 /* #define NGX_QUIC_DEBUG_CRYPTO */
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8763
diff changeset
19
8755
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8754
diff changeset
20 typedef struct ngx_quic_connection_s ngx_quic_connection_t;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
21 typedef struct ngx_quic_server_id_s ngx_quic_server_id_t;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
22 typedef struct ngx_quic_client_id_s ngx_quic_client_id_t;
8755
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8754
diff changeset
23 typedef struct ngx_quic_send_ctx_s ngx_quic_send_ctx_t;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
24 typedef struct ngx_quic_socket_s ngx_quic_socket_t;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
25 typedef struct ngx_quic_path_s ngx_quic_path_t;
8755
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8754
diff changeset
26 typedef struct ngx_quic_keys_s ngx_quic_keys_t;
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8754
diff changeset
27
9080
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
28 #if (NGX_QUIC_OPENSSL_COMPAT)
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
29 #include <ngx_event_quic_openssl_compat.h>
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
30 #endif
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 #include <ngx_event_quic_transport.h>
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32 #include <ngx_event_quic_protection.h>
8749
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8748
diff changeset
33 #include <ngx_event_quic_frames.h>
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
34 #include <ngx_event_quic_migration.h>
8748
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8747
diff changeset
35 #include <ngx_event_quic_connid.h>
8750
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8749
diff changeset
36 #include <ngx_event_quic_streams.h>
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8752
diff changeset
37 #include <ngx_event_quic_ssl.h>
8752
e19723c40d28 QUIC: separate files for tokens related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8751
diff changeset
38 #include <ngx_event_quic_tokens.h>
8751
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
39 #include <ngx_event_quic_ack.h>
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
40 #include <ngx_event_quic_output.h>
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
41 #include <ngx_event_quic_socket.h>
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
43
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8792
diff changeset
44 /* RFC 9002, 6.2.2. Handshakes and New Paths: kInitialRtt */
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
45 #define NGX_QUIC_INITIAL_RTT 333 /* ms */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
46
8748
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8747
diff changeset
47 #define NGX_QUIC_UNSET_PN (uint64_t) -1
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
48
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
49 #define NGX_QUIC_SEND_CTX_LAST (NGX_QUIC_ENCRYPTION_LAST - 1)
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
50
8737
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
51 /* 0-RTT and 1-RTT data exist in the same packet number space,
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
52 * so we have 3 packet number spaces:
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
53 *
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
54 * 0 - Initial
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
55 * 1 - Handshake
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
56 * 2 - 0-RTT and 1-RTT
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
57 */
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
58 #define ngx_quic_get_send_ctx(qc, level) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
59 ((level) == ssl_encryption_initial) ? &((qc)->send_ctx[0]) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
60 : (((level) == ssl_encryption_handshake) ? &((qc)->send_ctx[1]) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
61 : &((qc)->send_ctx[2]))
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
62
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
63 #define ngx_quic_get_connection(c) \
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
64 (((c)->udp) ? (((ngx_quic_socket_t *)((c)->udp))->quic) : NULL)
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
65
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
66 #define ngx_quic_get_socket(c) ((ngx_quic_socket_t *)((c)->udp))
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
67
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68
9147
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
69 typedef enum {
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
70 NGX_QUIC_PATH_IDLE = 0,
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
71 NGX_QUIC_PATH_VALIDATING,
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
72 NGX_QUIC_PATH_WAITING,
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
73 NGX_QUIC_PATH_MTUD
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
74 } ngx_quic_path_state_e;
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
75
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
76
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
77 struct ngx_quic_client_id_s {
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
78 ngx_queue_t queue;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
79 uint64_t seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
80 size_t len;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
81 u_char id[NGX_QUIC_CID_LEN_MAX];
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82 u_char sr_token[NGX_QUIC_SR_TOKEN_LEN];
8971
1e2f4e9c8195 QUIC: reworked migration handling.
Vladimir Homutov <vl@nginx.com>
parents: 8950
diff changeset
83 ngx_uint_t used; /* unsigned used:1; */
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
84 };
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
85
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
86
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
87 struct ngx_quic_server_id_s {
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
88 uint64_t seqnum;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
89 size_t len;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
90 u_char id[NGX_QUIC_CID_LEN_MAX];
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
91 };
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
94 struct ngx_quic_path_s {
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
95 ngx_queue_t queue;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
96 struct sockaddr *sockaddr;
8971
1e2f4e9c8195 QUIC: reworked migration handling.
Vladimir Homutov <vl@nginx.com>
parents: 8950
diff changeset
97 ngx_sockaddr_t sa;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
98 socklen_t socklen;
8971
1e2f4e9c8195 QUIC: reworked migration handling.
Vladimir Homutov <vl@nginx.com>
parents: 8950
diff changeset
99 ngx_quic_client_id_t *cid;
9147
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
100 ngx_quic_path_state_e state;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
101 ngx_msec_t expires;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
102 ngx_uint_t tries;
8971
1e2f4e9c8195 QUIC: reworked migration handling.
Vladimir Homutov <vl@nginx.com>
parents: 8950
diff changeset
103 ngx_uint_t tag;
9147
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
104 size_t mtu;
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
105 size_t mtud;
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
106 size_t max_mtu;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
107 off_t sent;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
108 off_t received;
9189
fcec773dd249 QUIC: avoid partial expansion of PATH_CHALLENGE/PATH_RESPONSE.
Roman Arutyunyan <arut@nginx.com>
parents: 9152
diff changeset
109 u_char challenge[2][8];
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
110 uint64_t seqnum;
9147
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
111 uint64_t mtu_pnum[NGX_QUIC_PATH_RETRIES];
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
112 ngx_str_t addr_text;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
113 u_char text[NGX_SOCKADDR_STRLEN];
9147
58afcd72446f QUIC: path MTU discovery.
Roman Arutyunyan <arut@nginx.com>
parents: 9144
diff changeset
114 ngx_uint_t validated; /* unsigned validated:1; */
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
115 };
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
116
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
117
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
118 struct ngx_quic_socket_s {
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 ngx_udp_connection_t udp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
120 ngx_quic_connection_t *quic;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
121 ngx_queue_t queue;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
122 ngx_quic_server_id_t sid;
9017
c2f5d79cde64 QUIC: separate UDP framework for QUIC.
Roman Arutyunyan <arut@nginx.com>
parents: 9011
diff changeset
123 ngx_sockaddr_t sockaddr;
c2f5d79cde64 QUIC: separate UDP framework for QUIC.
Roman Arutyunyan <arut@nginx.com>
parents: 9011
diff changeset
124 socklen_t socklen;
8971
1e2f4e9c8195 QUIC: reworked migration handling.
Vladimir Homutov <vl@nginx.com>
parents: 8950
diff changeset
125 ngx_uint_t used; /* unsigned used:1; */
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
126 };
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130 ngx_rbtree_t tree;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 ngx_rbtree_node_t sentinel;
9010
a5aebd51e4c7 QUIC: stream lingering.
Roman Arutyunyan <arut@nginx.com>
parents: 8971
diff changeset
132
8827
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8822
diff changeset
133 ngx_queue_t uninitialized;
9010
a5aebd51e4c7 QUIC: stream lingering.
Roman Arutyunyan <arut@nginx.com>
parents: 8971
diff changeset
134 ngx_queue_t free;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136 uint64_t sent;
8791
af33d1ef1c3c QUIC: stream flow control refactored.
Roman Arutyunyan <arut@nginx.com>
parents: 8782
diff changeset
137 uint64_t recv_offset;
af33d1ef1c3c QUIC: stream flow control refactored.
Roman Arutyunyan <arut@nginx.com>
parents: 8782
diff changeset
138 uint64_t recv_window;
af33d1ef1c3c QUIC: stream flow control refactored.
Roman Arutyunyan <arut@nginx.com>
parents: 8782
diff changeset
139 uint64_t recv_last;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140 uint64_t recv_max_data;
9010
a5aebd51e4c7 QUIC: stream lingering.
Roman Arutyunyan <arut@nginx.com>
parents: 8971
diff changeset
141 uint64_t send_offset;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 uint64_t send_max_data;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 uint64_t server_max_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 uint64_t server_max_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146 uint64_t server_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147 uint64_t server_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
148
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
149 uint64_t client_max_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150 uint64_t client_max_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 uint64_t client_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 uint64_t client_streams_bidi;
8827
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8822
diff changeset
153
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8822
diff changeset
154 ngx_uint_t initialized;
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8822
diff changeset
155 /* unsigned initialized:1; */
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 } ngx_quic_streams_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160 size_t in_flight;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161 size_t window;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162 size_t ssthresh;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163 ngx_msec_t recovery_start;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 } ngx_quic_congestion_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167 /*
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8792
diff changeset
168 * RFC 9000, 12.3. Packet Numbers
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 *
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170 * Conceptually, a packet number space is the context in which a packet
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171 * can be processed and acknowledged. Initial packets can only be sent
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8792
diff changeset
172 * with Initial packet protection keys and acknowledged in packets that
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
173 * are also Initial packets.
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8792
diff changeset
174 */
8751
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
175 struct ngx_quic_send_ctx_s {
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176 enum ssl_encryption_level_t level;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177
9011
f9c788f3f5cc QUIC: ngx_quic_buffer_t object.
Roman Arutyunyan <arut@nginx.com>
parents: 9010
diff changeset
178 ngx_quic_buffer_t crypto;
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8764
diff changeset
179 uint64_t crypto_sent;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8764
diff changeset
180
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181 uint64_t pnum; /* to be sent */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182 uint64_t largest_ack; /* received from peer */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 uint64_t largest_pn; /* received from peer */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184
8822
ad046179eb91 QUIC: handle EAGAIN properly on UDP sockets.
Vladimir Homutov <vl@nginx.com>
parents: 8797
diff changeset
185 ngx_queue_t frames; /* generated frames */
ad046179eb91 QUIC: handle EAGAIN properly on UDP sockets.
Vladimir Homutov <vl@nginx.com>
parents: 8797
diff changeset
186 ngx_queue_t sending; /* frames assigned to pkt */
ad046179eb91 QUIC: handle EAGAIN properly on UDP sockets.
Vladimir Homutov <vl@nginx.com>
parents: 8797
diff changeset
187 ngx_queue_t sent; /* frames waiting ACK */
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189 uint64_t pending_ack; /* non sent ack-eliciting */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190 uint64_t largest_range;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 uint64_t first_range;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 ngx_msec_t largest_received;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 ngx_msec_t ack_delay_start;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 ngx_uint_t nranges;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195 ngx_quic_ack_range_t ranges[NGX_QUIC_MAX_RANGES];
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196 ngx_uint_t send_ack;
8751
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
197 };
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200 struct ngx_quic_connection_s {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201 uint32_t version;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202
8971
1e2f4e9c8195 QUIC: reworked migration handling.
Vladimir Homutov <vl@nginx.com>
parents: 8950
diff changeset
203 ngx_quic_path_t *path;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
205 ngx_queue_t sockets;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
206 ngx_queue_t paths;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207 ngx_queue_t client_ids;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
208 ngx_queue_t free_sockets;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
209 ngx_queue_t free_paths;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 ngx_queue_t free_client_ids;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
211
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
212 ngx_uint_t nsockets;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213 ngx_uint_t nclient_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 uint64_t max_retired_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215 uint64_t client_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 uint64_t server_seqnum;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
217 uint64_t path_seqnum;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219 ngx_quic_tp_t tp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 ngx_quic_tp_t ctp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222 ngx_quic_send_ctx_t send_ctx[NGX_QUIC_SEND_CTX_LAST];
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224 ngx_quic_keys_t *keys;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 ngx_quic_conf_t *conf;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228 ngx_event_t push;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229 ngx_event_t pto;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230 ngx_event_t close;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8755
diff changeset
231 ngx_event_t path_validation;
9152
2880f60a80c3 QUIC: posted generating TLS Key Update next keys.
Sergey Kandaurov <pluknet@nginx.com>
parents: 9147
diff changeset
232 ngx_event_t key_update;
2880f60a80c3 QUIC: posted generating TLS Key Update next keys.
Sergey Kandaurov <pluknet@nginx.com>
parents: 9147
diff changeset
233
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234 ngx_msec_t last_cc;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235
8792
004172345bdc QUIC: persistent congestion calculation.
Vladimir Homutov <vl@nginx.com>
parents: 8791
diff changeset
236 ngx_msec_t first_rtt;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 ngx_msec_t latest_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238 ngx_msec_t avg_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
239 ngx_msec_t min_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240 ngx_msec_t rttvar;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
242 ngx_uint_t pto_count;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
243
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
244 ngx_queue_t free_frames;
8950
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8940
diff changeset
245 ngx_buf_t *free_bufs;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
246 ngx_buf_t *free_shadow_bufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
247
8883
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8882
diff changeset
248 ngx_uint_t nframes;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249 #ifdef NGX_QUIC_DEBUG_ALLOC
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
250 ngx_uint_t nbufs;
8950
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8940
diff changeset
251 ngx_uint_t nshadowbufs;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252 #endif
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253
9080
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
254 #if (NGX_QUIC_OPENSSL_COMPAT)
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
255 ngx_quic_compat_t *compat;
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
256 #endif
7da4791e0264 QUIC: OpenSSL compatibility layer.
Roman Arutyunyan <arut@nginx.com>
parents: 9017
diff changeset
257
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258 ngx_quic_streams_t streams;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 ngx_quic_congestion_t congestion;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
260
8882
6204120cf37f QUIC: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents: 8827
diff changeset
261 off_t received;
6204120cf37f QUIC: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents: 8827
diff changeset
262
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 ngx_uint_t error;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
264 enum ssl_encryption_level_t error_level;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 ngx_uint_t error_ftype;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
266 const char *error_reason;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
267
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
268 ngx_uint_t shutdown_code;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
269 const char *shutdown_reason;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
270
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
271 unsigned error_app:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
272 unsigned send_timer_set:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
273 unsigned closing:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
274 unsigned shutdown:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
275 unsigned draining:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
276 unsigned key_phase:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277 unsigned validated:1;
8897
1d7bf9778328 QUIC: converted client_tp_done to bitfield.
Vladimir Homutov <vl@nginx.com>
parents: 8883
diff changeset
278 unsigned client_tp_done:1;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
279 };
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
280
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
281
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8752
diff changeset
282 ngx_int_t ngx_quic_apply_transport_params(ngx_connection_t *c,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8752
diff changeset
283 ngx_quic_tp_t *ctp);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8752
diff changeset
284 void ngx_quic_discard_ctx(ngx_connection_t *c,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8752
diff changeset
285 enum ssl_encryption_level_t level);
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
286 void ngx_quic_close_connection(ngx_connection_t *c, ngx_int_t rc);
8751
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
287 void ngx_quic_shutdown_quic(ngx_connection_t *c);
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
288
8751
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
289 #if (NGX_DEBUG)
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
290 void ngx_quic_connstate_dbg(ngx_connection_t *c);
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
291 #else
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
292 #define ngx_quic_connstate_dbg(c)
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
293 #endif
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8750
diff changeset
294
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
295 #endif /* _NGX_EVENT_QUIC_CONNECTION_H_INCLUDED_ */