annotate src/event/quic/ngx_event_quic_connection.h @ 8750:41807e581de9 quic

QUIC: separate files for stream related processing.
author Vladimir Homutov <vl@nginx.com>
date Tue, 13 Apr 2021 14:40:00 +0300
parents 660c4a2f95f3
children bc910a5ec737
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
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
14 #include <ngx_event_quic_transport.h>
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
15 #include <ngx_event_quic_protection.h>
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
17 typedef struct ngx_quic_connection_s ngx_quic_connection_t;
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
18
8749
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8748
diff changeset
19 #include <ngx_event_quic_frames.h>
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
20 #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
21 #include <ngx_event_quic_connid.h>
8750
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8749
diff changeset
22 #include <ngx_event_quic_streams.h>
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
25 #define NGX_QUIC_MAX_SHORT_HEADER 25 /* 1 flags + 20 dcid + 4 pn */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
26 #define NGX_QUIC_MAX_LONG_HEADER 56
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
27 /* 1 flags + 4 version + 2 x (1 + 20) s/dcid + 4 pn + 4 len + token len */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
28
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
29 #define NGX_QUIC_MAX_UDP_PAYLOAD_OUT 1252
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
30 #define NGX_QUIC_MAX_UDP_PAYLOAD_OUT6 1232
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
31
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
32 #define NGX_QUIC_RETRY_TOKEN_LIFETIME 3 /* seconds */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
33 #define NGX_QUIC_NEW_TOKEN_LIFETIME 600 /* seconds */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
34 #define NGX_QUIC_RETRY_BUFFER_SIZE 256
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
35 /* 1 flags + 4 version + 3 x (1 + 20) s/o/dcid + itag + token(64) */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
36 #define NGX_QUIC_MAX_TOKEN_SIZE 64
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
37 /* SHA-1(addr)=20 + sizeof(time_t) + retry(1) + odcid.len(1) + odcid */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
38
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
39 /* quic-recovery, section 6.2.2, kInitialRtt */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
40 #define NGX_QUIC_INITIAL_RTT 333 /* ms */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
41
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
42 /* quic-recovery, section 6.1.1, Packet Threshold */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
43 #define NGX_QUIC_PKT_THR 3 /* packets */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
44 /* quic-recovery, section 6.1.2, Time Threshold */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
45 #define NGX_QUIC_TIME_THR 1.125
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
46 #define NGX_QUIC_TIME_GRANULARITY 1 /* ms */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
47
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
48 #define NGX_QUIC_CC_MIN_INTERVAL 1000 /* 1s */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
49
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
50
8748
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8747
diff changeset
51 #define NGX_QUIC_UNSET_PN (uint64_t) -1
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
52
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
53 #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
54
8737
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
55 /* 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
56 * so we have 3 packet number spaces:
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 * 0 - Initial
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
59 * 1 - Handshake
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
60 * 2 - 0-RTT and 1-RTT
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
61 */
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
62 #define ngx_quic_get_send_ctx(qc, level) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
63 ((level) == ssl_encryption_initial) ? &((qc)->send_ctx[0]) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
64 : (((level) == ssl_encryption_handshake) ? &((qc)->send_ctx[1]) \
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
65 : &((qc)->send_ctx[2]))
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
66
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
67 #define ngx_quic_get_connection(c) \
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
68 (((c)->udp) ? (((ngx_quic_server_id_t *)((c)->udp))->quic) : NULL)
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
69
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
70
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
71 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
72 ngx_queue_t queue;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73 uint64_t seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
74 size_t len;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
75 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
76 u_char sr_token[NGX_QUIC_SR_TOKEN_LEN];
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
77 } ngx_quic_client_id_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
78
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
79
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
80 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
81 ngx_udp_connection_t udp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82 ngx_quic_connection_t *quic;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
83 ngx_queue_t queue;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
84 uint64_t seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
85 size_t len;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
86 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
87 } ngx_quic_server_id_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
88
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
89
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91 ngx_rbtree_t tree;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92 ngx_rbtree_node_t sentinel;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 uint64_t received;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95 uint64_t sent;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
96 uint64_t recv_max_data;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 uint64_t send_max_data;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99 uint64_t server_max_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
100 uint64_t server_max_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
101 uint64_t server_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102 uint64_t server_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104 uint64_t client_max_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 uint64_t client_max_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
106 uint64_t client_streams_uni;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
107 uint64_t client_streams_bidi;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
108 } ngx_quic_streams_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
110
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
111 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112 size_t in_flight;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113 size_t window;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114 size_t ssthresh;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
115 ngx_msec_t recovery_start;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
116 } ngx_quic_congestion_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
117
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 /*
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
120 * 12.3. Packet Numbers
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
121 *
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
122 * 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
123 * can be processed and acknowledged. Initial packets can only be sent
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124 * with Initial packet protection keys and acknowledged in packets which
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125 * are also Initial packets.
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
126 */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127 typedef struct {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 enum ssl_encryption_level_t level;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130 uint64_t pnum; /* to be sent */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 uint64_t largest_ack; /* received from peer */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 uint64_t largest_pn; /* received from peer */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134 ngx_queue_t frames;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135 ngx_queue_t sent;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137 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
138 uint64_t largest_range;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139 uint64_t first_range;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140 ngx_msec_t largest_received;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 ngx_msec_t ack_delay_start;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 ngx_uint_t nranges;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 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
144 ngx_uint_t send_ack;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 } ngx_quic_send_ctx_t;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146
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 struct ngx_quic_connection_s {
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
149 uint32_t version;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 ngx_str_t scid; /* initial client ID */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 ngx_str_t dcid; /* server (our own) ID */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
153 ngx_str_t odcid; /* original server ID */
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
154
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 struct sockaddr *sockaddr;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 socklen_t socklen;
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 ngx_queue_t client_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 ngx_queue_t server_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160 ngx_queue_t free_client_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161 ngx_queue_t free_server_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162 ngx_uint_t nclient_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163 ngx_uint_t nserver_ids;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 uint64_t max_retired_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 uint64_t client_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 uint64_t server_seqnum;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168 ngx_uint_t client_tp_done;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 ngx_quic_tp_t tp;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170 ngx_quic_tp_t ctp;
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 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
173
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 ngx_quic_frames_stream_t crypto[NGX_QUIC_ENCRYPTION_LAST];
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176 ngx_quic_keys_t *keys;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178 ngx_quic_conf_t *conf;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
179
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
180 ngx_event_t push;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181 ngx_event_t pto;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182 ngx_event_t close;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 ngx_msec_t last_cc;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 ngx_msec_t latest_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 ngx_msec_t avg_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 ngx_msec_t min_rtt;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188 ngx_msec_t rttvar;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190 ngx_uint_t pto_count;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 ngx_queue_t free_frames;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 ngx_chain_t *free_bufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 ngx_buf_t *free_shadow_bufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196 #ifdef NGX_QUIC_DEBUG_ALLOC
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197 ngx_uint_t nframes;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198 ngx_uint_t nbufs;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199 #endif
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201 ngx_quic_streams_t streams;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202 ngx_quic_congestion_t congestion;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203 off_t received;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205 ngx_uint_t error;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
206 enum ssl_encryption_level_t error_level;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207 ngx_uint_t error_ftype;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 const char *error_reason;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 ngx_uint_t shutdown_code;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 const char *shutdown_reason;
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 unsigned error_app:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 unsigned send_timer_set:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215 unsigned closing:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 unsigned shutdown:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217 unsigned draining:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 unsigned key_phase:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219 unsigned validated:1;
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 };
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
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223 void ngx_quic_close_connection(ngx_connection_t *c, ngx_int_t rc);
8737
76f476ce4d31 QUIC: distinct files for connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8736
diff changeset
224 ngx_msec_t ngx_quic_pto(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx);
8736
714e9af983de QUIC: separate header for ngx_quic_connection_t.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225
8748
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8747
diff changeset
226 ngx_int_t ngx_quic_new_sr_token(ngx_connection_t *c, ngx_str_t *cid,
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8747
diff changeset
227 u_char *secret, u_char *token);
e0cb1e58ca13 QUIC: separate files for connection id related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8747
diff changeset
228
8750
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8749
diff changeset
229 ngx_int_t ngx_quic_output(ngx_connection_t *c);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8749
diff changeset
230 void ngx_quic_shutdown_quic(ngx_connection_t *c);
41807e581de9 QUIC: separate files for stream related processing.
Vladimir Homutov <vl@nginx.com>
parents: 8749
diff changeset
231
8747
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
232 /********************************* DEBUG *************************************/
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
233
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
234 /* #define NGX_QUIC_DEBUG_PACKETS */ /* dump packet contents */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
235 /* #define NGX_QUIC_DEBUG_FRAMES */ /* dump frames contents */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
236 /* #define NGX_QUIC_DEBUG_ALLOC */ /* log frames and bufs alloc */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
237 /* #define NGX_QUIC_DEBUG_CRYPTO */
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
238
c8bda5e1e662 QUIC: headers cleanup.
Vladimir Homutov <vl@nginx.com>
parents: 8737
diff changeset
239 #endif /* _NGX_EVENT_QUIC_CONNECTION_H_INCLUDED_ */