summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2021-03-31QUIC: distinct files for connection migration.Vladimir Homutov4-48/+92
The connection migration-related code from quic.c with dependencies is moved into separate file.
2021-03-31QUIC: separate header for ngx_quic_connection_t.Vladimir Homutov2-161/+183
2021-04-02QUIC: simplified quic connection dispatching.Vladimir Homutov3-15/+24
Currently listener contains rbtree with multiple nodes for single QUIC connection: each corresponding to specific server id. Each udp node points to same ngx_connection_t, which points to QUIC connection via c->udp field. Thus when an event handler is called, it only gets ngx_connection_t with c->udp pointing to QUIC connection. This makes it hard to obtain actual node which was used to dispatch packet (it requires to repeat DCID lookup). Additionally, ngx_quic_connection_t->udp field is only needed to keep a pointer in c->udp. The node is not added into the tree and does not carry useful information.
2021-04-02UDP: extended datagram context.Vladimir Homutov3-30/+34
Sometimes it is required to process datagram properties at higher level (i.e. QUIC is interested in source address which may change and IP options). The patch adds ngx_udp_dgram_t structure used to pass packet-related information in c->udp.
2021-03-30QUIC: fixed udp buffer initialization.Vladimir Homutov1-0/+2
The start field is used to check if the QUIC packet is first in the datagram. This fixes stateless reset detection.
2021-03-30QUIC: do not handle empty dcid.Roman Arutyunyan1-64/+31
When a QUIC datagram arrives, its DCID is never empty. Previously, the case of empty DCID was handled. Now this code is simplified.
2021-03-11QUIC: do not reallocate c->sockaddr.Roman Arutyunyan1-8/+10
When a connection is created, enough memory is allocated to accomodate any future address change.
2021-03-11QUIC: do not copy input data.Roman Arutyunyan1-21/+6
Previously, when a new datagram arrived, data were copied from the UDP layer to the QUIC layer via c->recv() interface. Now UDP buffer is accessed directly.
2021-03-31QUIC: HKDF API compatibility with OpenSSL master branch.Sergey Kandaurov1-0/+2
OpenSSL 3.0 started to require HKDF-Extract output PRK length pointer used to represent the amount of data written to contain the length of the key buffer before the call. EVP_PKEY_derive() documents this. See HKDF_Extract() internal implementation update in this change: https://github.com/openssl/openssl/commit/5a285ad
2021-03-30Merged with the default branch.Sergey Kandaurov13-76/+104
2021-03-15HTTP/3: fixed $connection_requests.Roman Arutyunyan1-0/+1
Previously, the value was always "1".
2021-03-22HTTP/3: set initial_max_streams_uni default value to 3.Roman Arutyunyan1-1/+1
The maximum number of HTTP/3 unidirectional client streams we can handle is 3: control, decode and encode. These streams are never closed.
2021-03-30HTTP/3: keepalive timeout.Roman Arutyunyan3-0/+85
This timeout limits the time when no client request streams exist.
2021-03-15QUIC: connection shutdown.Roman Arutyunyan5-6/+85
The function ngx_quic_shutdown_connection() waits until all non-cancelable streams are closed, and then closes the connection. In HTTP/3 cancelable streams are all unidirectional streams except push streams. The function is called from HTTP/3 when client reaches keepalive_requests.
2021-03-15HTTP/3: send GOAWAY when last request is accepted.Roman Arutyunyan3-0/+56
The last request in connection is determined according to the keepalive_requests directive. Requests beyond keepalive_requests are rejected.
2021-03-23Core: fixed build with BPF on non-64bit platforms (ticket #2152).Vladimir Homutov1-8/+8
2021-03-16QUIC: bpf code regenerated.Vladimir Homutov1-11/+10
2021-03-15QUIC: fixed key extraction in bpf.Vladimir Homutov1-12/+12
In case of long header packets, dcid length was not read correctly. While there, macros to parse uint64 was fixed as well as format specifiers to print it in debug mode. Thanks to Gao Yan <gaoyan09@baidu.com>.
2021-03-16HTTP/3: do not push until a MAX_PUSH_ID frame is received.Sergey Kandaurov2-3/+6
Fixes interop with quic-go that doesn't send MAX_PUSH_ID.
2021-03-16QUIC: fixed hq ALPN id for the final draft.Sergey Kandaurov1-1/+1
It was an agreement to use "hq-interop"[1] for interoperability testing. [1] https://github.com/quicwg/base-drafts/wiki/ALPN-IDs-used-with-QUIC
2021-03-16QUIC: fixed expected TLS codepoint with final draft and BoringSSL.Sergey Kandaurov1-0/+4
A reasonable codepoint is always set[1] explicitly so that it doesn't depend on the default library value that may change[2] in the future. [1] https://boringssl.googlesource.com/boringssl/+/3d8b8c3d [2] https://boringssl.googlesource.com/boringssl/+/c47bfce0
2021-03-11QUIC: added error handling to ngx_hkdf_extract()/ngx_hkdf_expand().Vladimir Homutov1-16/+42
The OpenSSL variant of functions lacked proper error processing.
2021-03-11Removed "ch" argument from ngx_pass_open_channel().Ruslan Ermilov1-39/+18
2021-03-11Mail: fixed build without SSL.Maxim Dounin2-5/+7
Broken by d84f13618277 and 12ea1de7d87c (1.19.8). Reported by Sergey Osokin.
2021-03-11Version bump.Maxim Dounin1-2/+2
2021-03-10HTTP/3: fixed server push.Sergey Kandaurov1-0/+1
2021-03-10Merged with the default branch.Sergey Kandaurov22-94/+966
2021-03-05Mail: sending of the PROXY protocol to backends.Maxim Dounin2-7/+133
Activated with the "proxy_protocol" directive. Can be combined with "listen ... proxy_protocol;" and "set_real_ip_from ...;" to pass client address provided to nginx in the PROXY protocol header.
2021-03-05Mail: realip module.Maxim Dounin3-0/+275
When configured with the "set_real_ip_from", it can set client's IP address as visible in logs to the one obtained via the PROXY protocol.
2021-03-05Mail: parsing of the PROXY protocol from clients.Maxim Dounin5-4/+132
Activated with the "proxy_protocol" parameter of the "listen" directive. Obtained information is passed to the auth_http script in Proxy-Protocol-Addr, Proxy-Protocol-Port, Proxy-Protocol-Server-Addr, and Proxy-Protocol-Server-Port headers.
2021-03-05Mail: made auth http creating request easier to extend.Maxim Dounin1-13/+29
2021-03-05Mail: fixed log action after SSL handshake.Maxim Dounin1-0/+2
2021-03-05Mail: postponed session initialization under accept mutex.Maxim Dounin2-1/+29
Similarly to 40e8ce405859 in the stream module, this reduces the time accept mutex is held. This also simplifies following changes to introduce PROXY protocol support.
2021-03-05Mail: added missing event handling after reading data.Maxim Dounin5-8/+75
If we need to be notified about further events, ngx_handle_read_event() needs to be called after a read event is processed. Without this, an event can be removed from the kernel and won't be reported again, notably when using oneshot event methods, such as eventport on Solaris. For consistency, existing ngx_handle_read_event() call removed from ngx_mail_read_command(), as this call only covers one of the code paths where ngx_mail_read_command() returns NGX_AGAIN. Instead, appropriate processing added to the callers, covering all code paths where NGX_AGAIN is returned.
2021-03-05Mail: added missing event handling after blocking events.Maxim Dounin3-0/+18
As long as a read event is blocked (ignored), ngx_handle_read_event() needs to be called to make sure no further notifications will be triggered when using level-triggered event methods, such as select() or poll().
2021-03-05Events: fixed eventport handling in ngx_handle_read_event().Maxim Dounin1-1/+1
The "!rev->ready" test seems to be a typo, introduced in the original commit (719:f30b1a75fd3b). The ngx_handle_write_event() code properly tests for "rev->ready" instead. Due to this typo, read events might be unexpectedly removed during proxying after an event on the other part of the proxied connection. Catched by mail proxying tests.
2021-03-05SSL: fixed build by Sun C with old OpenSSL versions.Maxim Dounin7-14/+14
Sun C complains about "statement not reached" if a "return" is followed by additional statements.
2021-03-02Proxy: variables support in "proxy_cookie_flags" flags.Ruslan Ermilov1-26/+63
2021-03-01Introduced strerrordesc_np() support.Maxim Dounin1-1/+45
The strerrordesc_np() function, introduced in glibc 2.32, provides an async-signal-safe way to obtain error messages. This makes it possible to avoid copying error messages.
2021-03-01Improved maximum errno detection.Maxim Dounin1-6/+85
Previously, systems without sys_nerr (or _sys_nerr) were handled with an assumption that errors start at 0 and continuous. This is, however, not something POSIX requires, and not true on some platforms. Notably, on Linux, where sys_nerr is no longer available for newly linked binaries starting with glibc 2.32, there are gaps in error list, which used to stop us from properly detecting maximum errno. Further, on GNU/Hurd errors start at 0x40000001. With this change, maximum errno detection is moved to the runtime code, now able to ignore gaps, and also detects the first error if needed. This fixes observed "Unknown error" messages as seen on Linux with glibc 2.32 and on GNU/Hurd.
2021-03-01HTTP/2: client_header_timeout before first request (ticket #2142).Maxim Dounin1-2/+5
With this change, behaviour of HTTP/2 becomes even closer to HTTP/1.x, and client_header_timeout instead of keepalive_timeout is used before the first request is received. This fixes HTTP/2 connections being closed even before the first request if "keepalive_timeout 0;" was used in the configuration; the problem appeared in f790816a0e87 (1.19.7).
2021-02-20SSL: added check for debugging.Maxim Dounin1-0/+8
If debugging is not enabled, there is no need to do extra work in ngx_ssl_verify_callback() and ngx_ssl_handshake_log().
2021-02-20SSL: added missed error reporting during variables evaluation.Maxim Dounin1-4/+13
2021-02-20SSL: X509_NAME_oneline() error handling.Maxim Dounin1-5/+37
2021-02-20Version bump.Ruslan Ermilov1-2/+2
2021-02-19Updated the list of supported drafts.Sergey Kandaurov1-1/+0
2021-02-19QUIC: multiple versions support.Sergey Kandaurov4-20/+14
Draft-29 and beyond are now supported simultaneously, no need to recompile.
2021-02-18QUIC: removed support prior to draft-29.Sergey Kandaurov3-36/+4
2021-02-18QUIC: set idle timer when sending an ack-eliciting packet.Roman Arutyunyan1-5/+9
As per quic-transport-34: An endpoint also restarts its idle timer when sending an ack-eliciting packet if no other ack-eliciting packets have been sent since last receiving and processing a packet. Previously, the timer was set for any packet.
2021-02-17HTTP/3: limited client header size.Roman Arutyunyan2-0/+16
The limit is the size of all large client header buffers. Client header size is the total size of all client header names and values.