annotate src/event/ngx_event_quic.h @ 8224:ae35ccba7aa6 quic

Extracted transport part of the code into separate file. All code dealing with serializing/deserializing is moved int srv/event/ngx_event_quic_transport.c/h file. All macros for dealing with data are internal to source file. The header file exposes frame types and error codes. The exported functions are currently packet header parsers and writers and frames parser/writer. The ngx_quic_header_t structure is updated with 'log' member. This avoids passing extra argument to parsing functions that need to report errors.
author Vladimir Homutov <vl@nginx.com>
date Wed, 18 Mar 2020 12:58:27 +0300
parents 61f9b873e2e7
children e9891e8ee975
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8167
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2 /*
8182
b28ea685a56e Moved all QUIC code into ngx_event_quic.c
Vladimir Homutov <vl@nginx.com>
parents: 8181
diff changeset
3 * Copyright (C) Nginx, Inc.
8167
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 */
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7 #ifndef _NGX_EVENT_QUIC_H_INCLUDED_
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 #define _NGX_EVENT_QUIC_H_INCLUDED_
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10
8170
53a5cdbe500c QUIC add_handshake_data callback, varint routines.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8169
diff changeset
11 #include <ngx_event_openssl.h>
53a5cdbe500c QUIC add_handshake_data callback, varint routines.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8169
diff changeset
12
8221
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
13
8224
ae35ccba7aa6 Extracted transport part of the code into separate file.
Vladimir Homutov <vl@nginx.com>
parents: 8223
diff changeset
14 #define quic_version 0xff000018 /* draft-24 (ngtcp2) */
ae35ccba7aa6 Extracted transport part of the code into separate file.
Vladimir Homutov <vl@nginx.com>
parents: 8223
diff changeset
15 //#define quic_version 0xff00001b /* draft-27 (FFN 76) */
8221
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
16
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
17
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
18 struct ngx_quic_stream_s {
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
19 uint64_t id;
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
20 ngx_uint_t unidirectional:1;
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
21 ngx_connection_t *parent;
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8208
diff changeset
22 void *data;
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
23 };
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
24
8168
b507592c15a7 Server Initial Keys.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8167
diff changeset
25
8182
b28ea685a56e Moved all QUIC code into ngx_event_quic.c
Vladimir Homutov <vl@nginx.com>
parents: 8181
diff changeset
26 void ngx_quic_init_ssl_methods(SSL_CTX* ctx);
8167
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
28 void ngx_quic_run(ngx_connection_t *c, ngx_ssl_t *ssl, ngx_msec_t timeout,
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
29 ngx_connection_handler_pt handler);
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
30 ngx_connection_t *ngx_quic_create_uni_stream(ngx_connection_t *c);
8167
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
8221
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
32
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
33 /********************************* DEBUG *************************************/
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
34
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
35 #if (NGX_DEBUG)
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
36
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
37 #define ngx_quic_hexdump(log, fmt, data, len, ...) \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
38 do { \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
39 ngx_int_t m; \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
40 u_char buf[2048]; \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
41 \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
42 if (log->log_level & NGX_LOG_DEBUG_EVENT) { \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
43 m = ngx_hex_dump(buf, (u_char *) data, ngx_min(len, 1024)) - buf; \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
44 ngx_log_debug(NGX_LOG_DEBUG_EVENT, log, 0, \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
45 "%s: " fmt " %*s%s, len: %uz", \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
46 __FUNCTION__, __VA_ARGS__, m, buf, \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
47 len < 2048 ? "" : "...", len); \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
48 } \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
49 } while (0)
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
50
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
51 #else
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
52
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
53 #define ngx_quic_hexdump(log, fmt, data, len, ...)
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
54
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
55 #endif
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
56
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
57 #define ngx_quic_hexdump0(log, fmt, data, len) \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
58 ngx_quic_hexdump(log, fmt "%s", data, len, "") \
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
59
69345a26ba69 Split transport and crypto parts into separate files.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
60
8167
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 #endif /* _NGX_EVENT_QUIC_H_INCLUDED_ */