# HG changeset patch # User Vladimir Homutov # Date 1640602377 -10800 # Node ID e72db91621807b0587168dca66898302afd8486a # Parent b7284807b4fad96587993f43ace18a277168cfc7 QUIC: got rid of excessive "qsock" argument in ngx_quic_output.c. The output is always sent to the active path, which is stored in the quic connection. There is no need to pass it in arguments. When output has to be send to to a specific path (in rare cases, such as path probing), a separate method exists (ngx_quic_frame_sendto()). diff --git a/src/event/quic/ngx_event_quic_output.c b/src/event/quic/ngx_event_quic_output.c --- a/src/event/quic/ngx_event_quic_output.c +++ b/src/event/quic/ngx_event_quic_output.c @@ -38,26 +38,20 @@ #define NGX_QUIC_SOCKET_RETRY_DELAY 10 /* ms, for NGX_AGAIN on write */ -static ngx_int_t ngx_quic_socket_output(ngx_connection_t *c, - ngx_quic_socket_t *qsock); -static ngx_int_t ngx_quic_create_datagrams(ngx_connection_t *c, - ngx_quic_socket_t *qsock); +static ngx_int_t ngx_quic_create_datagrams(ngx_connection_t *c); static void ngx_quic_commit_send(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx); static void ngx_quic_revert_send(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, uint64_t pnum); #if ((NGX_HAVE_UDP_SEGMENT) && (NGX_HAVE_MSGHDR_MSG_CONTROL)) -static ngx_uint_t ngx_quic_allow_segmentation(ngx_connection_t *c, - ngx_quic_socket_t *qsock); -static ngx_int_t ngx_quic_create_segments(ngx_connection_t *c, - ngx_quic_socket_t *qsock); +static ngx_uint_t ngx_quic_allow_segmentation(ngx_connection_t *c); +static ngx_int_t ngx_quic_create_segments(ngx_connection_t *c); static ssize_t ngx_quic_send_segments(ngx_connection_t *c, u_char *buf, size_t len, struct sockaddr *sockaddr, socklen_t socklen, size_t segment); #endif static ssize_t ngx_quic_output_packet(ngx_connection_t *c, - ngx_quic_send_ctx_t *ctx, u_char *data, size_t max, size_t min, - ngx_quic_socket_t *qsock); + ngx_quic_send_ctx_t *ctx, u_char *data, size_t max, size_t min); static void ngx_quic_init_packet(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, - ngx_quic_socket_t *qsock, ngx_quic_header_t *pkt); + ngx_quic_header_t *pkt); static ngx_uint_t ngx_quic_get_padding_level(ngx_connection_t *c); static ssize_t ngx_quic_send(ngx_connection_t *c, u_char *buf, size_t len, struct sockaddr *sockaddr, socklen_t socklen); @@ -85,23 +79,6 @@ ngx_quic_max_udp_payload(ngx_connection_ ngx_int_t ngx_quic_output(ngx_connection_t *c) { - ngx_quic_connection_t *qc; - - qc = ngx_quic_get_connection(c); - - if (ngx_quic_socket_output(c, qc->socket) != NGX_OK) { - return NGX_ERROR; - } - - ngx_quic_set_lost_timer(c); - - return NGX_OK; -} - - -static ngx_int_t -ngx_quic_socket_output(ngx_connection_t *c, ngx_quic_socket_t *qsock) -{ size_t in_flight; ngx_int_t rc; ngx_quic_congestion_t *cg; @@ -115,12 +92,12 @@ ngx_quic_socket_output(ngx_connection_t in_flight = cg->in_flight; #if ((NGX_HAVE_UDP_SEGMENT) && (NGX_HAVE_MSGHDR_MSG_CONTROL)) - if (ngx_quic_allow_segmentation(c, qsock)) { - rc = ngx_quic_create_segments(c, qsock); + if (ngx_quic_allow_segmentation(c)) { + rc = ngx_quic_create_segments(c); } else #endif { - rc = ngx_quic_create_datagrams(c, qsock); + rc = ngx_quic_create_datagrams(c); } if (rc != NGX_OK) { @@ -132,12 +109,14 @@ ngx_quic_socket_output(ngx_connection_t ngx_add_timer(c->read, qc->tp.max_idle_timeout); } + ngx_quic_set_lost_timer(c); + return NGX_OK; } static ngx_int_t -ngx_quic_create_datagrams(ngx_connection_t *c, ngx_quic_socket_t *qsock) +ngx_quic_create_datagrams(ngx_connection_t *c) { size_t len, min; ssize_t n; @@ -152,7 +131,7 @@ ngx_quic_create_datagrams(ngx_connection qc = ngx_quic_get_connection(c); cg = &qc->congestion; - path = qsock->path; + path = qc->socket->path; while (cg->in_flight < cg->window) { @@ -182,7 +161,7 @@ ngx_quic_create_datagrams(ngx_connection continue; } - n = ngx_quic_output_packet(c, ctx, p, len, min, qsock); + n = ngx_quic_output_packet(c, ctx, p, len, min); if (n == NGX_ERROR) { return NGX_ERROR; } @@ -276,7 +255,7 @@ ngx_quic_revert_send(ngx_connection_t *c #if ((NGX_HAVE_UDP_SEGMENT) && (NGX_HAVE_MSGHDR_MSG_CONTROL)) static ngx_uint_t -ngx_quic_allow_segmentation(ngx_connection_t *c, ngx_quic_socket_t *qsock) +ngx_quic_allow_segmentation(ngx_connection_t *c) { size_t bytes, len; ngx_queue_t *q; @@ -290,7 +269,7 @@ ngx_quic_allow_segmentation(ngx_connecti return 0; } - if (qsock->path->limited) { + if (qc->socket->path->limited) { /* don't even try to be faster on non-validated paths */ return 0; } @@ -331,7 +310,7 @@ ngx_quic_allow_segmentation(ngx_connecti static ngx_int_t -ngx_quic_create_segments(ngx_connection_t *c, ngx_quic_socket_t *qsock) +ngx_quic_create_segments(ngx_connection_t *c) { size_t len, segsize; ssize_t n; @@ -346,7 +325,7 @@ ngx_quic_create_segments(ngx_connection_ qc = ngx_quic_get_connection(c); cg = &qc->congestion; - path = qsock->path; + path = qc->socket->path; ctx = ngx_quic_get_send_ctx(qc, ssl_encryption_application); @@ -369,7 +348,7 @@ ngx_quic_create_segments(ngx_connection_ if (len && cg->in_flight < cg->window) { - n = ngx_quic_output_packet(c, ctx, p, len, len, qsock); + n = ngx_quic_output_packet(c, ctx, p, len, len); if (n == NGX_ERROR) { return NGX_ERROR; } @@ -524,7 +503,7 @@ ngx_quic_get_padding_level(ngx_connectio static ssize_t ngx_quic_output_packet(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, - u_char *data, size_t max, size_t min, ngx_quic_socket_t *qsock) + u_char *data, size_t max, size_t min) { size_t len, pad, min_payload, max_payload; u_char *p; @@ -542,12 +521,11 @@ ngx_quic_output_packet(ngx_connection_t return 0; } - ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, - "quic output sock #%uL %s packet max:%uz min:%uz", - qsock->sid.seqnum, ngx_quic_level_name(ctx->level), - max, min); + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, + "quic output %s packet max:%uz min:%uz", + ngx_quic_level_name(ctx->level), max, min); - ngx_quic_init_packet(c, ctx, qsock, &pkt); + ngx_quic_init_packet(c, ctx, &pkt); min_payload = ngx_quic_payload_size(&pkt, min); max_payload = ngx_quic_payload_size(&pkt, max); @@ -690,12 +668,15 @@ ngx_quic_output_packet(ngx_connection_t static void ngx_quic_init_packet(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, - ngx_quic_socket_t *qsock, ngx_quic_header_t *pkt) + ngx_quic_header_t *pkt) { + ngx_quic_socket_t *qsock; ngx_quic_connection_t *qc; qc = ngx_quic_get_connection(c); + qsock = qc->socket; + ngx_memzero(pkt, sizeof(ngx_quic_header_t)); pkt->flags = NGX_QUIC_PKT_FIXED_BIT; @@ -1221,7 +1202,7 @@ ngx_quic_frame_sendto(ngx_connection_t * qc = ngx_quic_get_connection(c); ctx = ngx_quic_get_send_ctx(qc, ssl_encryption_application); - ngx_quic_init_packet(c, ctx, qc->socket, &pkt); + ngx_quic_init_packet(c, ctx, &pkt); min = ngx_quic_path_limit(c, path, min);