details: https://github.com/nginx/njs/commit/dbf556f235af1f42a7d9e3b90682de090170cd0f branches: master commit: dbf556f235af1f42a7d9e3b90682de090170cd0f user: Zhidao HONG <z.h...@f5.com> date: Fri, 11 Apr 2025 22:43:31 +0800 description: Fetch: refactored out ngx_js_http_resolve().
--- nginx/ngx_js_fetch.c | 59 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/nginx/ngx_js_fetch.c b/nginx/ngx_js_fetch.c index 944ed28e..9539a687 100644 --- a/nginx/ngx_js_fetch.c +++ b/nginx/ngx_js_fetch.c @@ -166,7 +166,9 @@ static ngx_js_http_t *ngx_js_http_alloc(njs_vm_t *vm, ngx_pool_t *pool, static void ngx_js_http_resolve_done(ngx_js_http_t *http); static void ngx_js_http_close_peer(ngx_js_http_t *http); static void ngx_js_http_destructor(ngx_js_event_t *event); -static void ngx_js_resolve_handler(ngx_resolver_ctx_t *ctx); +static ngx_resolver_ctx_t *ngx_js_http_resolve(ngx_js_http_t *http, + ngx_resolver_t *r, ngx_str_t *host, in_port_t port, ngx_msec_t timeout); +static void ngx_js_http_resolve_handler(ngx_resolver_ctx_t *ctx); static njs_int_t ngx_js_fetch_promissified_result(njs_vm_t *vm, njs_value_t *result, njs_int_t rc, njs_value_t *retval); static void ngx_js_http_fetch_done(ngx_js_http_t *http, @@ -832,7 +834,9 @@ ngx_js_ext_fetch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, } if (u.addrs == NULL) { - ctx = ngx_resolve_start(ngx_external_resolver(vm, external), NULL); + ctx = ngx_js_http_resolve(http, ngx_external_resolver(vm, external), + &u.host, u.port, + ngx_external_resolver_timeout(vm, external)); if (ctx == NULL) { njs_vm_memory_error(vm); return NJS_ERROR; @@ -843,21 +847,6 @@ ngx_js_ext_fetch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, goto fail; } - http->ctx = ctx; - http->port = u.port; - - ctx->name = u.host; - ctx->handler = ngx_js_resolve_handler; - ctx->data = http; - ctx->timeout = ngx_external_resolver_timeout(vm, external); - - ret = ngx_resolve_name(http->ctx); - if (ret != NGX_OK) { - http->ctx = NULL; - njs_vm_memory_error(vm); - return NJS_ERROR; - } - njs_value_assign(retval, njs_value_arg(&http->promise)); return NJS_OK; @@ -1341,8 +1330,42 @@ ngx_js_http_error(ngx_js_http_t *http, const char *fmt, ...) } +static ngx_resolver_ctx_t * +ngx_js_http_resolve(ngx_js_http_t *http, ngx_resolver_t *r, ngx_str_t *host, + in_port_t port, ngx_msec_t timeout) +{ + ngx_int_t ret; + ngx_resolver_ctx_t *ctx; + + ctx = ngx_resolve_start(r, NULL); + if (ctx == NULL) { + return NULL; + } + + if (ctx == NGX_NO_RESOLVER) { + return ctx; + } + + http->ctx = ctx; + http->port = port; + + ctx->name = *host; + ctx->handler = ngx_js_http_resolve_handler; + ctx->data = http; + ctx->timeout = timeout; + + ret = ngx_resolve_name(ctx); + if (ret != NGX_OK) { + http->ctx = NULL; + return NULL; + } + + return ctx; +} + + static void -ngx_js_resolve_handler(ngx_resolver_ctx_t *ctx) +ngx_js_http_resolve_handler(ngx_resolver_ctx_t *ctx) { u_char *p; size_t len; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel