summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
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.
2021-02-17HTTP/3: introduced ngx_http_v3_parse_t structure.Roman Arutyunyan4-23/+16
The structure is used to parse an HTTP/3 request. An object of this type is added to ngx_http_request_t instead of h3_parse generic pointer. Also, the new field is located outside of the request ephemeral zone to keep it safe after request headers are parsed.
2021-02-16HTTP/3: removed http3_max_field_size.Roman Arutyunyan3-19/+5
Instead, size of one large_client_header_buffers buffer is used.
2021-02-17Merged with the default branch.Sergey Kandaurov13-180/+179
2021-02-17QUIC: added ability to reset a stream.Sergey Kandaurov3-0/+71
2021-02-15QUIC: fixed indentation.Sergey Kandaurov5-29/+28
2021-02-15QUIC: added check of client transport parameters.Vladimir Homutov1-36/+86
Parameters sent by client are verified and defaults are set for parameters omitted by client.
2021-02-11HTTP/2: removed http2_max_field_size and http2_max_header_size.Maxim Dounin3-29/+32
Instead, size of one large_client_header_buffers buffer and all large client header buffers are used.