summaryrefslogtreecommitdiffstats
path: root/modules/lua/lua_vmprep.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:01:30 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:01:30 +0000
commit6beeb1b708550be0d4a53b272283e17e5e35fe17 (patch)
tree1ce8673d4aaa948e5554000101f46536a1e4cc29 /modules/lua/lua_vmprep.h
parentInitial commit. (diff)
downloadapache2-6beeb1b708550be0d4a53b272283e17e5e35fe17.tar.xz
apache2-6beeb1b708550be0d4a53b272283e17e5e35fe17.zip
Adding upstream version 2.4.57.upstream/2.4.57upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'modules/lua/lua_vmprep.h')
-rw-r--r--modules/lua/lua_vmprep.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/modules/lua/lua_vmprep.h b/modules/lua/lua_vmprep.h
new file mode 100644
index 0000000..e46ac9b
--- /dev/null
+++ b/modules/lua/lua_vmprep.h
@@ -0,0 +1,147 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lua.h"
+#include "lauxlib.h"
+#include "lualib.h"
+
+#include "httpd.h"
+
+#include "apr_thread_rwlock.h"
+#include "apr_strings.h"
+#include "apr_tables.h"
+#include "apr_hash.h"
+#include "apr_buckets.h"
+#include "apr_file_info.h"
+#include "apr_time.h"
+#include "apr_pools.h"
+#include "apr_reslist.h"
+
+
+#ifndef VMPREP_H
+#define VMPREP_H
+
+#define AP_LUA_SCOPE_UNSET 0
+#define AP_LUA_SCOPE_ONCE 1
+#define AP_LUA_SCOPE_REQUEST 2
+#define AP_LUA_SCOPE_CONN 3
+#define AP_LUA_SCOPE_THREAD 4
+#define AP_LUA_SCOPE_SERVER 5
+
+#define AP_LUA_CACHE_UNSET 0
+#define AP_LUA_CACHE_NEVER 1
+#define AP_LUA_CACHE_STAT 2
+#define AP_LUA_CACHE_FOREVER 3
+
+#define AP_LUA_FILTER_INPUT 1
+#define AP_LUA_FILTER_OUTPUT 2
+
+typedef void (*ap_lua_state_open_callback) (lua_State *L, apr_pool_t *p,
+ void *ctx);
+/**
+ * Specification for a lua virtual machine
+ */
+typedef struct
+{
+ /* NEED TO ADD ADDITIONAL PACKAGE PATHS AS PART OF SPEC INSTEAD OF DIR CONFIG */
+ apr_array_header_t *package_paths;
+ apr_array_header_t *package_cpaths;
+
+ /* name of base file to load in the vm */
+ const char *file;
+
+ /* APL_SCOPE_ONCE | APL_SCOPE_REQUEST | APL_SCOPE_CONN | APL_SCOPE_THREAD | APL_SCOPE_SERVER */
+ int scope;
+ unsigned int vm_min;
+ unsigned int vm_max;
+
+ ap_lua_state_open_callback cb;
+ void* cb_arg;
+
+ /* pool to use for lifecycle if APL_SCOPE_ONCE is set, otherwise unused */
+ apr_pool_t *pool;
+
+ /* Pre-compiled Lua Byte code to load directly. If bytecode_len is >0,
+ * the file part of this structure is ignored for loading purposes, but
+ * it is used for error messages.
+ */
+ const char *bytecode;
+ apr_size_t bytecode_len;
+
+ int codecache;
+} ap_lua_vm_spec;
+
+typedef struct
+{
+ const char *function_name;
+ const char *file_name;
+ int scope;
+ ap_regex_t *uri_pattern;
+ const char *bytecode;
+ apr_size_t bytecode_len;
+ int codecache;
+} ap_lua_mapped_handler_spec;
+
+typedef struct
+{
+ const char *function_name;
+ const char *file_name;
+ const char* filter_name;
+ int direction; /* AP_LUA_FILTER_INPUT | AP_LUA_FILTER_OUTPUT */
+} ap_lua_filter_handler_spec;
+
+typedef struct {
+ apr_size_t runs;
+ apr_time_t modified;
+ apr_off_t size;
+} ap_lua_finfo;
+
+typedef struct {
+ lua_State* L;
+ ap_lua_finfo* finfo;
+} ap_lua_server_spec;
+
+/**
+ * Fake out addition of the "apache2" module
+ */
+void ap_lua_load_apache2_lmodule(lua_State *L);
+
+/*
+ * alternate means of getting lua_State (preferred eventually)
+ * Obtain a lua_State which has loaded file and is associated with lifecycle_pool
+ * If one exists, will return extant one, otherwise will create, attach, and return
+ * This does no locking around the lua_State, so if the pool is shared between
+ * threads, locking is up the client.
+ *
+ * @lifecycle_pool -> pool whose lifeycle controls the lua_State
+ * @file file to be opened, also used as a key for uniquing lua_States
+ * @cb callback for vm initialization called *before* the file is opened
+ * @ctx a baton passed to cb
+ */
+lua_State *ap_lua_get_lua_state(apr_pool_t *lifecycle_pool,
+ ap_lua_vm_spec *spec, request_rec* r);
+
+#if APR_HAS_THREADS || defined(DOXYGEN)
+/*
+ * Initialize mod_lua mutex.
+ * @pool pool for mutex
+ * @s server_rec for logging
+ */
+void ap_lua_init_mutex(apr_pool_t *pool, server_rec *s);
+#endif
+
+#endif