From b51d0100299d0a2f35edfc1c00b3e31571bc88e5 Mon Sep 17 00:00:00 2001 From: Sergey Kandaurov Date: Wed, 3 Feb 2021 12:39:41 +0300 Subject: [PATCH] QUIC: removed redundant "app" flag from ngx_quic_close_frame_t. The flag was introduced to create type-aware CONNECTION_CLOSE frames, and now is replaced with frame type information, directly accessible. Notably, this fixes type logging for received frames in b3d9e57d0f62. --- src/event/quic/ngx_event_quic.c | 7 ++++--- src/event/quic/ngx_event_quic_transport.c | 23 +++++++++++------------ src/event/quic/ngx_event_quic_transport.h | 1 - 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c index 6a156bb71..b0628545d 100644 --- a/src/event/quic/ngx_event_quic.c +++ b/src/event/quic/ngx_event_quic.c @@ -522,7 +522,8 @@ ngx_quic_log_frame(ngx_log_t *log, ngx_quic_frame_t *f, ngx_uint_t tx) case NGX_QUIC_FT_CONNECTION_CLOSE: case NGX_QUIC_FT_CONNECTION_CLOSE_APP: p = ngx_slprintf(p, last, "CONNECTION_CLOSE%s err:%ui", - f->u.close.app ? "_APP" : "", f->u.close.error_code); + f->type == NGX_QUIC_FT_CONNECTION_CLOSE ? "" : "_APP", + f->u.close.error_code); if (f->u.close.reason.len) { p = ngx_slprintf(p, last, " %V", &f->u.close.reason); @@ -3251,10 +3252,10 @@ ngx_quic_send_cc(ngx_connection_t *c) } frame->level = qc->error_level; - frame->type = NGX_QUIC_FT_CONNECTION_CLOSE; + frame->type = qc->error_app ? NGX_QUIC_FT_CONNECTION_CLOSE_APP + : NGX_QUIC_FT_CONNECTION_CLOSE; frame->u.close.error_code = qc->error; frame->u.close.frame_type = qc->error_ftype; - frame->u.close.app = qc->error_app; if (qc->error_reason) { frame->u.close.reason.len = ngx_strlen(qc->error_reason); diff --git a/src/event/quic/ngx_event_quic_transport.c b/src/event/quic/ngx_event_quic_transport.c index 2ecfac5a4..73b146731 100644 --- a/src/event/quic/ngx_event_quic_transport.c +++ b/src/event/quic/ngx_event_quic_transport.c @@ -116,7 +116,7 @@ static size_t ngx_quic_create_new_connection_id(u_char *p, ngx_quic_new_conn_id_frame_t *rcid); static size_t ngx_quic_create_retire_connection_id(u_char *p, ngx_quic_retire_cid_frame_t *rcid); -static size_t ngx_quic_create_close(u_char *p, ngx_quic_close_frame_t *cl); +static size_t ngx_quic_create_close(u_char *p, ngx_quic_frame_t *f); static ngx_int_t ngx_quic_parse_transport_param(u_char *p, u_char *end, uint16_t id, ngx_quic_tp_t *dst); @@ -1249,7 +1249,7 @@ ngx_quic_create_frame(u_char *p, ngx_quic_frame_t *f) case NGX_QUIC_FT_CONNECTION_CLOSE: case NGX_QUIC_FT_CONNECTION_CLOSE_APP: f->need_ack = 0; - return ngx_quic_create_close(p, &f->u.close); + return ngx_quic_create_close(p, f); case NGX_QUIC_FT_MAX_STREAMS: return ngx_quic_create_max_streams(p, &f->u.max_streams); @@ -1956,20 +1956,19 @@ ngx_quic_create_transport_params(u_char *pos, u_char *end, ngx_quic_tp_t *tp, static size_t -ngx_quic_create_close(u_char *p, ngx_quic_close_frame_t *cl) +ngx_quic_create_close(u_char *p, ngx_quic_frame_t *f) { - size_t len; - u_char *start; - ngx_uint_t type; + size_t len; + u_char *start; + ngx_quic_close_frame_t *cl; - type = cl->app ? NGX_QUIC_FT_CONNECTION_CLOSE_APP - : NGX_QUIC_FT_CONNECTION_CLOSE; + cl = &f->u.close; if (p == NULL) { - len = ngx_quic_varint_len(type); + len = ngx_quic_varint_len(f->type); len += ngx_quic_varint_len(cl->error_code); - if (!cl->app) { + if (f->type != NGX_QUIC_FT_CONNECTION_CLOSE_APP) { len += ngx_quic_varint_len(cl->frame_type); } @@ -1981,10 +1980,10 @@ ngx_quic_create_close(u_char *p, ngx_quic_close_frame_t *cl) start = p; - ngx_quic_build_int(&p, type); + ngx_quic_build_int(&p, f->type); ngx_quic_build_int(&p, cl->error_code); - if (!cl->app) { + if (f->type != NGX_QUIC_FT_CONNECTION_CLOSE_APP) { ngx_quic_build_int(&p, cl->frame_type); } diff --git a/src/event/quic/ngx_event_quic_transport.h b/src/event/quic/ngx_event_quic_transport.h index 7f82d949e..e747aaa2c 100644 --- a/src/event/quic/ngx_event_quic_transport.h +++ b/src/event/quic/ngx_event_quic_transport.h @@ -197,7 +197,6 @@ typedef struct { uint64_t error_code; uint64_t frame_type; ngx_str_t reason; - ngx_uint_t app; /* unsigned app:1; */ } ngx_quic_close_frame_t;