diff options
author | Dmitry Volyntsev <xeioex@nginx.com> | 2022-08-10 20:04:40 -0700 |
---|---|---|
committer | Dmitry Volyntsev <xeioex@nginx.com> | 2022-08-10 20:04:40 -0700 |
commit | 836b27f618ccf81c53551d3de164bc7b33e924ad (patch) | |
tree | 781f56852f57871ae0238df88236c1476a8c08b2 /nginx/ngx_stream_js_module.c | |
parent | 6861f372e04fd451a9abd50d17dc1d2708ea44d8 (diff) | |
download | njs-836b27f618ccf81c53551d3de164bc7b33e924ad.tar.gz njs-836b27f618ccf81c53551d3de164bc7b33e924ad.zip |
Stream: improved flags argument for s.on() callback methods.
Diffstat (limited to 'nginx/ngx_stream_js_module.c')
-rw-r--r-- | nginx/ngx_stream_js_module.c | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/nginx/ngx_stream_js_module.c b/nginx/ngx_stream_js_module.c index 5f092dd6..902b542e 100644 --- a/nginx/ngx_stream_js_module.c +++ b/nginx/ngx_stream_js_module.c @@ -493,6 +493,30 @@ static njs_external_t ngx_stream_js_ext_session[] = { }; +static njs_external_t ngx_stream_js_ext_session_flags[] = { + + { + .flags = NJS_EXTERN_PROPERTY | NJS_EXTERN_SYMBOL, + .name.symbol = NJS_SYMBOL_TO_STRING_TAG, + .u.property = { + .value = "Stream Flags", + } + }, + + { + .flags = NJS_EXTERN_PROPERTY, + .name.string = njs_str("last"), + .enumerable = 1, + .u.property = { + .handler = ngx_js_ext_flags, + .magic16 = NGX_JS_BOOLEAN, + .magic32 = 0x00000001, + } + }, + +}; + + static njs_vm_ops_t ngx_stream_js_ops = { ngx_stream_js_set_timer, ngx_stream_js_clear_timer, @@ -525,6 +549,7 @@ static ngx_stream_filter_pt ngx_stream_next_filter; static njs_int_t ngx_stream_js_session_proto_id; +static njs_int_t ngx_stream_js_session_flags_proto_id; static ngx_int_t @@ -923,14 +948,12 @@ static njs_int_t ngx_stream_js_run_event(ngx_stream_session_t *s, ngx_stream_js_ctx_t *ctx, ngx_stream_js_ev_t *event) { - size_t len; - u_char *p; - njs_int_t ret; - ngx_buf_t *b; - ngx_connection_t *c; - njs_opaque_value_t last_key, last; - - static const njs_str_t last_str = njs_str("last"); + size_t len; + u_char *p; + njs_int_t ret; + ngx_buf_t *b; + uintptr_t flags; + ngx_connection_t *c; if (event->ev == NULL) { return NJS_OK; @@ -957,16 +980,12 @@ ngx_stream_js_run_event(ngx_stream_session_t *s, ngx_stream_js_ctx_t *ctx, return ret; } - njs_vm_value_string_set(ctx->vm, njs_value_arg(&last_key), last_str.start, - last_str.length); - - njs_value_boolean_set(njs_value_arg(&last), b && b->last_buf); + flags = b && b->last_buf; - ret = njs_vm_object_alloc(ctx->vm, njs_value_arg(&ctx->args[2]), - njs_value_arg(&last_key), - njs_value_arg(&last), NULL); + ret = njs_vm_external_create(ctx->vm, njs_value_arg(&ctx->args[2]), + ngx_stream_js_session_flags_proto_id, (void *) flags, 0); if (ret != NJS_OK) { - return ret; + return NGX_ERROR; } njs_vm_post_event(ctx->vm, event->ev, njs_value_arg(&ctx->args[1]), 2); @@ -1787,7 +1806,16 @@ ngx_stream_js_init_conf_vm(ngx_conf_t *cf, ngx_stream_js_srv_conf_t *conf) njs_nitems(ngx_stream_js_ext_session)); if (ngx_stream_js_session_proto_id < 0) { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, - "failed to add js request proto"); + "failed to add js session proto"); + return NGX_ERROR; + } + + ngx_stream_js_session_flags_proto_id = njs_vm_external_prototype(conf->vm, + ngx_stream_js_ext_session_flags, + njs_nitems(ngx_stream_js_ext_session_flags)); + if (ngx_stream_js_session_flags_proto_id < 0) { + ngx_log_error(NGX_LOG_EMERG, cf->log, 0, + "failed to add js session flags proto"); return NGX_ERROR; } |