aboutsummaryrefslogtreecommitdiff
path: root/nginx
diff options
context:
space:
mode:
Diffstat (limited to 'nginx')
-rw-r--r--nginx/ngx_http_js_module.c105
-rw-r--r--nginx/ngx_stream_js_module.c109
2 files changed, 124 insertions, 90 deletions
diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c
index 68517e95..e608c9e7 100644
--- a/nginx/ngx_http_js_module.c
+++ b/nginx/ngx_http_js_module.c
@@ -14,10 +14,14 @@
typedef struct {
njs_vm_t *vm;
- ngx_str_t content;
const njs_extern_t *req_proto;
const njs_extern_t *res_proto;
const njs_extern_t *rep_proto;
+} ngx_http_js_main_conf_t;
+
+
+typedef struct {
+ ngx_str_t content;
} ngx_http_js_loc_conf_t;
@@ -141,6 +145,7 @@ static char *ngx_http_js_include(ngx_conf_t *cf, ngx_command_t *cmd,
static char *ngx_http_js_set(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
static char *ngx_http_js_content(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static void *ngx_http_js_create_main_conf(ngx_conf_t *cf);
static void *ngx_http_js_create_loc_conf(ngx_conf_t *cf);
static char *ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent,
void *child);
@@ -151,7 +156,7 @@ static ngx_command_t ngx_http_js_commands[] = {
{ ngx_string("js_include"),
NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
ngx_http_js_include,
- NGX_HTTP_LOC_CONF_OFFSET,
+ NGX_HTTP_MAIN_CONF_OFFSET,
0,
NULL },
@@ -177,7 +182,7 @@ static ngx_http_module_t ngx_http_js_module_ctx = {
NULL, /* preconfiguration */
NULL, /* postconfiguration */
- NULL, /* create main configuration */
+ ngx_http_js_create_main_conf, /* create main configuration */
NULL, /* init main configuration */
NULL, /* create server configuration */
@@ -809,14 +814,14 @@ ngx_http_js_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
static ngx_int_t
ngx_http_js_init_vm(ngx_http_request_t *r)
{
- nxt_int_t rc;
- nxt_str_t exception;
- ngx_http_js_ctx_t *ctx;
- ngx_pool_cleanup_t *cln;
- ngx_http_js_loc_conf_t *jlcf;
-
- jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
- if (jlcf->vm == NULL) {
+ nxt_int_t rc;
+ nxt_str_t exception;
+ ngx_http_js_ctx_t *ctx;
+ ngx_pool_cleanup_t *cln;
+ ngx_http_js_main_conf_t *jmcf;
+
+ jmcf = ngx_http_get_module_main_conf(r, ngx_http_js_module);
+ if (jmcf->vm == NULL) {
return NGX_DECLINED;
}
@@ -835,7 +840,7 @@ ngx_http_js_init_vm(ngx_http_request_t *r)
return NGX_OK;
}
- ctx->vm = njs_vm_clone(jlcf->vm, r);
+ ctx->vm = njs_vm_clone(jmcf->vm, r);
if (ctx->vm == NULL) {
return NGX_ERROR;
}
@@ -860,13 +865,13 @@ ngx_http_js_init_vm(ngx_http_request_t *r)
}
rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->args[0]),
- jlcf->req_proto, r);
+ jmcf->req_proto, r);
if (rc != NXT_OK) {
return NGX_ERROR;
}
rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->args[1]),
- jlcf->res_proto, r);
+ jmcf->res_proto, r);
if (rc != NXT_OK) {
return NGX_ERROR;
}
@@ -1949,10 +1954,10 @@ ngx_http_js_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
{
njs_vm_event_t vm_event = data;
- nxt_int_t ret;
- ngx_http_js_ctx_t *ctx;
- njs_opaque_value_t reply;
- ngx_http_js_loc_conf_t *jlcf;
+ nxt_int_t ret;
+ ngx_http_js_ctx_t *ctx;
+ njs_opaque_value_t reply;
+ ngx_http_js_main_conf_t *jmcf;
if (rc != NGX_OK || r->connection->error || r->buffered) {
return rc;
@@ -1975,7 +1980,7 @@ ngx_http_js_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
ctx->done = 1;
- jlcf = ngx_http_get_module_loc_conf(r->parent, ngx_http_js_module);
+ jmcf = ngx_http_get_module_main_conf(r, ngx_http_js_module);
ctx = ngx_http_get_module_ctx(r->parent, ngx_http_js_module);
@@ -1991,7 +1996,7 @@ ngx_http_js_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
}
ret = njs_vm_external_create(ctx->vm, njs_value_arg(&reply),
- jlcf->rep_proto, r);
+ jmcf->rep_proto, r);
if (ret != NXT_OK) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"js subrequest reply creation failed");
@@ -2152,7 +2157,7 @@ ngx_http_js_handle_event(ngx_http_request_t *r, njs_vm_event_t vm_event,
static char *
ngx_http_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
- ngx_http_js_loc_conf_t *jlcf = conf;
+ ngx_http_js_main_conf_t *jmcf = conf;
size_t size;
u_char *start, *end;
@@ -2165,7 +2170,7 @@ ngx_http_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ngx_file_info_t fi;
ngx_pool_cleanup_t *cln;
- if (jlcf->vm) {
+ if (jmcf->vm) {
return "is duplicate";
}
@@ -2229,8 +2234,8 @@ ngx_http_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
options.backtrace = 1;
options.ops = &ngx_http_js_ops;
- jlcf->vm = njs_vm_create(&options);
- if (jlcf->vm == NULL) {
+ jmcf->vm = njs_vm_create(&options);
+ if (jmcf->vm == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to create JS VM");
return NGX_CONF_ERROR;
}
@@ -2241,34 +2246,34 @@ ngx_http_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
}
cln->handler = ngx_http_js_cleanup_vm;
- cln->data = jlcf->vm;
+ cln->data = jmcf->vm;
- jlcf->req_proto = njs_vm_external_prototype(jlcf->vm,
+ jmcf->req_proto = njs_vm_external_prototype(jmcf->vm,
&ngx_http_js_externals[0]);
- if (jlcf->req_proto == NULL) {
+ if (jmcf->req_proto == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add request proto");
return NGX_CONF_ERROR;
}
- jlcf->res_proto = njs_vm_external_prototype(jlcf->vm,
+ jmcf->res_proto = njs_vm_external_prototype(jmcf->vm,
&ngx_http_js_externals[1]);
- if (jlcf->res_proto == NULL) {
+ if (jmcf->res_proto == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"failed to add response proto");
return NGX_CONF_ERROR;
}
- jlcf->rep_proto = njs_vm_external_prototype(jlcf->vm,
+ jmcf->rep_proto = njs_vm_external_prototype(jmcf->vm,
&ngx_http_js_externals[2]);
- if (jlcf->rep_proto == NULL) {
+ if (jmcf->rep_proto == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add reply proto");
return NGX_CONF_ERROR;
}
- rc = njs_vm_compile(jlcf->vm, &start, end);
+ rc = njs_vm_compile(jmcf->vm, &start, end);
if (rc != NJS_OK) {
- njs_vm_retval_to_ext_string(jlcf->vm, &text);
+ njs_vm_retval_to_ext_string(jmcf->vm, &text);
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%*s, included",
@@ -2346,11 +2351,11 @@ ngx_http_js_content(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
static void *
-ngx_http_js_create_loc_conf(ngx_conf_t *cf)
+ngx_http_js_create_main_conf(ngx_conf_t *cf)
{
- ngx_http_js_loc_conf_t *conf;
+ ngx_http_js_main_conf_t *conf;
- conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_js_loc_conf_t));
+ conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_js_main_conf_t));
if (conf == NULL) {
return NULL;
}
@@ -2368,18 +2373,28 @@ ngx_http_js_create_loc_conf(ngx_conf_t *cf)
}
-static char *
-ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
+static void *
+ngx_http_js_create_loc_conf(ngx_conf_t *cf)
{
- ngx_http_js_loc_conf_t *prev = parent;
- ngx_http_js_loc_conf_t *conf = child;
+ ngx_http_js_loc_conf_t *conf;
- if (conf->vm == NULL) {
- conf->vm = prev->vm;
- conf->req_proto = prev->req_proto;
- conf->res_proto = prev->res_proto;
- conf->rep_proto = prev->rep_proto;
+ conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_js_loc_conf_t));
+ if (conf == NULL) {
+ return NULL;
}
+ /*
+ * set by ngx_pcalloc():
+ *
+ * conf->content = { 0, NULL };
+ */
+
+ return conf;
+}
+
+
+static char *
+ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
+{
return NGX_CONF_OK;
}
diff --git a/nginx/ngx_stream_js_module.c b/nginx/ngx_stream_js_module.c
index fb216ed7..424bf614 100644
--- a/nginx/ngx_stream_js_module.c
+++ b/nginx/ngx_stream_js_module.c
@@ -14,10 +14,14 @@
typedef struct {
njs_vm_t *vm;
+ const njs_extern_t *proto;
+} ngx_stream_js_main_conf_t;
+
+
+typedef struct {
ngx_str_t access;
ngx_str_t preread;
ngx_str_t filter;
- const njs_extern_t *proto;
} ngx_stream_js_srv_conf_t;
@@ -75,6 +79,7 @@ static char *ngx_stream_js_include(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_stream_js_set(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static void *ngx_stream_js_create_main_conf(ngx_conf_t *cf);
static void *ngx_stream_js_create_srv_conf(ngx_conf_t *cf);
static char *ngx_stream_js_merge_srv_conf(ngx_conf_t *cf, void *parent,
void *child);
@@ -86,14 +91,14 @@ static ngx_command_t ngx_stream_js_commands[] = {
{ ngx_string("js_include"),
NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1,
ngx_stream_js_include,
- NGX_STREAM_SRV_CONF_OFFSET,
+ NGX_STREAM_MAIN_CONF_OFFSET,
0,
NULL },
{ ngx_string("js_set"),
NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE2,
ngx_stream_js_set,
- NGX_STREAM_SRV_CONF_OFFSET,
+ 0,
0,
NULL },
@@ -123,29 +128,29 @@ static ngx_command_t ngx_stream_js_commands[] = {
static ngx_stream_module_t ngx_stream_js_module_ctx = {
- NULL, /* preconfiguration */
- ngx_stream_js_init, /* postconfiguration */
+ NULL, /* preconfiguration */
+ ngx_stream_js_init, /* postconfiguration */
- NULL, /* create main configuration */
- NULL, /* init main configuration */
+ ngx_stream_js_create_main_conf, /* create main configuration */
+ NULL, /* init main configuration */
- ngx_stream_js_create_srv_conf, /* create server configuration */
- ngx_stream_js_merge_srv_conf, /* merge server configuration */
+ ngx_stream_js_create_srv_conf, /* create server configuration */
+ ngx_stream_js_merge_srv_conf, /* merge server configuration */
};
ngx_module_t ngx_stream_js_module = {
NGX_MODULE_V1,
- &ngx_stream_js_module_ctx, /* module context */
- ngx_stream_js_commands, /* module directives */
- NGX_STREAM_MODULE, /* module type */
- NULL, /* init master */
- NULL, /* init module */
- NULL, /* init process */
- NULL, /* init thread */
- NULL, /* exit thread */
- NULL, /* exit process */
- NULL, /* exit master */
+ &ngx_stream_js_module_ctx, /* module context */
+ ngx_stream_js_commands, /* module directives */
+ NGX_STREAM_MODULE, /* module type */
+ NULL, /* init master */
+ NULL, /* init module */
+ NULL, /* init process */
+ NULL, /* init thread */
+ NULL, /* exit thread */
+ NULL, /* exit process */
+ NULL, /* exit master */
NGX_MODULE_V1_PADDING
};
@@ -621,14 +626,14 @@ ngx_stream_js_variable(ngx_stream_session_t *s, ngx_stream_variable_value_t *v,
static ngx_int_t
ngx_stream_js_init_vm(ngx_stream_session_t *s)
{
- nxt_int_t rc;
- nxt_str_t exception;
- ngx_pool_cleanup_t *cln;
- ngx_stream_js_ctx_t *ctx;
- ngx_stream_js_srv_conf_t *jscf;
-
- jscf = ngx_stream_get_module_srv_conf(s, ngx_stream_js_module);
- if (jscf->vm == NULL) {
+ nxt_int_t rc;
+ nxt_str_t exception;
+ ngx_pool_cleanup_t *cln;
+ ngx_stream_js_ctx_t *ctx;
+ ngx_stream_js_main_conf_t *jmcf;
+
+ jmcf = ngx_stream_get_module_main_conf(s, ngx_stream_js_module);
+ if (jmcf->vm == NULL) {
return NGX_DECLINED;
}
@@ -647,7 +652,7 @@ ngx_stream_js_init_vm(ngx_stream_session_t *s)
return NGX_OK;
}
- ctx->vm = njs_vm_clone(jscf->vm, s);
+ ctx->vm = njs_vm_clone(jmcf->vm, s);
if (ctx->vm == NULL) {
return NGX_ERROR;
}
@@ -671,7 +676,7 @@ ngx_stream_js_init_vm(ngx_stream_session_t *s)
return NGX_ERROR;
}
- rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->arg), jscf->proto,
+ rc = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->arg), jmcf->proto,
s);
if (rc != NXT_OK) {
return NGX_ERROR;
@@ -941,7 +946,7 @@ ngx_stream_js_ext_get_code(njs_vm_t *vm, njs_value_t *value, void *obj,
static char *
ngx_stream_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
- ngx_stream_js_srv_conf_t *jscf = conf;
+ ngx_stream_js_main_conf_t *jmcf = conf;
size_t size;
u_char *start, *end;
@@ -954,7 +959,7 @@ ngx_stream_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ngx_file_info_t fi;
ngx_pool_cleanup_t *cln;
- if (jscf->vm) {
+ if (jmcf->vm) {
return "is duplicate";
}
@@ -1017,8 +1022,8 @@ ngx_stream_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
options.backtrace = 1;
- jscf->vm = njs_vm_create(&options);
- if (jscf->vm == NULL) {
+ jmcf->vm = njs_vm_create(&options);
+ if (jmcf->vm == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to create JS VM");
return NGX_CONF_ERROR;
}
@@ -1029,20 +1034,20 @@ ngx_stream_js_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
}
cln->handler = ngx_stream_js_cleanup_vm;
- cln->data = jscf->vm;
+ cln->data = jmcf->vm;
- jscf->proto = njs_vm_external_prototype(jscf->vm,
+ jmcf->proto = njs_vm_external_prototype(jmcf->vm,
&ngx_stream_js_externals[0]);
- if (jscf->proto == NULL) {
+ if (jmcf->proto == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to add stream proto");
return NGX_CONF_ERROR;
}
- rc = njs_vm_compile(jscf->vm, &start, end);
+ rc = njs_vm_compile(jmcf->vm, &start, end);
if (rc != NJS_OK) {
- njs_vm_retval_to_ext_string(jscf->vm, &text);
+ njs_vm_retval_to_ext_string(jmcf->vm, &text);
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%*s, included",
@@ -1098,11 +1103,11 @@ ngx_stream_js_set(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
static void *
-ngx_stream_js_create_srv_conf(ngx_conf_t *cf)
+ngx_stream_js_create_main_conf(ngx_conf_t *cf)
{
ngx_stream_js_srv_conf_t *conf;
- conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_js_srv_conf_t));
+ conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_js_main_conf_t));
if (conf == NULL) {
return NULL;
}
@@ -1112,6 +1117,25 @@ ngx_stream_js_create_srv_conf(ngx_conf_t *cf)
*
* conf->vm = NULL;
* conf->proto = NULL;
+ */
+
+ return conf;
+}
+
+
+static void *
+ngx_stream_js_create_srv_conf(ngx_conf_t *cf)
+{
+ ngx_stream_js_srv_conf_t *conf;
+
+ conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_js_srv_conf_t));
+ if (conf == NULL) {
+ return NULL;
+ }
+
+ /*
+ * set by ngx_pcalloc():
+ *
* conf->access = { 0, NULL };
* conf->preread = { 0, NULL };
* conf->filter = { 0, NULL };
@@ -1127,11 +1151,6 @@ ngx_stream_js_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_stream_js_srv_conf_t *prev = parent;
ngx_stream_js_srv_conf_t *conf = child;
- if (conf->vm == NULL) {
- conf->vm = prev->vm;
- conf->proto = prev->proto;
- }
-
ngx_conf_merge_str_value(conf->access, prev->access, "");
ngx_conf_merge_str_value(conf->preread, prev->preread, "");
ngx_conf_merge_str_value(conf->filter, prev->filter, "");