Mercurial > njs
changeset 2614:985647d6bdb6
Modules: simplified access to nginx values from JS engines.
| author | Dmitry Volyntsev <xeioex@nginx.com> |
|---|---|
| date | Wed, 03 Sep 2025 22:44:04 -0700 |
| parents | 8c08ff35442e |
| children | 59872fdb9291 |
| files | nginx/ngx_http_js_module.c nginx/ngx_js.h nginx/ngx_js_fetch.c nginx/ngx_js_http.c nginx/ngx_js_http.h nginx/ngx_qjs_fetch.c nginx/ngx_stream_js_module.c |
| diffstat | 7 files changed, 83 insertions(+), 206 deletions(-) [+] |
line wrap: on
line diff
--- a/nginx/ngx_http_js_module.c Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_http_js_module.c Wed Sep 03 22:44:04 2025 -0700 @@ -358,10 +358,8 @@ static ngx_pool_t *ngx_http_js_pool(ngx_http_request_t *r); static ngx_resolver_t *ngx_http_js_resolver(ngx_http_request_t *r); static ngx_msec_t ngx_http_js_resolver_timeout(ngx_http_request_t *r); -static ngx_msec_t ngx_http_js_fetch_timeout(ngx_http_request_t *r); -static size_t ngx_http_js_buffer_size(ngx_http_request_t *r); -static size_t ngx_http_js_max_response_buffer_size(ngx_http_request_t *r); static void ngx_http_js_event_finalize(ngx_http_request_t *r, ngx_int_t rc); +static ngx_js_loc_conf_t *ngx_http_js_loc_conf(ngx_http_request_t *r); static ngx_js_ctx_t *ngx_http_js_ctx(ngx_http_request_t *r); static void ngx_http_js_periodic_handler(ngx_event_t *ev); @@ -391,9 +389,6 @@ static char *ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); -static ngx_ssl_t *ngx_http_js_ssl(ngx_http_request_t *r); -static ngx_flag_t ngx_http_js_ssl_verify(ngx_http_request_t *r); - static ngx_int_t ngx_http_js_parse_unsafe_uri(ngx_http_request_t *r, njs_str_t *uri, njs_str_t *args); @@ -972,13 +967,9 @@ (uintptr_t) ngx_http_js_resolver, (uintptr_t) ngx_http_js_resolver_timeout, (uintptr_t) ngx_http_js_event_finalize, - (uintptr_t) ngx_http_js_ssl, - (uintptr_t) ngx_http_js_ssl_verify, - (uintptr_t) ngx_http_js_fetch_timeout, - (uintptr_t) ngx_http_js_buffer_size, - (uintptr_t) ngx_http_js_max_response_buffer_size, + (uintptr_t) ngx_http_js_loc_conf, + (uintptr_t) ngx_http_js_ctx, (uintptr_t) 0 /* main_conf ptr */, - (uintptr_t) ngx_http_js_ctx, }; @@ -4666,39 +4657,6 @@ } -static ngx_msec_t -ngx_http_js_fetch_timeout(ngx_http_request_t *r) -{ - ngx_http_js_loc_conf_t *jlcf; - - jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module); - - return jlcf->timeout; -} - - -static size_t -ngx_http_js_buffer_size(ngx_http_request_t *r) -{ - ngx_http_js_loc_conf_t *jlcf; - - jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module); - - return jlcf->buffer_size; -} - - -static size_t -ngx_http_js_max_response_buffer_size(ngx_http_request_t *r) -{ - ngx_http_js_loc_conf_t *jlcf; - - jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module); - - return jlcf->max_response_body_size; -} - - static void ngx_http_js_event_finalize(ngx_http_request_t *r, ngx_int_t rc) { @@ -4721,6 +4679,13 @@ } +static ngx_js_loc_conf_t * +ngx_http_js_loc_conf(ngx_http_request_t *r) +{ + return ngx_http_get_module_loc_conf(r, ngx_http_js_module); +} + + static ngx_js_ctx_t * ngx_http_js_ctx(ngx_http_request_t *r) { @@ -7724,7 +7689,7 @@ options.engine = conf->type; jmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_js_module); - ngx_http_js_uptr[NGX_JS_MAIN_CONF_INDEX] = (uintptr_t) jmcf; + ngx_http_js_uptr[NGX_JS_EXTERNAL_MAIN_CONF] = (uintptr_t) jmcf; if (conf->type == NGX_ENGINE_NJS) { options.u.njs.metas = &ngx_http_js_metas; @@ -8236,36 +8201,6 @@ } -static ngx_ssl_t * -ngx_http_js_ssl(ngx_http_request_t *r) -{ -#if (NGX_HTTP_SSL) - ngx_http_js_loc_conf_t *jlcf; - - jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module); - - return jlcf->ssl; -#else - return NULL; -#endif -} - - -static ngx_flag_t -ngx_http_js_ssl_verify(ngx_http_request_t *r) -{ -#if (NGX_HTTP_SSL) - ngx_http_js_loc_conf_t *jlcf; - - jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module); - - return jlcf->ssl_verify; -#else - return 0; -#endif -} - - static ngx_int_t ngx_http_js_parse_unsafe_uri(ngx_http_request_t *r, njs_str_t *uri, njs_str_t *args)
--- a/nginx/ngx_js.h Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_js.h Wed Sep 03 22:44:04 2025 -0700 @@ -80,9 +80,7 @@ typedef void (*ngx_js_event_finalize_pt)(njs_external_ptr_t e, ngx_int_t rc); typedef ngx_resolver_t *(*ngx_external_resolver_pt)(njs_external_ptr_t e); typedef ngx_msec_t (*ngx_external_timeout_pt)(njs_external_ptr_t e); -typedef ngx_flag_t (*ngx_external_flag_pt)(njs_external_ptr_t e); -typedef ngx_flag_t (*ngx_external_size_pt)(njs_external_ptr_t e); -typedef ngx_ssl_t *(*ngx_external_ssl_pt)(njs_external_ptr_t e); +typedef ngx_js_loc_conf_t *(*ngx_js_external_loc_conf_pt)(njs_external_ptr_t e); typedef ngx_js_ctx_t *(*ngx_js_external_ctx_pt)(njs_external_ptr_t e); @@ -272,31 +270,35 @@ }; +enum { + NGX_JS_EXTERNAL_CONNECTION = 0, + NGX_JS_EXTERNAL_POOL, + NGX_JS_EXTERNAL_RESOLVER, + NGX_JS_EXTERNAL_RESOLVER_TIMEOUT, + NGX_JS_EXTERNAL_EVENT_FINALIZE, + NGX_JS_EXTERNAL_LOC_CONF, + NGX_JS_EXTERNAL_CTX, + NGX_JS_EXTERNAL_MAIN_CONF, +}; + #define ngx_external_connection(vm, e) \ - (*((ngx_connection_t **) ((u_char *) (e) + njs_vm_meta(vm, 0)))) + (*((ngx_connection_t **) \ + ((u_char *) (e) + njs_vm_meta(vm, NGX_JS_EXTERNAL_CONNECTION)))) #define ngx_external_pool(vm, e) \ - ((ngx_external_pool_pt) njs_vm_meta(vm, 1))(e) + ((ngx_external_pool_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_POOL))(e) #define ngx_external_resolver(vm, e) \ - ((ngx_external_resolver_pt) njs_vm_meta(vm, 2))(e) + ((ngx_external_resolver_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_RESOLVER))(e) #define ngx_external_resolver_timeout(vm, e) \ - ((ngx_external_timeout_pt) njs_vm_meta(vm, 3))(e) + ((ngx_external_timeout_pt) \ + njs_vm_meta(vm, NGX_JS_EXTERNAL_RESOLVER_TIMEOUT))(e) #define ngx_external_event_finalize(vm) \ - ((ngx_js_event_finalize_pt) njs_vm_meta(vm, 4)) -#define ngx_external_ssl(vm, e) \ - ((ngx_external_ssl_pt) njs_vm_meta(vm, 5))(e) -#define ngx_external_ssl_verify(vm, e) \ - ((ngx_external_flag_pt) njs_vm_meta(vm, 6))(e) -#define ngx_external_fetch_timeout(vm, e) \ - ((ngx_external_timeout_pt) njs_vm_meta(vm, 7))(e) -#define ngx_external_buffer_size(vm, e) \ - ((ngx_external_size_pt) njs_vm_meta(vm, 8))(e) -#define ngx_external_max_response_buffer_size(vm, e) \ - ((ngx_external_size_pt) njs_vm_meta(vm, 9))(e) -#define NGX_JS_MAIN_CONF_INDEX 10 + ((ngx_js_event_finalize_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_EVENT_FINALIZE)) +#define ngx_external_loc_conf(vm, e) \ + ((ngx_js_external_loc_conf_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_LOC_CONF))(e) +#define ngx_external_ctx(vm, e) \ + ((ngx_js_external_ctx_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_CTX))(e) #define ngx_main_conf(vm) \ - ((ngx_js_main_conf_t *) njs_vm_meta(vm, NGX_JS_MAIN_CONF_INDEX)) -#define ngx_external_ctx(vm, e) \ - ((ngx_js_external_ctx_pt) njs_vm_meta(vm, 11))(e) + ((ngx_js_main_conf_t *) njs_vm_meta(vm, NGX_JS_EXTERNAL_MAIN_CONF)) #define ngx_js_prop(vm, type, value, start, len) \ @@ -367,29 +369,33 @@ #define ngx_qjs_meta(cx, i) \ ((uintptr_t *) JS_GetRuntimeOpaque(JS_GetRuntime(cx)))[i] #define ngx_qjs_external_connection(cx, e) \ - (*((ngx_connection_t **) ((u_char *) (e) + ngx_qjs_meta(cx, 0)))) + (*((ngx_connection_t **) \ + ((u_char *) (e) + ngx_qjs_meta(cx, NGX_JS_EXTERNAL_CONNECTION)))) #define ngx_qjs_external_pool(cx, e) \ - ((ngx_external_pool_pt) ngx_qjs_meta(cx, 1))(e) + ((ngx_external_pool_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_POOL))(e) #define ngx_qjs_external_resolver(cx, e) \ - ((ngx_external_resolver_pt) ngx_qjs_meta(cx, 2))(e) + ((ngx_external_resolver_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_RESOLVER))(e) #define ngx_qjs_external_resolver_timeout(cx, e) \ - ((ngx_external_timeout_pt) ngx_qjs_meta(cx, 3))(e) + ((ngx_external_timeout_pt) \ + ngx_qjs_meta(cx, NGX_JS_EXTERNAL_RESOLVER_TIMEOUT))(e) #define ngx_qjs_external_event_finalize(cx) \ - ((ngx_js_event_finalize_pt) ngx_qjs_meta(cx, 4)) + ((ngx_js_event_finalize_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_EVENT_FINALIZE)) +#define ngx_qjs_external_loc_conf(cx, e) \ + ((ngx_js_external_loc_conf_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_LOC_CONF))(e) #define ngx_qjs_external_ssl(cx, e) \ - ((ngx_external_ssl_pt) ngx_qjs_meta(cx, 5))(e) + (ngx_qjs_external_loc_conf(cx, e)->ssl) #define ngx_qjs_external_ssl_verify(cx, e) \ - ((ngx_external_flag_pt) ngx_qjs_meta(cx, 6))(e) + (ngx_qjs_external_loc_conf(cx, e)->ssl_verify) #define ngx_qjs_external_fetch_timeout(cx, e) \ - ((ngx_external_timeout_pt) ngx_qjs_meta(cx, 7))(e) + (ngx_qjs_external_loc_conf(cx, e)->timeout) #define ngx_qjs_external_buffer_size(cx, e) \ - ((ngx_external_size_pt) ngx_qjs_meta(cx, 8))(e) + (ngx_qjs_external_loc_conf(cx, e)->buffer_size) #define ngx_qjs_external_max_response_buffer_size(cx, e) \ - ((ngx_external_size_pt) ngx_qjs_meta(cx, 9))(e) + (ngx_qjs_external_loc_conf(cx, e)->max_response_body_size) +#define ngx_qjs_external_ctx(cx, e) \ + ((ngx_js_external_ctx_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_CTX))(e) #define ngx_qjs_main_conf(cx) \ - ((ngx_js_main_conf_t *) ngx_qjs_meta(cx, NGX_JS_MAIN_CONF_INDEX)) -#define ngx_qjs_external_ctx(cx, e) \ - ((ngx_js_external_ctx_pt) ngx_qjs_meta(cx, 11))(e) + ((ngx_js_main_conf_t *) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_MAIN_CONF)) extern qjs_module_t qjs_webcrypto_module; extern qjs_module_t qjs_xml_module;
--- a/nginx/ngx_js_fetch.c Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_js_fetch.c Wed Sep 03 22:44:04 2025 -0700 @@ -40,7 +40,7 @@ static njs_int_t ngx_js_headers_fill(njs_vm_t *vm, ngx_js_headers_t *headers, njs_value_t *init); static ngx_js_fetch_t *ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool, - ngx_log_t *log); + ngx_log_t *log, ngx_js_loc_conf_t *conf); static void ngx_js_fetch_error(ngx_js_http_t *http, const char *err); static void ngx_js_fetch_destructor(ngx_js_event_t *event); static njs_int_t ngx_js_fetch_promissified_result(njs_vm_t *vm, @@ -537,7 +537,8 @@ c = ngx_external_connection(vm, external); pool = ngx_external_pool(vm, external); - fetch = ngx_js_fetch_alloc(vm, pool, c->log); + fetch = ngx_js_fetch_alloc(vm, pool, c->log, + ngx_external_loc_conf(vm, external)); if (fetch == NULL) { return NJS_ERROR; } @@ -550,15 +551,13 @@ } http->response.url = request.url; - http->timeout = ngx_external_fetch_timeout(vm, external); - http->buffer_size = ngx_external_buffer_size(vm, external); - http->max_response_body_size = - ngx_external_max_response_buffer_size(vm, external); + http->buffer_size = http->conf->buffer_size; + http->max_response_body_size = http->conf->max_response_body_size; #if (NGX_SSL) if (u.default_port == 443) { - http->ssl = ngx_external_ssl(vm, external); - http->ssl_verify = ngx_external_ssl_verify(vm, external); + http->ssl = http->conf->ssl; + http->ssl_verify = http->conf->ssl_verify; } #endif @@ -1134,7 +1133,8 @@ static ngx_js_fetch_t * -ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool, ngx_log_t *log) +ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool, ngx_log_t *log, + ngx_js_loc_conf_t *conf) { njs_int_t ret; ngx_js_ctx_t *ctx; @@ -1152,8 +1152,7 @@ http->pool = pool; http->log = log; - - http->timeout = 10000; + http->conf = conf; http->http_parse.content_length_n = -1;
--- a/nginx/ngx_js_http.c Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_js_http.c Wed Sep 03 22:44:04 2025 -0700 @@ -255,8 +255,8 @@ http->process = ngx_js_http_process_status_line; - ngx_add_timer(http->peer.connection->read, http->timeout); - ngx_add_timer(http->peer.connection->write, http->timeout); + ngx_add_timer(http->peer.connection->read, http->conf->timeout); + ngx_add_timer(http->peer.connection->write, http->conf->timeout); #if (NGX_SSL) if (http->ssl != NULL && http->peer.connection->ssl == NULL) { @@ -522,7 +522,7 @@ } if (!wev->timer_set) { - ngx_add_timer(wev, http->timeout); + ngx_add_timer(wev, http->conf->timeout); } }
--- a/nginx/ngx_js_http.h Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_js_http.h Wed Sep 03 22:44:04 2025 -0700 @@ -114,8 +114,8 @@ in_port_t port; ngx_peer_connection_t peer; - ngx_msec_t timeout; + ngx_js_loc_conf_t *conf; ngx_int_t buffer_size; ngx_int_t max_response_body_size;
--- a/nginx/ngx_qjs_fetch.c Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_qjs_fetch.c Wed Sep 03 22:44:04 2025 -0700 @@ -39,7 +39,7 @@ static ngx_int_t ngx_qjs_headers_fill(JSContext *cx, ngx_js_headers_t *headers, JSValue init); static ngx_qjs_fetch_t *ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool, - ngx_log_t *log); + ngx_log_t *log, ngx_js_loc_conf_t *conf); static void ngx_qjs_fetch_error(ngx_js_http_t *http, const char *err); static void ngx_qjs_fetch_destructor(ngx_qjs_event_t *event); static void ngx_qjs_fetch_done(ngx_qjs_fetch_t *fetch, JSValue retval, @@ -257,7 +257,8 @@ c = ngx_qjs_external_connection(cx, external); pool = ngx_qjs_external_pool(cx, external); - fetch = ngx_qjs_fetch_alloc(cx, pool, c->log); + fetch = ngx_qjs_fetch_alloc(cx, pool, c->log, + ngx_qjs_external_loc_conf(cx, external)); if (fetch == NULL) { return JS_ThrowOutOfMemory(cx); } @@ -271,7 +272,6 @@ http = &fetch->http; http->response.url = request.url; - http->timeout = ngx_qjs_external_fetch_timeout(cx, external); http->buffer_size = ngx_qjs_external_buffer_size(cx, external); http->max_response_body_size = ngx_qjs_external_max_response_buffer_size(cx, external); @@ -1193,7 +1193,8 @@ static ngx_qjs_fetch_t * -ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool, ngx_log_t *log) +ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool, ngx_log_t *log, + ngx_js_loc_conf_t *conf) { ngx_js_ctx_t *ctx; ngx_js_http_t *http; @@ -1210,7 +1211,7 @@ http->pool = pool; http->log = log; - http->timeout = 10000; + http->conf = conf; http->http_parse.content_length_n = -1;
--- a/nginx/ngx_stream_js_module.c Tue Aug 26 14:22:19 2025 -0700 +++ b/nginx/ngx_stream_js_module.c Wed Sep 03 22:44:04 2025 -0700 @@ -194,10 +194,8 @@ static ngx_pool_t *ngx_stream_js_pool(ngx_stream_session_t *s); static ngx_resolver_t *ngx_stream_js_resolver(ngx_stream_session_t *s); static ngx_msec_t ngx_stream_js_resolver_timeout(ngx_stream_session_t *s); -static ngx_msec_t ngx_stream_js_fetch_timeout(ngx_stream_session_t *s); -static size_t ngx_stream_js_buffer_size(ngx_stream_session_t *s); -static size_t ngx_stream_js_max_response_buffer_size(ngx_stream_session_t *s); static void ngx_stream_js_event_finalize(ngx_stream_session_t *s, ngx_int_t rc); +static ngx_js_loc_conf_t *ngx_stream_js_srv_conf(ngx_stream_session_t *s); static ngx_js_ctx_t *ngx_stream_js_ctx(ngx_stream_session_t *s); static void ngx_stream_js_periodic_handler(ngx_event_t *ev); @@ -225,8 +223,6 @@ static char *ngx_stream_js_shared_dict_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static ngx_ssl_t *ngx_stream_js_ssl(ngx_stream_session_t *s); -static ngx_flag_t ngx_stream_js_ssl_verify(ngx_stream_session_t *s); static ngx_conf_bitmask_t ngx_stream_js_engines[] = { { ngx_string("njs"), NGX_ENGINE_NJS }, @@ -710,13 +706,9 @@ (uintptr_t) ngx_stream_js_resolver, (uintptr_t) ngx_stream_js_resolver_timeout, (uintptr_t) ngx_stream_js_event_finalize, - (uintptr_t) ngx_stream_js_ssl, - (uintptr_t) ngx_stream_js_ssl_verify, - (uintptr_t) ngx_stream_js_fetch_timeout, - (uintptr_t) ngx_stream_js_buffer_size, - (uintptr_t) ngx_stream_js_max_response_buffer_size, + (uintptr_t) ngx_stream_js_srv_conf, + (uintptr_t) ngx_stream_js_ctx, (uintptr_t) 0 /* main_conf ptr */, - (uintptr_t) ngx_stream_js_ctx, }; @@ -1891,39 +1883,6 @@ } -static ngx_msec_t -ngx_stream_js_fetch_timeout(ngx_stream_session_t *s) -{ - ngx_stream_js_srv_conf_t *jscf; - - jscf = ngx_stream_get_module_srv_conf(s, ngx_stream_js_module); - - return jscf->timeout; -} - - -static size_t -ngx_stream_js_buffer_size(ngx_stream_session_t *s) -{ - ngx_stream_js_srv_conf_t *jscf; - - jscf = ngx_stream_get_module_srv_conf(s, ngx_stream_js_module); - - return jscf->buffer_size; -} - - -static size_t -ngx_stream_js_max_response_buffer_size(ngx_stream_session_t *s) -{ - ngx_stream_js_srv_conf_t *jscf; - - jscf = ngx_stream_get_module_srv_conf(s, ngx_stream_js_module); - - return jscf->max_response_body_size; -} - - static void ngx_stream_js_event_finalize(ngx_stream_session_t *s, ngx_int_t rc) { @@ -1946,6 +1905,13 @@ } +static ngx_js_loc_conf_t * +ngx_stream_js_srv_conf(ngx_stream_session_t *s) +{ + return ngx_stream_get_module_srv_conf(s, ngx_stream_js_module); +} + + static ngx_js_ctx_t * ngx_stream_js_ctx(ngx_stream_session_t *s) { @@ -3025,7 +2991,7 @@ options.engine = conf->type; jmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_js_module); - ngx_stream_js_uptr[NGX_JS_MAIN_CONF_INDEX] = (uintptr_t) jmcf; + ngx_stream_js_uptr[NGX_JS_EXTERNAL_MAIN_CONF] = (uintptr_t) jmcf; if (conf->type == NGX_ENGINE_NJS) { options.u.njs.metas = &ngx_stream_js_metas; @@ -3716,33 +3682,3 @@ return NGX_OK; } - - -static ngx_ssl_t * -ngx_stream_js_ssl(ngx_stream_session_t *s) -{ -#if (NGX_STREAM_SSL) - ngx_stream_js_srv_conf_t *jscf; - - jscf = ngx_stream_get_module_srv_conf(s, ngx_stream_js_module); - - return jscf->ssl; -#else - return NULL; -#endif -} - - -static ngx_flag_t -ngx_stream_js_ssl_verify(ngx_stream_session_t *s) -{ -#if (NGX_STREAM_SSL) - ngx_stream_js_srv_conf_t *jscf; - - jscf = ngx_stream_get_module_srv_conf(s, ngx_stream_js_module); - - return jscf->ssl_verify; -#else - return 0; -#endif -}
