annotate src/event/quic/ngx_event_quic_connection.h @ 8684:4b2d259bdadd quic

QUIC: connections with wrong ALPN protocols are now rejected. Previously, it was not enforced in the stream module. Now, since b9e02e9b2f1d it is possible to specify protocols. Since ALPN is always required, the 'require_alpn' setting is now obsolete.
author Vladimir Homutov <vl@nginx.com>
date Wed, 03 Nov 2021 13:36:21 +0300
parents 404de224517e
children 1d7bf9778328
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8386
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>
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
13
8424
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8423
diff changeset
14
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8423
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: 8423
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: 8423
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: 8423
diff changeset
18 /* #define NGX_QUIC_DEBUG_CRYPTO */
0bd1dd39a08b QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.
Vladimir Homutov <vl@nginx.com>
parents: 8423
diff changeset
19
8415
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8414
diff changeset
20 typedef struct ngx_quic_connection_s ngx_quic_connection_t;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
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: 8415
diff changeset
22 typedef struct ngx_quic_client_id_s ngx_quic_client_id_t;
8415
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8414
diff changeset
23 typedef struct ngx_quic_send_ctx_s ngx_quic_send_ctx_t;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
24 typedef struct ngx_quic_socket_s ngx_quic_socket_t;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
25 typedef struct ngx_quic_path_s ngx_quic_path_t;
8415
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8414
diff changeset
26 typedef struct ngx_quic_keys_s ngx_quic_keys_t;
b4e6b7049984 QUIC: normalize header inclusion.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8414
diff changeset
27
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28 #include <ngx_event_quic_transport.h>
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 #include <ngx_event_quic_protection.h>
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8408
diff changeset
30 #include <ngx_event_quic_frames.h>
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
31 #include <ngx_event_quic_migration.h>
8408
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8407
diff changeset
32 #include <ngx_event_quic_connid.h>
8410
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8409
diff changeset
33 #include <ngx_event_quic_streams.h>
8413
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8412
diff changeset
34 #include <ngx_event_quic_ssl.h>
8412
e19723c40d28 QUIC: separate files for tokens related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8411
diff changeset
35 #include <ngx_event_quic_tokens.h>
8411
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
36 #include <ngx_event_quic_ack.h>
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
37 #include <ngx_event_quic_output.h>
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
38 #include <ngx_event_quic_socket.h>
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
40
8498
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8493
diff changeset
41 /* RFC 9002, 6.2.2. Handshakes and New Paths: kInitialRtt */
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
42 #define NGX_QUIC_INITIAL_RTT 333 /* ms */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
43
8408
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8407
diff changeset
44 #define NGX_QUIC_UNSET_PN (uint64_t) -1
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
45
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
46 #define NGX_QUIC_SEND_CTX_LAST (NGX_QUIC_ENCRYPTION_LAST - 1)
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
47
8387
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
48 /* 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: 8386
diff changeset
49 * so we have 3 packet number spaces:
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
50 *
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
51 * 0 - Initial
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
52 * 1 - Handshake
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
53 * 2 - 0-RTT and 1-RTT
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
54 */
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
55 #define ngx_quic_get_send_ctx(qc, level) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
56 ((level) == ssl_encryption_initial) ? &((qc)->send_ctx[0]) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
57 : (((level) == ssl_encryption_handshake) ? &((qc)->send_ctx[1]) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
58 : &((qc)->send_ctx[2]))
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8386
diff changeset
59
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
60 #define ngx_quic_get_connection(c) \
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
61 (((c)->udp) ? (((ngx_quic_socket_t *)((c)->udp))->quic) : NULL)
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
62
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
63 #define ngx_quic_get_socket(c) ((ngx_quic_socket_t *)((c)->udp))
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
64
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
66 struct ngx_quic_client_id_s {
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67 ngx_queue_t queue;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68 uint64_t seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
69 size_t len;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
70 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
71 u_char sr_token[NGX_QUIC_SR_TOKEN_LEN];
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
72 ngx_uint_t refcnt;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
73 };
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
74
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
75
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
76 struct ngx_quic_server_id_s {
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
77 uint64_t seqnum;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
78 size_t len;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
79 u_char id[NGX_QUIC_CID_LEN_MAX];
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
80 };
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
81
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
83 struct ngx_quic_path_s {
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
84 ngx_queue_t queue;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
85 struct sockaddr *sockaddr;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
86 socklen_t socklen;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
87 ngx_uint_t state;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
88 ngx_msec_t expires;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
89 ngx_uint_t tries;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
90 off_t sent;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
91 off_t received;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
92 u_char challenge1[8];
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
93 u_char challenge2[8];
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
94 ngx_uint_t refcnt;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
95 uint64_t seqnum;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
96 time_t validated_at;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
97 ngx_str_t addr_text;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
98 u_char text[NGX_SOCKADDR_STRLEN];
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
99 };
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
100
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
101
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
102 struct ngx_quic_socket_s {
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103 ngx_udp_connection_t udp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104 ngx_quic_connection_t *quic;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 ngx_queue_t queue;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
106
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
107 ngx_quic_server_id_t sid;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
108
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
109 ngx_quic_path_t *path;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
110 ngx_quic_client_id_t *cid;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
111 };
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
115 ngx_rbtree_t tree;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
116 ngx_rbtree_node_t sentinel;
8552
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8547
diff changeset
117 ngx_queue_t uninitialized;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
118
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 uint64_t sent;
8492
af33d1ef1c3c QUIC: stream flow control refactored.
Roman Arutyunyan <arut@nginx.com>
parents: 8442
diff changeset
120 uint64_t recv_offset;
af33d1ef1c3c QUIC: stream flow control refactored.
Roman Arutyunyan <arut@nginx.com>
parents: 8442
diff changeset
121 uint64_t recv_window;
af33d1ef1c3c QUIC: stream flow control refactored.
Roman Arutyunyan <arut@nginx.com>
parents: 8442
diff changeset
122 uint64_t recv_last;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
123 uint64_t recv_max_data;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124 uint64_t send_max_data;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
126 uint64_t server_max_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127 uint64_t server_max_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 uint64_t server_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129 uint64_t server_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 uint64_t client_max_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 uint64_t client_max_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133 uint64_t client_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134 uint64_t client_streams_bidi;
8552
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8547
diff changeset
135
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8547
diff changeset
136 ngx_uint_t initialized;
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8547
diff changeset
137 /* unsigned initialized:1; */
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138 } ngx_quic_streams_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 size_t in_flight;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 size_t window;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 size_t ssthresh;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 ngx_msec_t recovery_start;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146 } ngx_quic_congestion_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147
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 /*
8498
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8493
diff changeset
150 * RFC 9000, 12.3. Packet Numbers
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 *
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 * 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
153 * can be processed and acknowledged. Initial packets can only be sent
8498
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8493
diff changeset
154 * with Initial packet protection keys and acknowledged in packets that
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 * are also Initial packets.
8498
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8493
diff changeset
156 */
8411
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
157 struct ngx_quic_send_ctx_s {
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158 enum ssl_encryption_level_t level;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8424
diff changeset
160 ngx_chain_t *crypto;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8424
diff changeset
161 uint64_t crypto_received;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8424
diff changeset
162 uint64_t crypto_sent;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8424
diff changeset
163
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 uint64_t pnum; /* to be sent */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 uint64_t largest_ack; /* received from peer */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 uint64_t largest_pn; /* received from peer */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167
8547
ad046179eb91 QUIC: handle EAGAIN properly on UDP sockets.
Vladimir Homutov <vl@nginx.com>
parents: 8498
diff changeset
168 ngx_queue_t frames; /* generated frames */
ad046179eb91 QUIC: handle EAGAIN properly on UDP sockets.
Vladimir Homutov <vl@nginx.com>
parents: 8498
diff changeset
169 ngx_queue_t sending; /* frames assigned to pkt */
ad046179eb91 QUIC: handle EAGAIN properly on UDP sockets.
Vladimir Homutov <vl@nginx.com>
parents: 8498
diff changeset
170 ngx_queue_t sent; /* frames waiting ACK */
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172 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
173 uint64_t largest_range;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 uint64_t first_range;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175 ngx_msec_t largest_received;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176 ngx_msec_t ack_delay_start;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177 ngx_uint_t nranges;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178 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
179 ngx_uint_t send_ack;
8411
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
180 };
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 struct ngx_quic_connection_s {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184 uint32_t version;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
186 ngx_quic_socket_t *socket;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
187 ngx_quic_socket_t *backup;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
189 ngx_queue_t sockets;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
190 ngx_queue_t paths;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 ngx_queue_t client_ids;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
192 ngx_queue_t free_sockets;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
193 ngx_queue_t free_paths;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 ngx_queue_t free_client_ids;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
195
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
196 ngx_uint_t nsockets;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197 ngx_uint_t nclient_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198 uint64_t max_retired_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199 uint64_t client_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200 uint64_t server_seqnum;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
201 uint64_t path_seqnum;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203 ngx_uint_t client_tp_done;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 ngx_quic_tp_t tp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205 ngx_quic_tp_t ctp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
206
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207 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
208
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209 ngx_quic_keys_t *keys;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 ngx_quic_conf_t *conf;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213 ngx_event_t push;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 ngx_event_t pto;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215 ngx_event_t close;
8423
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8415
diff changeset
216 ngx_event_t path_validation;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217 ngx_msec_t last_cc;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218
8493
004172345bdc QUIC: persistent congestion calculation.
Vladimir Homutov <vl@nginx.com>
parents: 8492
diff changeset
219 ngx_msec_t first_rtt;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 ngx_msec_t latest_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 ngx_msec_t avg_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222 ngx_msec_t min_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223 ngx_msec_t rttvar;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225 ngx_uint_t pto_count;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227 ngx_queue_t free_frames;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228 ngx_chain_t *free_bufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229 ngx_buf_t *free_shadow_bufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230
8645
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8644
diff changeset
231 ngx_uint_t nframes;
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
232 #ifdef NGX_QUIC_DEBUG_ALLOC
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
233 ngx_uint_t nbufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234 #endif
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236 ngx_quic_streams_t streams;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 ngx_quic_congestion_t congestion;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238
8644
6204120cf37f QUIC: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents: 8552
diff changeset
239 off_t received;
6204120cf37f QUIC: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents: 8552
diff changeset
240
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241 ngx_uint_t error;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
242 enum ssl_encryption_level_t error_level;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
243 ngx_uint_t error_ftype;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
244 const char *error_reason;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
245
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
246 ngx_uint_t shutdown_code;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
247 const char *shutdown_reason;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
248
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249 unsigned error_app:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
250 unsigned send_timer_set:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
251 unsigned closing:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252 unsigned shutdown:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253 unsigned draining:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254 unsigned key_phase:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255 unsigned validated:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
256 };
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
257
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258
8413
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8412
diff changeset
259 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: 8412
diff changeset
260 ngx_quic_tp_t *ctp);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8412
diff changeset
261 void ngx_quic_discard_ctx(ngx_connection_t *c,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents: 8412
diff changeset
262 enum ssl_encryption_level_t level);
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 void ngx_quic_close_connection(ngx_connection_t *c, ngx_int_t rc);
8411
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
264 void ngx_quic_shutdown_quic(ngx_connection_t *c);
8386
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265
8411
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
266 #if (NGX_DEBUG)
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
267 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: 8410
diff changeset
268 #else
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
269 #define ngx_quic_connstate_dbg(c)
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
270 #endif
bc910a5ec737 QUIC: separate files for output and ack related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8410
diff changeset
271
8407
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8387
diff changeset
272 #endif /* _NGX_EVENT_QUIC_CONNECTION_H_INCLUDED_ */