diff options
Diffstat (limited to 'modules/lua/lua_vmprep.h')
-rw-r--r-- | modules/lua/lua_vmprep.h | 147 |
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 |