Skip to content

Commit d822883

Browse files
committed
Modules: simplified access to nginx values from JS engines.
1 parent 04f6dfb commit d822883

File tree

7 files changed

+83
-206
lines changed

7 files changed

+83
-206
lines changed

nginx/ngx_http_js_module.c

Lines changed: 11 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,8 @@ static void ngx_http_qjs_periodic_finalizer(JSRuntime *rt, JSValue val);
358358
static ngx_pool_t *ngx_http_js_pool(ngx_http_request_t *r);
359359
static ngx_resolver_t *ngx_http_js_resolver(ngx_http_request_t *r);
360360
static ngx_msec_t ngx_http_js_resolver_timeout(ngx_http_request_t *r);
361-
static ngx_msec_t ngx_http_js_fetch_timeout(ngx_http_request_t *r);
362-
static size_t ngx_http_js_buffer_size(ngx_http_request_t *r);
363-
static size_t ngx_http_js_max_response_buffer_size(ngx_http_request_t *r);
364361
static void ngx_http_js_event_finalize(ngx_http_request_t *r, ngx_int_t rc);
362+
static ngx_js_loc_conf_t *ngx_http_js_loc_conf(ngx_http_request_t *r);
365363
static ngx_js_ctx_t *ngx_http_js_ctx(ngx_http_request_t *r);
366364

367365
static void ngx_http_js_periodic_handler(ngx_event_t *ev);
@@ -391,9 +389,6 @@ static void *ngx_http_js_create_loc_conf(ngx_conf_t *cf);
391389
static char *ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent,
392390
void *child);
393391

394-
static ngx_ssl_t *ngx_http_js_ssl(ngx_http_request_t *r);
395-
static ngx_flag_t ngx_http_js_ssl_verify(ngx_http_request_t *r);
396-
397392
static ngx_int_t ngx_http_js_parse_unsafe_uri(ngx_http_request_t *r,
398393
njs_str_t *uri, njs_str_t *args);
399394

@@ -972,13 +967,9 @@ static uintptr_t ngx_http_js_uptr[] = {
972967
(uintptr_t) ngx_http_js_resolver,
973968
(uintptr_t) ngx_http_js_resolver_timeout,
974969
(uintptr_t) ngx_http_js_event_finalize,
975-
(uintptr_t) ngx_http_js_ssl,
976-
(uintptr_t) ngx_http_js_ssl_verify,
977-
(uintptr_t) ngx_http_js_fetch_timeout,
978-
(uintptr_t) ngx_http_js_buffer_size,
979-
(uintptr_t) ngx_http_js_max_response_buffer_size,
980-
(uintptr_t) 0 /* main_conf ptr */,
970+
(uintptr_t) ngx_http_js_loc_conf,
981971
(uintptr_t) ngx_http_js_ctx,
972+
(uintptr_t) 0 /* main_conf ptr */,
982973
};
983974

984975

@@ -4666,39 +4657,6 @@ ngx_http_js_resolver_timeout(ngx_http_request_t *r)
46664657
}
46674658

46684659

4669-
static ngx_msec_t
4670-
ngx_http_js_fetch_timeout(ngx_http_request_t *r)
4671-
{
4672-
ngx_http_js_loc_conf_t *jlcf;
4673-
4674-
jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
4675-
4676-
return jlcf->timeout;
4677-
}
4678-
4679-
4680-
static size_t
4681-
ngx_http_js_buffer_size(ngx_http_request_t *r)
4682-
{
4683-
ngx_http_js_loc_conf_t *jlcf;
4684-
4685-
jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
4686-
4687-
return jlcf->buffer_size;
4688-
}
4689-
4690-
4691-
static size_t
4692-
ngx_http_js_max_response_buffer_size(ngx_http_request_t *r)
4693-
{
4694-
ngx_http_js_loc_conf_t *jlcf;
4695-
4696-
jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
4697-
4698-
return jlcf->max_response_body_size;
4699-
}
4700-
4701-
47024660
static void
47034661
ngx_http_js_event_finalize(ngx_http_request_t *r, ngx_int_t rc)
47044662
{
@@ -4721,6 +4679,13 @@ ngx_http_js_event_finalize(ngx_http_request_t *r, ngx_int_t rc)
47214679
}
47224680

47234681

4682+
static ngx_js_loc_conf_t *
4683+
ngx_http_js_loc_conf(ngx_http_request_t *r)
4684+
{
4685+
return ngx_http_get_module_loc_conf(r, ngx_http_js_module);
4686+
}
4687+
4688+
47244689
static ngx_js_ctx_t *
47254690
ngx_http_js_ctx(ngx_http_request_t *r)
47264691
{
@@ -7724,7 +7689,7 @@ ngx_http_js_init_conf_vm(ngx_conf_t *cf, ngx_js_loc_conf_t *conf)
77247689
options.engine = conf->type;
77257690

77267691
jmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_js_module);
7727-
ngx_http_js_uptr[NGX_JS_MAIN_CONF_INDEX] = (uintptr_t) jmcf;
7692+
ngx_http_js_uptr[NGX_JS_EXTERNAL_MAIN_CONF] = (uintptr_t) jmcf;
77287693

77297694
if (conf->type == NGX_ENGINE_NJS) {
77307695
options.u.njs.metas = &ngx_http_js_metas;
@@ -8236,36 +8201,6 @@ ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
82368201
}
82378202

82388203

8239-
static ngx_ssl_t *
8240-
ngx_http_js_ssl(ngx_http_request_t *r)
8241-
{
8242-
#if (NGX_HTTP_SSL)
8243-
ngx_http_js_loc_conf_t *jlcf;
8244-
8245-
jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
8246-
8247-
return jlcf->ssl;
8248-
#else
8249-
return NULL;
8250-
#endif
8251-
}
8252-
8253-
8254-
static ngx_flag_t
8255-
ngx_http_js_ssl_verify(ngx_http_request_t *r)
8256-
{
8257-
#if (NGX_HTTP_SSL)
8258-
ngx_http_js_loc_conf_t *jlcf;
8259-
8260-
jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
8261-
8262-
return jlcf->ssl_verify;
8263-
#else
8264-
return 0;
8265-
#endif
8266-
}
8267-
8268-
82698204
static ngx_int_t
82708205
ngx_http_js_parse_unsafe_uri(ngx_http_request_t *r, njs_str_t *uri,
82718206
njs_str_t *args)

nginx/ngx_js.h

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,7 @@ typedef ngx_pool_t *(*ngx_external_pool_pt)(njs_external_ptr_t e);
8080
typedef void (*ngx_js_event_finalize_pt)(njs_external_ptr_t e, ngx_int_t rc);
8181
typedef ngx_resolver_t *(*ngx_external_resolver_pt)(njs_external_ptr_t e);
8282
typedef ngx_msec_t (*ngx_external_timeout_pt)(njs_external_ptr_t e);
83-
typedef ngx_flag_t (*ngx_external_flag_pt)(njs_external_ptr_t e);
84-
typedef ngx_flag_t (*ngx_external_size_pt)(njs_external_ptr_t e);
85-
typedef ngx_ssl_t *(*ngx_external_ssl_pt)(njs_external_ptr_t e);
83+
typedef ngx_js_loc_conf_t *(*ngx_js_external_loc_conf_pt)(njs_external_ptr_t e);
8684
typedef ngx_js_ctx_t *(*ngx_js_external_ctx_pt)(njs_external_ptr_t e);
8785

8886

@@ -272,31 +270,35 @@ struct ngx_engine_s {
272270
};
273271

274272

273+
enum {
274+
NGX_JS_EXTERNAL_CONNECTION = 0,
275+
NGX_JS_EXTERNAL_POOL,
276+
NGX_JS_EXTERNAL_RESOLVER,
277+
NGX_JS_EXTERNAL_RESOLVER_TIMEOUT,
278+
NGX_JS_EXTERNAL_EVENT_FINALIZE,
279+
NGX_JS_EXTERNAL_LOC_CONF,
280+
NGX_JS_EXTERNAL_CTX,
281+
NGX_JS_EXTERNAL_MAIN_CONF,
282+
};
283+
275284
#define ngx_external_connection(vm, e) \
276-
(*((ngx_connection_t **) ((u_char *) (e) + njs_vm_meta(vm, 0))))
285+
(*((ngx_connection_t **) \
286+
((u_char *) (e) + njs_vm_meta(vm, NGX_JS_EXTERNAL_CONNECTION))))
277287
#define ngx_external_pool(vm, e) \
278-
((ngx_external_pool_pt) njs_vm_meta(vm, 1))(e)
288+
((ngx_external_pool_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_POOL))(e)
279289
#define ngx_external_resolver(vm, e) \
280-
((ngx_external_resolver_pt) njs_vm_meta(vm, 2))(e)
290+
((ngx_external_resolver_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_RESOLVER))(e)
281291
#define ngx_external_resolver_timeout(vm, e) \
282-
((ngx_external_timeout_pt) njs_vm_meta(vm, 3))(e)
292+
((ngx_external_timeout_pt) \
293+
njs_vm_meta(vm, NGX_JS_EXTERNAL_RESOLVER_TIMEOUT))(e)
283294
#define ngx_external_event_finalize(vm) \
284-
((ngx_js_event_finalize_pt) njs_vm_meta(vm, 4))
285-
#define ngx_external_ssl(vm, e) \
286-
((ngx_external_ssl_pt) njs_vm_meta(vm, 5))(e)
287-
#define ngx_external_ssl_verify(vm, e) \
288-
((ngx_external_flag_pt) njs_vm_meta(vm, 6))(e)
289-
#define ngx_external_fetch_timeout(vm, e) \
290-
((ngx_external_timeout_pt) njs_vm_meta(vm, 7))(e)
291-
#define ngx_external_buffer_size(vm, e) \
292-
((ngx_external_size_pt) njs_vm_meta(vm, 8))(e)
293-
#define ngx_external_max_response_buffer_size(vm, e) \
294-
((ngx_external_size_pt) njs_vm_meta(vm, 9))(e)
295-
#define NGX_JS_MAIN_CONF_INDEX 10
296-
#define ngx_main_conf(vm) \
297-
((ngx_js_main_conf_t *) njs_vm_meta(vm, NGX_JS_MAIN_CONF_INDEX))
295+
((ngx_js_event_finalize_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_EVENT_FINALIZE))
296+
#define ngx_external_loc_conf(vm, e) \
297+
((ngx_js_external_loc_conf_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_LOC_CONF))(e)
298298
#define ngx_external_ctx(vm, e) \
299-
((ngx_js_external_ctx_pt) njs_vm_meta(vm, 11))(e)
299+
((ngx_js_external_ctx_pt) njs_vm_meta(vm, NGX_JS_EXTERNAL_CTX))(e)
300+
#define ngx_main_conf(vm) \
301+
((ngx_js_main_conf_t *) njs_vm_meta(vm, NGX_JS_EXTERNAL_MAIN_CONF))
300302

301303

302304
#define ngx_js_prop(vm, type, value, start, len) \
@@ -367,29 +369,33 @@ JSValue ngx_qjs_ext_fetch(JSContext *cx, JSValueConst this_val, int argc,
367369
#define ngx_qjs_meta(cx, i) \
368370
((uintptr_t *) JS_GetRuntimeOpaque(JS_GetRuntime(cx)))[i]
369371
#define ngx_qjs_external_connection(cx, e) \
370-
(*((ngx_connection_t **) ((u_char *) (e) + ngx_qjs_meta(cx, 0))))
372+
(*((ngx_connection_t **) \
373+
((u_char *) (e) + ngx_qjs_meta(cx, NGX_JS_EXTERNAL_CONNECTION))))
371374
#define ngx_qjs_external_pool(cx, e) \
372-
((ngx_external_pool_pt) ngx_qjs_meta(cx, 1))(e)
375+
((ngx_external_pool_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_POOL))(e)
373376
#define ngx_qjs_external_resolver(cx, e) \
374-
((ngx_external_resolver_pt) ngx_qjs_meta(cx, 2))(e)
377+
((ngx_external_resolver_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_RESOLVER))(e)
375378
#define ngx_qjs_external_resolver_timeout(cx, e) \
376-
((ngx_external_timeout_pt) ngx_qjs_meta(cx, 3))(e)
379+
((ngx_external_timeout_pt) \
380+
ngx_qjs_meta(cx, NGX_JS_EXTERNAL_RESOLVER_TIMEOUT))(e)
377381
#define ngx_qjs_external_event_finalize(cx) \
378-
((ngx_js_event_finalize_pt) ngx_qjs_meta(cx, 4))
382+
((ngx_js_event_finalize_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_EVENT_FINALIZE))
383+
#define ngx_qjs_external_loc_conf(cx, e) \
384+
((ngx_js_external_loc_conf_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_LOC_CONF))(e)
379385
#define ngx_qjs_external_ssl(cx, e) \
380-
((ngx_external_ssl_pt) ngx_qjs_meta(cx, 5))(e)
386+
(ngx_qjs_external_loc_conf(cx, e)->ssl)
381387
#define ngx_qjs_external_ssl_verify(cx, e) \
382-
((ngx_external_flag_pt) ngx_qjs_meta(cx, 6))(e)
388+
(ngx_qjs_external_loc_conf(cx, e)->ssl_verify)
383389
#define ngx_qjs_external_fetch_timeout(cx, e) \
384-
((ngx_external_timeout_pt) ngx_qjs_meta(cx, 7))(e)
390+
(ngx_qjs_external_loc_conf(cx, e)->timeout)
385391
#define ngx_qjs_external_buffer_size(cx, e) \
386-
((ngx_external_size_pt) ngx_qjs_meta(cx, 8))(e)
392+
(ngx_qjs_external_loc_conf(cx, e)->buffer_size)
387393
#define ngx_qjs_external_max_response_buffer_size(cx, e) \
388-
((ngx_external_size_pt) ngx_qjs_meta(cx, 9))(e)
389-
#define ngx_qjs_main_conf(cx) \
390-
((ngx_js_main_conf_t *) ngx_qjs_meta(cx, NGX_JS_MAIN_CONF_INDEX))
394+
(ngx_qjs_external_loc_conf(cx, e)->max_response_body_size)
391395
#define ngx_qjs_external_ctx(cx, e) \
392-
((ngx_js_external_ctx_pt) ngx_qjs_meta(cx, 11))(e)
396+
((ngx_js_external_ctx_pt) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_CTX))(e)
397+
#define ngx_qjs_main_conf(cx) \
398+
((ngx_js_main_conf_t *) ngx_qjs_meta(cx, NGX_JS_EXTERNAL_MAIN_CONF))
393399

394400
extern qjs_module_t qjs_webcrypto_module;
395401
extern qjs_module_t qjs_xml_module;

nginx/ngx_js_fetch.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static njs_int_t ngx_js_headers_inherit(njs_vm_t *vm, ngx_js_headers_t *headers,
4040
static njs_int_t ngx_js_headers_fill(njs_vm_t *vm, ngx_js_headers_t *headers,
4141
njs_value_t *init);
4242
static ngx_js_fetch_t *ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool,
43-
ngx_log_t *log);
43+
ngx_log_t *log, ngx_js_loc_conf_t *conf);
4444
static void ngx_js_fetch_error(ngx_js_http_t *http, const char *err);
4545
static void ngx_js_fetch_destructor(ngx_js_event_t *event);
4646
static njs_int_t ngx_js_fetch_promissified_result(njs_vm_t *vm,
@@ -537,7 +537,8 @@ ngx_js_ext_fetch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
537537
c = ngx_external_connection(vm, external);
538538
pool = ngx_external_pool(vm, external);
539539

540-
fetch = ngx_js_fetch_alloc(vm, pool, c->log);
540+
fetch = ngx_js_fetch_alloc(vm, pool, c->log,
541+
ngx_external_loc_conf(vm, external));
541542
if (fetch == NULL) {
542543
return NJS_ERROR;
543544
}
@@ -550,15 +551,13 @@ ngx_js_ext_fetch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
550551
}
551552

552553
http->response.url = request.url;
553-
http->timeout = ngx_external_fetch_timeout(vm, external);
554-
http->buffer_size = ngx_external_buffer_size(vm, external);
555-
http->max_response_body_size =
556-
ngx_external_max_response_buffer_size(vm, external);
554+
http->buffer_size = http->conf->buffer_size;
555+
http->max_response_body_size = http->conf->max_response_body_size;
557556

558557
#if (NGX_SSL)
559558
if (u.default_port == 443) {
560-
http->ssl = ngx_external_ssl(vm, external);
561-
http->ssl_verify = ngx_external_ssl_verify(vm, external);
559+
http->ssl = http->conf->ssl;
560+
http->ssl_verify = http->conf->ssl_verify;
562561
}
563562
#endif
564563

@@ -1134,7 +1133,8 @@ ngx_js_headers_fill(njs_vm_t *vm, ngx_js_headers_t *headers, njs_value_t *init)
11341133

11351134

11361135
static ngx_js_fetch_t *
1137-
ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool, ngx_log_t *log)
1136+
ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool, ngx_log_t *log,
1137+
ngx_js_loc_conf_t *conf)
11381138
{
11391139
njs_int_t ret;
11401140
ngx_js_ctx_t *ctx;
@@ -1152,8 +1152,7 @@ ngx_js_fetch_alloc(njs_vm_t *vm, ngx_pool_t *pool, ngx_log_t *log)
11521152

11531153
http->pool = pool;
11541154
http->log = log;
1155-
1156-
http->timeout = 10000;
1155+
http->conf = conf;
11571156

11581157
http->http_parse.content_length_n = -1;
11591158

nginx/ngx_js_http.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,8 @@ ngx_js_http_connect(ngx_js_http_t *http)
255255

256256
http->process = ngx_js_http_process_status_line;
257257

258-
ngx_add_timer(http->peer.connection->read, http->timeout);
259-
ngx_add_timer(http->peer.connection->write, http->timeout);
258+
ngx_add_timer(http->peer.connection->read, http->conf->timeout);
259+
ngx_add_timer(http->peer.connection->write, http->conf->timeout);
260260

261261
#if (NGX_SSL)
262262
if (http->ssl != NULL && http->peer.connection->ssl == NULL) {
@@ -522,7 +522,7 @@ ngx_js_http_write_handler(ngx_event_t *wev)
522522
}
523523

524524
if (!wev->timer_set) {
525-
ngx_add_timer(wev, http->timeout);
525+
ngx_add_timer(wev, http->conf->timeout);
526526
}
527527
}
528528

nginx/ngx_js_http.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ struct ngx_js_http_s {
114114
in_port_t port;
115115

116116
ngx_peer_connection_t peer;
117-
ngx_msec_t timeout;
118117

118+
ngx_js_loc_conf_t *conf;
119119
ngx_int_t buffer_size;
120120
ngx_int_t max_response_body_size;
121121

nginx/ngx_qjs_fetch.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static ngx_int_t ngx_qjs_headers_inherit(JSContext *cx,
3939
static ngx_int_t ngx_qjs_headers_fill(JSContext *cx, ngx_js_headers_t *headers,
4040
JSValue init);
4141
static ngx_qjs_fetch_t *ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool,
42-
ngx_log_t *log);
42+
ngx_log_t *log, ngx_js_loc_conf_t *conf);
4343
static void ngx_qjs_fetch_error(ngx_js_http_t *http, const char *err);
4444
static void ngx_qjs_fetch_destructor(ngx_qjs_event_t *event);
4545
static void ngx_qjs_fetch_done(ngx_qjs_fetch_t *fetch, JSValue retval,
@@ -257,7 +257,8 @@ ngx_qjs_ext_fetch(JSContext *cx, JSValueConst this_val, int argc,
257257
c = ngx_qjs_external_connection(cx, external);
258258
pool = ngx_qjs_external_pool(cx, external);
259259

260-
fetch = ngx_qjs_fetch_alloc(cx, pool, c->log);
260+
fetch = ngx_qjs_fetch_alloc(cx, pool, c->log,
261+
ngx_qjs_external_loc_conf(cx, external));
261262
if (fetch == NULL) {
262263
return JS_ThrowOutOfMemory(cx);
263264
}
@@ -271,7 +272,6 @@ ngx_qjs_ext_fetch(JSContext *cx, JSValueConst this_val, int argc,
271272

272273
http = &fetch->http;
273274
http->response.url = request.url;
274-
http->timeout = ngx_qjs_external_fetch_timeout(cx, external);
275275
http->buffer_size = ngx_qjs_external_buffer_size(cx, external);
276276
http->max_response_body_size =
277277
ngx_qjs_external_max_response_buffer_size(cx, external);
@@ -1193,7 +1193,8 @@ ngx_qjs_headers_fill(JSContext *cx, ngx_js_headers_t *headers, JSValue init)
11931193

11941194

11951195
static ngx_qjs_fetch_t *
1196-
ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool, ngx_log_t *log)
1196+
ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool, ngx_log_t *log,
1197+
ngx_js_loc_conf_t *conf)
11971198
{
11981199
ngx_js_ctx_t *ctx;
11991200
ngx_js_http_t *http;
@@ -1210,7 +1211,7 @@ ngx_qjs_fetch_alloc(JSContext *cx, ngx_pool_t *pool, ngx_log_t *log)
12101211
http->pool = pool;
12111212
http->log = log;
12121213

1213-
http->timeout = 10000;
1214+
http->conf = conf;
12141215

12151216
http->http_parse.content_length_n = -1;
12161217

0 commit comments

Comments
 (0)