comparison src/http/v3/ngx_http_v3.h @ 8903:0d3bf08eaac0 quic

HTTP/3: allowed QUIC stream connection reuse. A QUIC stream connection is treated as reusable until first bytes of request arrive, which is also when the request object is now allocated. A connection closed as a result of draining, is reset with the error code H3_REQUEST_REJECTED. Such behavior is allowed by quic-http-34: Once a request stream has been opened, the request MAY be cancelled by either endpoint. Clients cancel requests if the response is no longer of interest; servers cancel requests if they are unable to or choose not to respond. When the server cancels a request without performing any application processing, the request is considered "rejected." The server SHOULD abort its response stream with the error code H3_REQUEST_REJECTED. The client can treat requests rejected by the server as though they had never been sent at all, thereby allowing them to be retried later.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 18 Oct 2021 15:47:06 +0300
parents 72b304f6207c
children 606bf52888d2
comparison
equal deleted inserted replaced
8902:925572184d4a 8903:0d3bf08eaac0
88 ngx_quic_finalize_connection(c->quic->parent, code, reason) 88 ngx_quic_finalize_connection(c->quic->parent, code, reason)
89 89
90 #define ngx_http_v3_shutdown_connection(c, code, reason) \ 90 #define ngx_http_v3_shutdown_connection(c, code, reason) \
91 ngx_quic_shutdown_connection(c->quic->parent, code, reason) 91 ngx_quic_shutdown_connection(c->quic->parent, code, reason)
92 92
93 #define ngx_http_v3_connection(c) \
94 ((c)->quic ? ngx_http_quic_get_connection(c)->addr_conf->http3 : 0)
95
93 96
94 typedef struct { 97 typedef struct {
95 size_t max_table_capacity; 98 size_t max_table_capacity;
96 ngx_uint_t max_blocked_streams; 99 ngx_uint_t max_blocked_streams;
97 ngx_uint_t max_concurrent_pushes; 100 ngx_uint_t max_concurrent_pushes;
136 ngx_connection_t *known_streams[NGX_HTTP_V3_MAX_KNOWN_STREAM]; 139 ngx_connection_t *known_streams[NGX_HTTP_V3_MAX_KNOWN_STREAM];
137 }; 140 };
138 141
139 142
140 void ngx_http_v3_init(ngx_connection_t *c); 143 void ngx_http_v3_init(ngx_connection_t *c);
144 void ngx_http_v3_reset_connection(ngx_connection_t *c);
141 ngx_int_t ngx_http_v3_init_session(ngx_connection_t *c); 145 ngx_int_t ngx_http_v3_init_session(ngx_connection_t *c);
142 ngx_int_t ngx_http_v3_check_flood(ngx_connection_t *c); 146 ngx_int_t ngx_http_v3_check_flood(ngx_connection_t *c);
143 147
144 ngx_int_t ngx_http_v3_read_request_body(ngx_http_request_t *r); 148 ngx_int_t ngx_http_v3_read_request_body(ngx_http_request_t *r);
145 ngx_int_t ngx_http_v3_read_unbuffered_request_body(ngx_http_request_t *r); 149 ngx_int_t ngx_http_v3_read_unbuffered_request_body(ngx_http_request_t *r);