"internalRedirect cannot be called while filtering");
}
- if (ngx_qjs_string(ctx->engine, argv[0], &ctx->redirect_uri) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &ctx->redirect_uri) != NGX_OK) {
return JS_EXCEPTION;
}
ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
if (status < NGX_HTTP_BAD_REQUEST || !JS_IsNullOrUndefined(argv[1])) {
- if (ngx_qjs_string(ctx->engine, argv[1], &body) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[1], &body) != NGX_OK) {
return JS_ThrowOutOfMemory(cx);
}
ll = &out;
for (n = 0; n < (ngx_uint_t) argc; n++) {
- if (ngx_qjs_string(ctx->engine, argv[n], &s) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[n], &s) != NGX_OK) {
return JS_ThrowTypeError(cx, "failed to convert arg");
}
return JS_ThrowTypeError(cx, "cannot send buffer while not filtering");
}
- if (ngx_qjs_string(ctx->engine, argv[0], &buffer) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &buffer) != NGX_OK) {
return JS_ThrowTypeError(cx, "failed get buffer arg");
}
reply = JS_DupValue(cx, ngx_qjs_arg(sctx->args[0]));
}
- rc = ngx_qjs_call((ngx_js_ctx_t *) ctx, event->function, &reply, 1);
+ rc = ngx_qjs_call(cx, event->function, &reply, 1);
JS_FreeValue(cx, reply);
ngx_js_del_event(ctx, event);
"the primary request");
}
- if (ngx_qjs_string(ctx->engine, argv[0], &uri) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &uri) != NGX_OK) {
return JS_ThrowTypeError(cx, "failed to convert uri arg");
}
arg = argv[1];
if (JS_IsString(arg)) {
- if (ngx_qjs_string(ctx->engine, arg, &args) != NGX_OK) {
+ if (ngx_qjs_string(cx, arg, &args) != NGX_OK) {
return JS_ThrowTypeError(cx, "failed to convert args");
}
}
if (!JS_IsUndefined(value)) {
- rc = ngx_qjs_string(ctx->engine, value, &args);
+ rc = ngx_qjs_string(cx, value, &args);
JS_FreeValue(cx, value);
if (rc != NGX_OK) {
}
if (!JS_IsUndefined(value)) {
- rc = ngx_qjs_string(ctx->engine, value, &method_name);
+ rc = ngx_qjs_string(cx, value, &method_name);
JS_FreeValue(cx, value);
if (rc != NGX_OK) {
}
if (!JS_IsUndefined(value)) {
- rc = ngx_qjs_string(ctx->engine, value, &body_arg);
+ rc = ngx_qjs_string(cx, value, &body_arg);
JS_FreeValue(cx, value);
if (rc != NGX_OK) {
u_char *lowcase_key;
ngx_str_t name, s;
ngx_uint_t key;
- ngx_http_js_ctx_t *ctx;
ngx_http_request_t *r;
ngx_http_variable_t *v;
ngx_http_variable_value_t *vv;
return -1;
}
- ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
-
- if (ngx_qjs_string(ctx->engine, value, &s) != NGX_OK) {
+ if (ngx_qjs_string(cx, value, &s) != NGX_OK) {
return -1;
}
ngx_str_t *name, JSPropertyDescriptor *pdesc, JSValue *value,
unsigned flags)
{
- u_char *p;
- int64_t length;
- uint32_t i;
- ngx_int_t rc;
- ngx_str_t s;
- JSValue v;
- ngx_list_part_t *part;
- ngx_table_elt_t *header, *h, **ph;
- ngx_http_js_ctx_t *ctx;
+ u_char *p;
+ int64_t length;
+ uint32_t i;
+ ngx_int_t rc;
+ ngx_str_t s;
+ JSValue v;
+ ngx_list_part_t *part;
+ ngx_table_elt_t *header, *h, **ph;
if (flags & NJS_HEADER_GET) {
return ngx_http_qjs_header_generic(cx, r, &r->headers_out.headers, NULL,
}
ph = &header;
- ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
for (i = 0; i < (uint32_t) length; i++) {
if (JS_IsArray(cx, *value)) {
}
}
- rc = ngx_qjs_string(ctx->engine, v, &s);
+ rc = ngx_qjs_string(cx, v, &s);
if (JS_IsArray(cx, *value)) {
JS_FreeValue(cx, v);
ngx_str_t *name, JSPropertyDescriptor *pdesc, JSValue *value,
unsigned flags, ngx_table_elt_t **hh)
{
- u_char *p;
- uint32_t length;
- JSValue len, setval;
- ngx_str_t s;
- ngx_uint_t i, rc;
- ngx_list_t *headers;
- ngx_list_part_t *part;
- ngx_table_elt_t *header, *h;
- ngx_http_js_ctx_t *ctx;
+ u_char *p;
+ uint32_t length;
+ JSValue len, setval;
+ ngx_str_t s;
+ ngx_uint_t i, rc;
+ ngx_list_t *headers;
+ ngx_list_part_t *part;
+ ngx_table_elt_t *header, *h;
if (flags & NJS_HEADER_GET) {
return ngx_http_qjs_headers_out_handler(cx, r, name, pdesc, NULL,
setval = JS_UNDEFINED;
}
- ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
-
- rc = ngx_qjs_string(ctx->engine, setval, &s);
+ rc = ngx_qjs_string(cx, setval, &s);
if (value != NULL && JS_IsArray(cx, *value)) {
JS_FreeValue(cx, setval);
JSValue len, setval;
ngx_int_t rc;
ngx_str_t *hdr, s;
- ngx_http_js_ctx_t *ctx;
if (flags & NJS_HEADER_GET) {
hdr = &r->headers_out.content_type;
setval = *value;
}
- ctx = ngx_http_get_module_ctx(r, ngx_http_js_module);
-
- rc = ngx_qjs_string(ctx->engine, setval, &s);
+ rc = ngx_qjs_string(cx, setval, &s);
if (JS_IsArray(cx, *value)) {
JS_FreeValue(cx, setval);
JSValueConst reason, JS_BOOL is_handled, void *opaque);
static JSValue ngx_qjs_value(JSContext *cx, const ngx_str_t *path);
-static ngx_int_t ngx_qjs_dump_obj(ngx_engine_t *e, JSValueConst val,
+static ngx_int_t ngx_qjs_dump_obj(JSContext *cx, JSValueConst val,
ngx_str_t *dst);
static JSModuleDef *ngx_qjs_core_init(JSContext *cx, const char *name);
JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY);
if (JS_IsException(code)) {
- ngx_qjs_exception(engine, &text);
+ ngx_qjs_exception(cx, &text);
ngx_log_error(NGX_LOG_EMERG, log, 0, "js compile %V", &text);
return NGX_ERROR;
}
rv = JS_ReadObject(cx, pc[i].code, pc[i].code_size,
JS_READ_OBJ_BYTECODE);
if (JS_IsException(rv)) {
- ngx_qjs_exception(engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
"js load module exception: %V", &exception);
rv = JS_EvalFunction(cx, rv);
if (JS_IsException(rv)) {
- ngx_qjs_exception(engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0, "js eval exception: %V",
&exception);
rv = js_std_await(cx, rv);
if (JS_IsException(rv)) {
- ngx_qjs_exception(engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0, "js eval exception: %V",
&exception);
val = JS_Call(cx, fn, JS_UNDEFINED, nargs, &ngx_qjs_arg(args[0]));
JS_FreeValue(cx, fn);
if (JS_IsException(val)) {
- ngx_qjs_exception(ctx->engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
"js call exception: %V", &exception);
rc = JS_ExecutePendingJob(rt, &cx1);
if (rc <= 0) {
if (rc == -1) {
- ngx_qjs_exception(ctx->engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
"js job exception: %V", &exception);
ngx_engine_qjs_string(ngx_engine_t *e, njs_opaque_value_t *value,
ngx_str_t *str)
{
- return ngx_qjs_dump_obj(e, ngx_qjs_arg(*value), str);
+ return ngx_qjs_dump_obj(e->u.qjs.ctx, ngx_qjs_arg(*value), str);
}
}
if (ngx_qjs_unhandled_rejection(ctx)) {
- ngx_qjs_exception(ctx->engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
"js unhandled rejection: %V", &exception);
}
static ngx_int_t
-ngx_qjs_dump_obj(ngx_engine_t *e, JSValueConst val, ngx_str_t *dst)
+ngx_qjs_dump_obj(JSContext *cx, JSValueConst val, ngx_str_t *dst)
{
- size_t len, byte_offset, byte_length;
- u_char *start, *p;
- JSValue buffer, stack;
- ngx_str_t str, stack_str;
- JSContext *cx;
+ size_t len, byte_offset, byte_length;
+ u_char *start, *p;
+ JSValue buffer, stack;
+ ngx_str_t str, stack_str;
+ ngx_js_ctx_t *ctx;
+ ngx_engine_t *e;
+
+ ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
+ e = ctx->engine;
if (JS_IsNullOrUndefined(val)) {
dst->data = NULL;
ngx_int_t
-ngx_qjs_call(ngx_js_ctx_t *ctx, JSValue fn, JSValue *argv, int argc)
+ngx_qjs_call(JSContext *cx, JSValue fn, JSValue *argv, int argc)
{
- int rc;
- JSValue ret;
- ngx_str_t exception;
- JSRuntime *rt;
- JSContext *cx, *cx1;
+ int rc;
+ JSValue ret;
+ ngx_str_t exception;
+ JSRuntime *rt;
+ JSContext *cx1;
+ ngx_js_ctx_t *ctx;
- cx = ctx->engine->u.qjs.ctx;
+ ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
ret = JS_Call(cx, fn, JS_UNDEFINED, argc, argv);
if (JS_IsException(ret)) {
- ngx_qjs_exception(ctx->engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
"js call exception: %V", &exception);
rc = JS_ExecutePendingJob(rt, &cx1);
if (rc <= 0) {
if (rc == -1) {
- ngx_qjs_exception(ctx->engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, ctx->log, 0,
"js job exception: %V", &exception);
ngx_int_t
-ngx_qjs_exception(ngx_engine_t *e, ngx_str_t *s)
+ngx_qjs_exception(JSContext *cx, ngx_str_t *s)
{
JSValue exception;
- exception = JS_GetException(e->u.qjs.ctx);
- if (ngx_qjs_dump_obj(e, exception, s) != NGX_OK) {
+ exception = JS_GetException(cx);
+ if (ngx_qjs_dump_obj(cx, exception, s) != NGX_OK) {
return NGX_ERROR;
}
- JS_FreeValue(e->u.qjs.ctx, exception);
+ JS_FreeValue(cx, exception);
return NGX_OK;
}
ngx_int_t
-ngx_qjs_string(ngx_engine_t *e, JSValueConst val, ngx_str_t *dst)
+ngx_qjs_string(JSContext *cx, JSValueConst val, ngx_str_t *dst)
{
- size_t len, byte_offset, byte_length;
- u_char *start;
- JSValue buffer;
- JSContext *cx;
- const char *str;
+ size_t len, byte_offset, byte_length;
+ u_char *start;
+ JSValue buffer;
+ const char *str;
+ ngx_js_ctx_t *ctx;
+ ngx_engine_t *e;
+
+ ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
+ e = ctx->engine;
if (JS_IsNullOrUndefined(val)) {
dst->data = NULL;
external = JS_GetContextOpaque(cx);
ctx = ngx_qjs_external_ctx(cx, external);
- rc = ngx_qjs_call((ngx_js_ctx_t *) ctx, event->function, event->args,
- event->nargs);
+ rc = ngx_qjs_call(cx, event->function, event->args, event->nargs);
ngx_js_del_event(ctx, event);
char *p;
uint32_t level;
ngx_str_t msg;
- ngx_js_ctx_t *ctx;
ngx_connection_t *c;
p = JS_GetContextOpaque(cx);
argv++;
}
- ctx = ngx_qjs_external_ctx(cx, p);
c = ngx_qjs_external_connection(cx, p);
for ( ; argc > 0; argc--, argv++) {
- if (ngx_qjs_dump_obj(ctx->engine, argv[0], &msg) != NGX_OK) {
+ if (ngx_qjs_dump_obj(cx, argv[0], &msg) != NGX_OK) {
return JS_EXCEPTION;
}
void *external);
void ngx_engine_qjs_destroy(ngx_engine_t *e, ngx_js_ctx_t *ctx,
ngx_js_loc_conf_t *conf);
-ngx_int_t ngx_qjs_call(ngx_js_ctx_t *ctx, JSValue function,
- JSValue *argv, int argc);
-ngx_int_t ngx_qjs_exception(ngx_engine_t *e, ngx_str_t *s);
+ngx_int_t ngx_qjs_call(JSContext *cx, JSValue function, JSValue *argv,
+ int argc);
+ngx_int_t ngx_qjs_exception(JSContext *cx, ngx_str_t *s);
ngx_int_t ngx_qjs_integer(JSContext *cx, JSValueConst val, ngx_int_t *n);
-ngx_int_t ngx_qjs_string(ngx_engine_t *e, JSValueConst val, ngx_str_t *str);
+ngx_int_t ngx_qjs_string(JSContext *cx, JSValueConst val, ngx_str_t *str);
#define ngx_qjs_prop(cx, type, start, len) \
((type == NGX_JS_STRING) ? qjs_string_create(cx, start, len) \
int argc, JSValueConst *argv)
{
ngx_str_t key;
- ngx_js_ctx_t *ctx;
ngx_shm_zone_t *shm_zone;
shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
- if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
return JS_EXCEPTION;
}
int argc, JSValueConst *argv)
{
ngx_str_t key;
- ngx_js_ctx_t *ctx;
ngx_shm_zone_t *shm_zone;
shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
- if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
return JS_EXCEPTION;
}
ngx_str_t key;
ngx_msec_t now;
ngx_time_t *tp;
- ngx_js_ctx_t *ctx;
ngx_js_dict_t *dict;
ngx_shm_zone_t *shm_zone;
ngx_js_dict_node_t *node;
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
- if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
return JS_EXCEPTION;
}
double delta, init;
uint32_t timeout;
ngx_str_t key;
- ngx_js_ctx_t *ctx;
ngx_js_dict_t *dict;
ngx_shm_zone_t *shm_zone;
return JS_ThrowTypeError(cx, "shared dict is not a number dict");
}
- ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
- if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
return JS_EXCEPTION;
}
int argc, JSValueConst *argv)
{
ngx_str_t key;
- ngx_js_ctx_t *ctx;
ngx_shm_zone_t *shm_zone;
shm_zone = JS_GetOpaque(this_val, NGX_QJS_CLASS_ID_SHARED_DICT);
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
- if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
return JS_EXCEPTION;
}
JSValue ret;
uint32_t timeout;
ngx_str_t key;
- ngx_js_ctx_t *ctx;
ngx_js_dict_t *dict;
ngx_shm_zone_t *shm_zone;
return JS_ThrowTypeError(cx, "\"this\" is not a shared dict");
}
- ctx = ngx_qjs_external_ctx(cx, JS_GetContextOpaque(cx));
-
- if (ngx_qjs_string(ctx->engine, argv[0], &key) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &key) != NGX_OK) {
return JS_EXCEPTION;
}
ctx = ngx_stream_get_module_ctx(ses->session, ngx_stream_js_module);
- if (ngx_qjs_string(ctx->engine, argv[0], &name) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &name) != NGX_OK) {
return JS_EXCEPTION;
}
ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
- if (ngx_qjs_string(ctx->engine, argv[0], &name) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &name) != NGX_OK) {
return JS_EXCEPTION;
}
return JS_ThrowInternalError(cx, "cannot send buffer in this handler");
}
- if (ngx_qjs_string(ctx->engine, argv[0], &buffer) != NGX_OK) {
+ if (ngx_qjs_string(cx, argv[0], &buffer) != NGX_OK) {
return JS_EXCEPTION;
}
{
ngx_str_t name, name_lc, val;
ngx_uint_t key;
- ngx_js_ctx_t *ctx;
ngx_stream_session_t *s;
ngx_stream_variable_t *v;
ngx_stream_variable_value_t *vv;
return -1;
}
- ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
-
- if (ngx_qjs_string(ctx->engine, value, &val) != NGX_OK) {
+ if (ngx_qjs_string(cx, value, &val) != NGX_OK) {
return -1;
}
JS_SetOpaque(argv[1], (void *) flags);
- rc = ngx_qjs_call((ngx_js_ctx_t *) ctx, ngx_qjs_arg(event->function),
- &argv[0], 2);
+ rc = ngx_qjs_call(cx, ngx_qjs_arg(event->function), &argv[0], 2);
JS_FreeValue(cx, argv[0]);
JS_FreeValue(cx, argv[1]);
if (rc == NGX_ERROR) {
error:
- ngx_qjs_exception(ctx->engine, &exception);
+ ngx_qjs_exception(cx, &exception);
ngx_log_error(NGX_LOG_ERR, c->log, 0, "js exception: %V",
&exception);