From: Dmitry Volyntsev Date: Fri, 8 Oct 2021 13:41:01 +0000 (+0000) Subject: Modules: introduced setReturnValue() method. X-Git-Tag: 0.7.0~9 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/%7B@url%7D?a=commitdiff_plain;h=5ac04e275d55862b8e47763f6052e3b6daeb4218;p=njs.git Modules: introduced setReturnValue() method. --- diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c index 1d5044ee..dee77216 100644 --- a/nginx/ngx_http_js_module.c +++ b/nginx/ngx_http_js_module.c @@ -143,6 +143,8 @@ static njs_int_t ngx_http_js_ext_send(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused); static njs_int_t ngx_http_js_ext_send_buffer(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused); +static njs_int_t ngx_http_js_ext_set_return_value(njs_vm_t *vm, + njs_value_t *args, njs_uint_t nargs, njs_index_t unused); static njs_int_t ngx_http_js_ext_done(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused); static njs_int_t ngx_http_js_ext_finish(njs_vm_t *vm, njs_value_t *args, @@ -654,6 +656,17 @@ static njs_external_t ngx_http_js_ext_request[] = { } }, + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("setReturnValue"), + .writable = 1, + .configurable = 1, + .enumerable = 1, + .u.method = { + .native = ngx_http_js_ext_set_return_value, + } + }, + { .flags = NJS_EXTERN_METHOD, .name.string = njs_str("done"), @@ -2153,6 +2166,29 @@ ngx_http_js_ext_send_buffer(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, } +static njs_int_t +ngx_http_js_ext_set_return_value(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t unused) +{ + ngx_http_js_ctx_t *ctx; + ngx_http_request_t *r; + + r = njs_vm_external(vm, ngx_http_js_request_proto_id, + njs_argument(args, 0)); + if (r == NULL) { + njs_vm_error(vm, "\"this\" is not an external"); + return NJS_ERROR; + } + + ctx = ngx_http_get_module_ctx(r, ngx_http_js_module); + + njs_value_assign(&ctx->retval, njs_arg(args, nargs, 1)); + njs_value_undefined_set(njs_vm_retval(vm)); + + return NJS_OK; +} + + static njs_int_t ngx_http_js_ext_done(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused) diff --git a/nginx/ngx_stream_js_module.c b/nginx/ngx_stream_js_module.c index 21ed45e3..2f54a9b2 100644 --- a/nginx/ngx_stream_js_module.c +++ b/nginx/ngx_stream_js_module.c @@ -110,6 +110,8 @@ static njs_int_t ngx_stream_js_ext_off(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused); static njs_int_t ngx_stream_js_ext_send(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused); +static njs_int_t ngx_stream_js_ext_set_return_value(njs_vm_t *vm, + njs_value_t *args, njs_uint_t nargs, njs_index_t unused); static njs_int_t ngx_stream_js_ext_variables(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value, njs_value_t *setval, @@ -450,6 +452,17 @@ static njs_external_t ngx_stream_js_ext_session[] = { } }, + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("setReturnValue"), + .writable = 1, + .configurable = 1, + .enumerable = 1, + .u.method = { + .native = ngx_stream_js_ext_set_return_value, + } + }, + }; @@ -1248,6 +1261,29 @@ ngx_stream_js_ext_send(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, } +static njs_int_t +ngx_stream_js_ext_set_return_value(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t unused) +{ + ngx_stream_js_ctx_t *ctx; + ngx_stream_session_t *s; + + s = njs_vm_external(vm, ngx_stream_js_session_proto_id, + njs_argument(args, 0)); + if (s == NULL) { + njs_vm_error(vm, "\"this\" is not an external"); + return NJS_ERROR; + } + + ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module); + + njs_value_assign(&ctx->retval, njs_arg(args, nargs, 1)); + njs_value_undefined_set(njs_vm_retval(vm)); + + return NJS_OK; +} + + static njs_int_t ngx_stream_js_ext_variables(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value, njs_value_t *setval, njs_value_t *retval)