[PATCH] [nginx-quic] fix error code when reached maximum number of requests or timeout
Andrey Kolyshkin
i at morfi.ru
Thu May 27 12:16:49 UTC 2021
# HG changeset patch
# User Andrey Kolyshkin <i at morfi.ru>
# Date 1622115662 -10800
# Thu May 27 14:41:02 2021 +0300
# Branch quic
# Node ID cfb1ac5fa0f6e2b86d4e4ce51e9ce0b33f959d66
# Parent e6c26cb4d38b8cecb89f26e002bfacf11eafe4a1
fix error code when reached maximum number of requests or timeout
chrome has marked quic connection as broken after
getting NGX_HTTP_V3_ERR_NO_ERROR (0x100) as code instead of NGX_QUIC_ERR_NO_ERROR (0x0)
QUIC_SESSION_CONNECTION_CLOSE_FRAME_RECEIVED
--> close_type = "Application"
--> details = "reached maximum number of requests"
--> quic_error = 122 (QUIC_IETF_GQUIC_ERROR_MISSING)
--> quic_wire_error = 256
diff -r e6c26cb4d38b -r cfb1ac5fa0f6 src/event/quic/ngx_event_quic.c
--- a/src/event/quic/ngx_event_quic.c Thu May 27 13:29:00 2021 +0300
+++ b/src/event/quic/ngx_event_quic.c Thu May 27 14:41:02 2021 +0300
@@ -607,7 +607,7 @@
void
-ngx_quic_finalize_connection(ngx_connection_t *c, ngx_uint_t err,
+ngx_quic_finalize_connection(ngx_connection_t *c, ngx_int_t rc, ngx_uint_t err,
const char *reason)
{
ngx_quic_connection_t *qc;
@@ -618,12 +618,12 @@
qc->error_app = 1;
qc->error_ftype = 0;
- ngx_quic_close_connection(c, NGX_ERROR);
+ ngx_quic_close_connection(c, rc);
}
void
-ngx_quic_shutdown_connection(ngx_connection_t *c, ngx_uint_t err,
+ngx_quic_shutdown_connection(ngx_connection_t *c, ngx_int_t rc, ngx_uint_t err,
const char *reason)
{
ngx_quic_connection_t *qc;
@@ -633,7 +633,7 @@
qc->shutdown_code = err;
qc->shutdown_reason = reason;
- ngx_quic_shutdown_quic(c);
+ ngx_quic_shutdown_quic(c, rc);
}
@@ -1369,7 +1369,7 @@
void
-ngx_quic_shutdown_quic(ngx_connection_t *c)
+ngx_quic_shutdown_quic(ngx_connection_t *c, ngx_int_t rc)
{
ngx_rbtree_t *tree;
ngx_rbtree_node_t *node;
@@ -1397,7 +1397,7 @@
}
}
- ngx_quic_finalize_connection(c, qc->shutdown_code, qc->shutdown_reason);
+ ngx_quic_finalize_connection(c, rc, qc->shutdown_code, qc->shutdown_reason);
}
diff -r e6c26cb4d38b -r cfb1ac5fa0f6 src/event/quic/ngx_event_quic.h
--- a/src/event/quic/ngx_event_quic.h Thu May 27 13:29:00 2021 +0300
+++ b/src/event/quic/ngx_event_quic.h Thu May 27 14:41:02 2021 +0300
@@ -88,9 +88,9 @@
void ngx_quic_run(ngx_connection_t *c, ngx_quic_conf_t *conf);
ngx_connection_t *ngx_quic_open_stream(ngx_connection_t *c, ngx_uint_t bidi);
-void ngx_quic_finalize_connection(ngx_connection_t *c, ngx_uint_t err,
+void ngx_quic_finalize_connection(ngx_connection_t *c, ngx_int_t rc, ngx_uint_t err,
const char *reason);
-void ngx_quic_shutdown_connection(ngx_connection_t *c, ngx_uint_t err,
+void ngx_quic_shutdown_connection(ngx_connection_t *c, ngx_int_t rc, ngx_uint_t err,
const char *reason);
ngx_int_t ngx_quic_reset_stream(ngx_connection_t *c, ngx_uint_t err);
uint32_t ngx_quic_version(ngx_connection_t *c);
diff -r e6c26cb4d38b -r cfb1ac5fa0f6 src/event/quic/ngx_event_quic_connection.h
--- a/src/event/quic/ngx_event_quic_connection.h Thu May 27 13:29:00 2021 +0300
+++ b/src/event/quic/ngx_event_quic_connection.h Thu May 27 14:41:02 2021 +0300
@@ -251,7 +251,7 @@
void ngx_quic_discard_ctx(ngx_connection_t *c,
enum ssl_encryption_level_t level);
void ngx_quic_close_connection(ngx_connection_t *c, ngx_int_t rc);
-void ngx_quic_shutdown_quic(ngx_connection_t *c);
+void ngx_quic_shutdown_quic(ngx_connection_t *c, ngx_int_t rc);
#if (NGX_DEBUG)
void ngx_quic_connstate_dbg(ngx_connection_t *c);
diff -r e6c26cb4d38b -r cfb1ac5fa0f6 src/event/quic/ngx_event_quic_streams.c
--- a/src/event/quic/ngx_event_quic_streams.c Thu May 27 13:29:00 2021 +0300
+++ b/src/event/quic/ngx_event_quic_streams.c Thu May 27 14:41:02 2021 +0300
@@ -803,7 +803,7 @@
(void) ngx_quic_output(pc);
if (qc->shutdown) {
- ngx_quic_shutdown_quic(pc);
+ ngx_quic_shutdown_quic(pc, NGX_ERROR);
}
}
diff -r e6c26cb4d38b -r cfb1ac5fa0f6 src/http/v3/ngx_http_v3.c
--- a/src/http/v3/ngx_http_v3.c Thu May 27 13:29:00 2021 +0300
+++ b/src/http/v3/ngx_http_v3.c Thu May 27 14:41:02 2021 +0300
@@ -69,7 +69,7 @@
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 keepalive handler");
- ngx_quic_finalize_connection(c, NGX_HTTP_V3_ERR_NO_ERROR,
+ ngx_quic_finalize_connection(c, NGX_OK, NGX_HTTP_V3_ERR_NO_ERROR,
"keepalive timeout");
}
diff -r e6c26cb4d38b -r cfb1ac5fa0f6 src/http/v3/ngx_http_v3.h
--- a/src/http/v3/ngx_http_v3.h Thu May 27 13:29:00 2021 +0300
+++ b/src/http/v3/ngx_http_v3.h Thu May 27 14:41:02 2021 +0300
@@ -89,10 +89,10 @@
module)
#define ngx_http_v3_finalize_connection(c, code, reason) \
- ngx_quic_finalize_connection(c->quic->parent, code, reason)
+ ngx_quic_finalize_connection(c->quic->parent, ((code == NGX_HTTP_V3_ERR_NO_ERROR) ? NGX_OK : NGX_ERROR), code, reason)
#define ngx_http_v3_shutdown_connection(c, code, reason) \
- ngx_quic_shutdown_connection(c->quic->parent, code, reason)
+ ngx_quic_shutdown_connection(c->quic->parent, ((code == NGX_HTTP_V3_ERR_NO_ERROR) ? NGX_OK : NGX_ERROR), code, reason)
typedef struct {
More information about the nginx-devel
mailing list