Welcome! Log In Create A New Profile

Advanced

[njs] Modules: introduced setReturnValue() method.

Dmitry Volyntsev
October 08, 2021 09:44AM
details: https://hg.nginx.org/njs/rev/fb3e13959b71
branches:
changeset: 1717:fb3e13959b71
user: Dmitry Volyntsev <xeioex@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
Subject Author Views Posted

[njs] Modules: introduced setReturnValue() method.

Dmitry Volyntsev 518 October 08, 2021 09:44AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 282
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready