details: https://hg.nginx.org/njs/rev/fb3e13959b71 branches: changeset: 1717:fb3e13959b71 user: Dmitry Volyntsev <xei...@nginx.com> date: Fri Oct 08 13:41:01 2021 +0000 description: Modules: introduced setReturnValue() method.
diffstat: nginx/ngx_http_js_module.c | 36 ++++++++++++++++++++++++++++++++++++ nginx/ngx_stream_js_module.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 0 deletions(-) diffs (120 lines): diff -r 5e3973c2216d -r fb3e13959b71 nginx/ngx_http_js_module.c --- a/nginx/ngx_http_js_module.c Fri Oct 08 13:41:00 2021 +0000 +++ b/nginx/ngx_http_js_module.c Fri Oct 08 13:41:01 2021 +0000 @@ -143,6 +143,8 @@ static njs_int_t ngx_http_js_ext_send(nj 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, @@ -656,6 +658,17 @@ static njs_external_t ngx_http_js_ext_r { .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"), .writable = 1, .configurable = 1, @@ -2154,6 +2167,29 @@ ngx_http_js_ext_send_buffer(njs_vm_t *vm 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 -r 5e3973c2216d -r fb3e13959b71 nginx/ngx_stream_js_module.c --- a/nginx/ngx_stream_js_module.c Fri Oct 08 13:41:00 2021 +0000 +++ b/nginx/ngx_stream_js_module.c Fri Oct 08 13:41:01 2021 +0000 @@ -110,6 +110,8 @@ static njs_int_t ngx_stream_js_ext_off(n 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 } }, + { + .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, + } + }, + }; @@ -1249,6 +1262,29 @@ ngx_stream_js_ext_send(njs_vm_t *vm, njs 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) { _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel