aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
...
| * | | | | | | | | | | | | | | HTTP/3: reordered H3_MISSING_SETTINGS and H3_FRAME_UNEXPECTED.Roman Arutyunyan2021-06-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The quic-http-34 is ambiguous as to what error should be generated for the first frame in control stream: Each side MUST initiate a single control stream at the beginning of the connection and send its SETTINGS frame as the first frame on this stream. If the first frame of the control stream is any other frame type, this MUST be treated as a connection error of type H3_MISSING_SETTINGS. If a DATA frame is received on a control stream, the recipient MUST respond with a connection error of type H3_FRAME_UNEXPECTED. If a HEADERS frame is received on a control stream, the recipient MUST respond with a connection error of type H3_FRAME_UNEXPECTED. Previously, H3_FRAME_UNEXPECTED had priority, but now H3_MISSING_SETTINGS has. The arguments in the spec sound more compelling for H3_MISSING_SETTINGS.
| * | | | | | | | | | | | | | | QUIC: improved errors readability.Vladimir Homutov2021-06-10
| | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | QUIC: persistent congestion calculation.Vladimir Homutov2021-06-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to RFC 9002 (quic-recovery) 7.6.
| * | | | | | | | | | | | | | | QUIC: stream flow control refactored.Roman Arutyunyan2021-06-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Function ngx_quic_control_flow() is introduced. This functions does both MAX_DATA and MAX_STREAM_DATA flow controls. The function is called from STREAM and RESET_STREAM frame handlers. Previously, flow control was only accounted for STREAM. Also, MAX_DATA flow control was not accounted at all. - Function ngx_quic_update_flow() is introduced. This function advances flow control windows and sends MAX_DATA/MAX_STREAM_DATA. The function is called from RESET_STREAM frame handler, stream cleanup handler and stream recv() handler.
| * | | | | | | | | | | | | | | HTTP/3: undo 5a92523e50d3 after parser refactoring (e1eb7f4ca9f1).Sergey Kandaurov2021-06-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is no longer needed after HTTP/3 request processing has moved into its own function ngx_http_v3_process_header().
| * | | | | | | | | | | | | | | HTTP/3: fixed parsing encoder insertions with empty header value.Sergey Kandaurov2021-06-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When starting processing a new encoder instruction, the header state is not memzero'ed because generally it's burdensome. If the header value is empty, this resulted in inserting a stale value left from the previous instruction. Based on a patch by Zhiyong Sun.
| * | | | | | | | | | | | | | | HTTP/3: removed $http3 that served its purpose.Sergey Kandaurov2021-05-31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To specify final protocol version by hand: add_header Alt-Svc h3=":443";
| * | | | | | | | | | | | | | | README: updated after QUIC RFC publication, nginx 1.21 rebase.Sergey Kandaurov2021-05-28
| | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | Merged with the default branch.Sergey Kandaurov2021-05-28
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \
| * | | | | | | | | | | | | | | | HTTP/3: fixed Insert With Name Reference index processing.Sergey Kandaurov2021-05-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Based on a patch by Zhiyong Sun.
| * | | | | | | | | | | | | | | | QUIC: call stream read handler on new data arrival.Roman Arutyunyan2021-05-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was broken in b3f6ad181df4.
| * | | | | | | | | | | | | | | | QUIC: make sure stream data size is lower than final size.Roman Arutyunyan2021-05-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As per quic-transport 34, FINAL_SIZE_ERROR is generated if an endpoint received a STREAM frame or a RESET_STREAM frame containing a final size that was lower than the size of stream data that was already received.
| * | | | | | | | | | | | | | | | QUIC: refactored CRYPTO and STREAM buffer ordering.Roman Arutyunyan2021-05-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Generic function ngx_quic_order_bufs() is introduced. This function creates and maintains a chain of buffers with holes. Holes are marked with b->sync flag. Several buffers and holes in this chain may share the same underlying memory buffer. When processing STREAM frames with this function, frame data is copied only once to the right place in the stream input chain. Previously data could be copied twice. First when buffering an out-of-order frame data, and then when filling stream buffer from ordered frame queue. Now there's only one data chain for both tasks.
| * | | | | | | | | | | | | | | | QUIC: unroll and inline ngx_quic_varint_len()/ngx_quic_build_int().Sergey Kandaurov2021-05-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to profiling, those two are among most frequently called, so inlining is generally useful, and unrolling should help with it. Further, this fixes undefined behaviour seen with invalid values. Inspired by Yu Liu.
| * | | | | | | | | | | | | | | | HTTP/3: fixed server push after 9ec3e71f8a61.Roman Arutyunyan2021-05-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When using server push, a segfault occured because ngx_http_v3_create_push_request() accessed ngx_http_v3_session_t object the old way. Prior to 9ec3e71f8a61, HTTP/3 session was stored directly in c->data. Now it's referenced by the v3_session field of ngx_http_connection_t.
| * | | | | | | | | | | | | | | | QUIC: generic buffering for stream input.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously each stream had an input buffer. Now memory is allocated as bytes arrive. Generic buffering mechanism is used for this.
| * | | | | | | | | | | | | | | | QUIC: simplified sending 1-RTT only frames.Sergey Kandaurov2021-05-05
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: relaxed client id requirements.Vladimir Homutov2021-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Client IDs cannot be reused on different paths. This change allows to reuse client id previosly seen on the same path (but with different dcid) in case when no unused client IDs are available.
| * | | | | | | | | | | | | | | | QUIC: consider NEW_CONNECTION_ID a probing frame.Vladimir Homutov2021-05-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to quic-transport, 9.1: PATH_CHALLENGE, PATH_RESPONSE, NEW_CONNECTION_ID, and PADDING frames are "probing frames", and all other frames are "non-probing frames".
| * | | | | | | | | | | | | | | | HTTP/3: clean up table from session cleanup handler.Roman Arutyunyan2021-04-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously table had a separate cleanup handler.
| * | | | | | | | | | | | | | | | HTTP/3: moved session initialization to a separate file.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously it was in ngx_http_v3_streams.c, but it's unrelated to streams.
| * | | | | | | | | | | | | | | | HTTP/3: separate header files for existing source files.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | HTTP/3: moved parsing uni stream type to ngx_http_v3_parse.c.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously it was parsed in ngx_http_v3_streams.c, while the streams were parsed in ngx_http_v3_parse.c. Now all parsing is done in one file. This simplifies parsing API and cleans up ngx_http_v3_streams.c.
| * | | | | | | | | | | | | | | | HTTP/3: renamed ngx_http_v3_client_XXX() functions.Roman Arutyunyan2021-04-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The functions are renamed to ngx_http_v3_send_XXX() similar to ngx_http_v3_send_settings() and ngx_http_v3_send_goaway().
| * | | | | | | | | | | | | | | | HTTP/3: renamed ngx_http_v3_connection_t to ngx_http_v3_session_t.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | HTTP/3: reference h3c directly from ngx_http_connection_t.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, an ngx_http_v3_connection_t object was created for HTTP/3 and then assinged to c->data instead of the generic ngx_http_connection_t object. Now a direct reference is added to ngx_http_connection_t, which is less confusing and does not require a flag for http3.
| * | | | | | | | | | | | | | | | HTTP/3: ngx_http_v3_get_session() macro.Roman Arutyunyan2021-04-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's used instead of accessing c->quic->parent->data directly. Apart from being simpler, it allows to change the way session is stored in the future by changing the macro.
| * | | | | | | | | | | | | | | | HTTP/3: moved Stream Cancellation stub to ngx_http_v3_streams.c.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | HTTP/3: fixed decoder stream stubs.Roman Arutyunyan2021-05-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now ngx_http_v3_ack_header() and ngx_http_v3_inc_insert_count() always generate decoder error. Our implementation does not use dynamic tables and does not expect client to send Section Acknowledgement or Insert Count Increment. Stream Cancellation, on the other hand, is allowed to be sent anyway. This is why ngx_http_v3_cancel_stream() does not return an error.
| * | | | | | | | | | | | | | | | HTTP/3: reject empty DATA and HEADERS frames on control stream.Roman Arutyunyan2021-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously only non-empty frames were rejected.
| * | | | | | | | | | | | | | | | QUIC: fixed build with NGX_QUIC_DEBUG_ALLOC enabled.Vladimir Homutov2021-04-28
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: connection migration.Vladimir Homutov2021-04-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The patch adds proper transitions between multiple networking addresses that can be used by a single quic connection. New networking paths are validated using PATH_CHALLENGE/PATH_RESPONSE frames.
| * | | | | | | | | | | | | | | | HTTP/3: adjusted control stream parsing.Vladimir Homutov2021-04-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7.2.1: If a DATA frame is received on a control stream, the recipient MUST respond with a connection error of type H3_FRAME_UNEXPECTED; 7.2.2: If a HEADERS frame is received on a control stream, the recipient MUST respond with a connection error (Section 8) of type H3_FRAME_UNEXPECTED.
| * | | | | | | | | | | | | | | | QUIC: renamed stream variables from sn to qs.Roman Arutyunyan2021-04-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently both names are used which is confusing. Historically these were different objects, but now it's the same one. The name qs (quic stream) makes more sense than sn (stream node).
| * | | | | | | | | | | | | | | | QUIC: renamed stream field from c to connection.Roman Arutyunyan2021-04-19
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: fixed permitted packet types for PATH_RESPONSE.Sergey Kandaurov2021-04-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PATH_RESPONSE was explicitly forbidden in 0-RTT since at least draft-22, but the Frame Types table was not updated until recently while in IESG evaluation.
| * | | | | | | | | | | | | | | | QUIC: added missing checks for limits in stream frames parsing.Vladimir Homutov2021-04-19
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: fixed parsing of unknown frame types.Vladimir Homutov2021-04-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ngx_quic_frame_allowed() function only expects known frame types.
| * | | | | | | | | | | | | | | | QUIC: avoid sending extra frames in case of error.Vladimir Homutov2021-04-15
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: normalize header inclusion.Sergey Kandaurov2021-04-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Stop including QUIC headers with no user-serviceable parts inside. This allows to provide a much cleaner QUIC interface. To cope with that, ngx_quic_derive_key() is now explicitly exported for v3 and quic modules. Additionally, this completely hides the ngx_quic_keys_t internal type.
| * | | | | | | | | | | | | | | | QUIC: ngx_quic_frames_stream_t made opaque.Sergey Kandaurov2021-04-13
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: separate files for SSL library interfaces.Vladimir Homutov2021-04-14
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: separate files for tokens related processing.Vladimir Homutov2021-04-13
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: separate files for output and ack related processing.Vladimir Homutov2021-04-13
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: separate files for stream related processing.Vladimir Homutov2021-04-13
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: separate files for frames related processing.Vladimir Homutov2021-04-13
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: separate files for connection id related processing.Vladimir Homutov2021-04-13
| | | | | | | | | | | | | | | | |
| * | | | | | | | | | | | | | | | QUIC: headers cleanup.Vladimir Homutov2021-04-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The "ngx_event_quic.h" header file now contains only public definitions, used by modules. All internal definitions are moved into the "ngx_event_quic_connection.h" header file.
| * | | | | | | | | | | | | | | | QUIC: separate function for connection ids initialization.Vladimir Homutov2021-04-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The function correctly cleans up resources in case of failure to create initial server id: it removes previously created udp node for odcid from listening rbtree.
| * | | | | | | | | | | | | | | | QUIC: fixed ngx_quic_send_ack_range() function.Vladimir Homutov2021-04-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Created frame was not added to the output queue.