]> git.kaiwu.me - njs.git/commitdiff
Modules: introduced global nginx properties.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 18 May 2023 04:16:19 +0000 (21:16 -0700)
committerDmitry Volyntsev <xeioex@nginx.com>
Thu, 18 May 2023 04:16:19 +0000 (21:16 -0700)
The following properties were introduced:
    ngx.build - an optional nginx build name, corresponds to
        --build=name argument of configure script, by default is "".
    ngx.conf_file_path - the file path to current nginx configuration
        file.
    ngx.error_log_path - the file path to current error log file.
    ngx.prefix - the directory that keeps server files.
    ngx.version - the nginx version as a string, for example: "1.25.0".
    ngx.version_number - the nginx version as a number, for example:
        1025000.

nginx/ngx_js.c

index ed3ea5c2657652b229f2f8767bfa8292a98a52a9..3ce1eba7633a678618e5f968f06b9995d13b3187 100644 (file)
 #include "ngx_js_fetch.h"
 
 
+static njs_int_t ngx_js_ext_build(njs_vm_t *vm, njs_object_prop_t *prop,
+    njs_value_t *value, njs_value_t *setval, njs_value_t *retval);
+static njs_int_t ngx_js_ext_conf_file_path(njs_vm_t *vm,
+    njs_object_prop_t *prop, njs_value_t *value, njs_value_t *setval,
+    njs_value_t *retval);
 static njs_int_t ngx_js_ext_conf_prefix(njs_vm_t *vm, njs_object_prop_t *prop,
     njs_value_t *value, njs_value_t *setval, njs_value_t *retval);
+static njs_int_t ngx_js_ext_error_log_path(njs_vm_t *vm,
+    njs_object_prop_t *prop, njs_value_t *value, njs_value_t *setval,
+    njs_value_t *retval);
+static njs_int_t ngx_js_ext_prefix(njs_vm_t *vm, njs_object_prop_t *prop,
+    njs_value_t *value, njs_value_t *setval, njs_value_t *retval);
+static njs_int_t ngx_js_ext_version(njs_vm_t *vm, njs_object_prop_t *prop,
+    njs_value_t *value, njs_value_t *setval, njs_value_t *retval);
 static void ngx_js_cleanup_vm(void *data);
 
 
@@ -24,9 +36,28 @@ extern njs_module_t  njs_zlib_module;
 
 static njs_external_t  ngx_js_ext_core[] = {
 
+    {
+        .flags = NJS_EXTERN_PROPERTY,
+        .name.string = njs_str("build"),
+        .enumerable = 1,
+        .u.property = {
+            .handler = ngx_js_ext_build,
+        }
+    },
+
+    {
+        .flags = NJS_EXTERN_PROPERTY,
+        .name.string = njs_str("conf_file_path"),
+        .enumerable = 1,
+        .u.property = {
+            .handler = ngx_js_ext_conf_file_path,
+        }
+    },
+
     {
         .flags = NJS_EXTERN_PROPERTY,
         .name.string = njs_str("conf_prefix"),
+        .enumerable = 1,
         .u.property = {
             .handler = ngx_js_ext_conf_prefix,
         }
@@ -42,6 +73,15 @@ static njs_external_t  ngx_js_ext_core[] = {
         }
     },
 
+    {
+        .flags = NJS_EXTERN_PROPERTY,
+        .name.string = njs_str("error_log_path"),
+        .enumerable = 1,
+        .u.property = {
+            .handler = ngx_js_ext_error_log_path,
+        }
+    },
+
     {
         .flags = NJS_EXTERN_METHOD,
         .name.string = njs_str("fetch"),
@@ -74,6 +114,35 @@ static njs_external_t  ngx_js_ext_core[] = {
         }
     },
 
+    {
+        .flags = NJS_EXTERN_PROPERTY,
+        .name.string = njs_str("prefix"),
+        .enumerable = 1,
+        .u.property = {
+            .handler = ngx_js_ext_prefix,
+        }
+    },
+
+    {
+        .flags = NJS_EXTERN_PROPERTY,
+        .name.string = njs_str("version"),
+        .enumerable = 1,
+        .u.property = {
+            .handler = ngx_js_ext_version,
+        }
+    },
+
+    {
+        .flags = NJS_EXTERN_PROPERTY,
+        .name.string = njs_str("version_number"),
+        .enumerable = 1,
+        .u.property = {
+            .handler = ngx_js_ext_constant,
+            .magic32 = nginx_version,
+            .magic16 = NGX_JS_NUMBER,
+        }
+    },
+
     {
         .flags = NJS_EXTERN_PROPERTY,
         .name.string = njs_str("WARN"),
@@ -338,6 +407,31 @@ ngx_js_ext_flags(njs_vm_t *vm, njs_object_prop_t *prop,
 }
 
 
+njs_int_t
+ngx_js_ext_build(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value,
+    njs_value_t *setval, njs_value_t *retval)
+{
+    return njs_vm_value_string_set(vm, retval,
+#ifdef NGX_BUILD
+                                   (u_char *) NGX_BUILD,
+                                   njs_strlen(NGX_BUILD)
+#else
+                                   (u_char *) "",
+                                   0
+#endif
+                                   );
+}
+
+
+njs_int_t
+ngx_js_ext_conf_file_path(njs_vm_t *vm, njs_object_prop_t *prop,
+    njs_value_t *value, njs_value_t *setval, njs_value_t *retval)
+{
+    return njs_vm_value_string_set(vm, retval, ngx_cycle->conf_file.data,
+                                   ngx_cycle->conf_file.len);
+}
+
+
 njs_int_t
 ngx_js_ext_conf_prefix(njs_vm_t *vm, njs_object_prop_t *prop,
     njs_value_t *value, njs_value_t *setval, njs_value_t *retval)
@@ -347,6 +441,33 @@ ngx_js_ext_conf_prefix(njs_vm_t *vm, njs_object_prop_t *prop,
 }
 
 
+njs_int_t
+ngx_js_ext_error_log_path(njs_vm_t *vm, njs_object_prop_t *prop,
+    njs_value_t *value, njs_value_t *setval, njs_value_t *retval)
+{
+    return njs_vm_value_string_set(vm, retval, ngx_cycle->error_log.data,
+                                   ngx_cycle->error_log.len);
+}
+
+
+njs_int_t
+ngx_js_ext_prefix(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value,
+    njs_value_t *setval, njs_value_t *retval)
+{
+    return njs_vm_value_string_set(vm, retval, ngx_cycle->prefix.data,
+                                   ngx_cycle->prefix.len);
+}
+
+
+njs_int_t
+ngx_js_ext_version(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value,
+    njs_value_t *setval, njs_value_t *retval)
+{
+    return njs_vm_value_string_set(vm, retval, (u_char *) NGINX_VERSION,
+                                   njs_strlen(NGINX_VERSION));
+}
+
+
 njs_int_t
 ngx_js_ext_log(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
     njs_index_t level, njs_value_t *retval)