Mercurial > hg > nginx
changeset 8166:7999d3fbb765 quic
HTTP UDP layer, QUIC support autotest.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 28 Feb 2020 13:09:51 +0300 |
parents | b1eb42a5761f |
children | 5d91389e0fd3 |
files | auto/lib/openssl/conf src/http/ngx_http.c src/http/ngx_http_core_module.c src/http/ngx_http_core_module.h src/http/ngx_http_request.c |
diffstat | 5 files changed, 33 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/auto/lib/openssl/conf Tue Mar 03 12:14:44 2020 +0300 +++ b/auto/lib/openssl/conf Fri Feb 28 13:09:51 2020 +0300 @@ -140,3 +140,12 @@ fi fi + +ngx_feature="OpenSSL QUIC support" +ngx_feature_name="NGX_OPENSSL_QUIC" +ngx_feature_run=no +ngx_feature_incs="#include <openssl/ssl.h>" +ngx_feature_path= +ngx_feature_libs="-lssl -lcrypto $NGX_LIBDL" +ngx_feature_test="SSL_CTX_set_quic_method(NULL, NULL)" +. auto/feature
--- a/src/http/ngx_http.c Tue Mar 03 12:14:44 2020 +0300 +++ b/src/http/ngx_http.c Fri Feb 28 13:09:51 2020 +0300 @@ -1163,7 +1163,10 @@ port = cmcf->ports->elts; for (i = 0; i < cmcf->ports->nelts; i++) { - if (p != port[i].port || sa->sa_family != port[i].family) { + if (p != port[i].port + || lsopt->type != port[i].type + || sa->sa_family != port[i].family) + { continue; } @@ -1180,6 +1183,7 @@ } port->family = sa->sa_family; + port->type = lsopt->type; port->port = p; port->addrs.elts = NULL; @@ -1735,6 +1739,7 @@ } #endif + ls->type = addr->opt.type; ls->backlog = addr->opt.backlog; ls->rcvbuf = addr->opt.rcvbuf; ls->sndbuf = addr->opt.sndbuf;
--- a/src/http/ngx_http_core_module.c Tue Mar 03 12:14:44 2020 +0300 +++ b/src/http/ngx_http_core_module.c Fri Feb 28 13:09:51 2020 +0300 @@ -3800,6 +3800,7 @@ ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); lsopt.backlog = NGX_LISTEN_BACKLOG; + lsopt.type = SOCK_STREAM; lsopt.rcvbuf = -1; lsopt.sndbuf = -1; #if (NGX_HAVE_SETFIB) @@ -3821,6 +3822,11 @@ continue; } + if (ngx_strcmp(value[n].data, "quic") == 0) { + lsopt.type = SOCK_DGRAM; + continue; + } + if (ngx_strcmp(value[n].data, "bind") == 0) { lsopt.set = 1; lsopt.bind = 1;
--- a/src/http/ngx_http_core_module.h Tue Mar 03 12:14:44 2020 +0300 +++ b/src/http/ngx_http_core_module.h Fri Feb 28 13:09:51 2020 +0300 @@ -86,6 +86,7 @@ int backlog; int rcvbuf; int sndbuf; + int type; #if (NGX_HAVE_SETFIB) int setfib; #endif @@ -266,6 +267,7 @@ typedef struct { ngx_int_t family; + ngx_int_t type; in_port_t port; ngx_array_t addrs; /* array of ngx_http_conf_addr_t */ } ngx_http_conf_port_t;
--- a/src/http/ngx_http_request.c Tue Mar 03 12:14:44 2020 +0300 +++ b/src/http/ngx_http_request.c Fri Feb 28 13:09:51 2020 +0300 @@ -324,6 +324,10 @@ rev->handler = ngx_http_wait_request_handler; c->write->handler = ngx_http_empty_handler; + if (c->shared) { + rev->ready = 1; + } + #if (NGX_HTTP_V2) if (hc->addr_conf->http2) { rev->handler = ngx_http_v2_init; @@ -386,6 +390,10 @@ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http wait request handler"); + if (c->shared) { + goto request; + } + if (rev->timedout) { ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out"); ngx_http_close_connection(c); @@ -486,6 +494,8 @@ } } +request: + c->log->action = "reading client request line"; ngx_reusable_connection(c, 0);