Barracuda Application Server C/C++ Reference
NO
balua.h
1/*
2 * ____ _________ __ _
3 * / __ \___ ____ _/ /_ __(_)___ ___ ___ / / ____ ____ _(_)____
4 * / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ / / __ \/ __ `/ / ___/
5 * / _, _/ __/ /_/ / / / / / / / / / / / __/ /___/ /_/ / /_/ / / /__
6 * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/
7 * /____/
8 *
9 * Barracuda Embedded Web-Server
10 *
11 ****************************************************************************
12 * HEADER
13 *
14 * $Id: balua.h 5421 2023-04-11 19:13:35Z wini $
15 *
16 * COPYRIGHT: Real Time Logic LLC, 2008 - 2023
17 *
18 * This software is copyrighted by and is the sole property of Real
19 * Time Logic LLC. All rights, title, ownership, or other interests in
20 * the software remain the property of Real Time Logic LLC. This
21 * software may only be used in accordance with the terms and
22 * conditions stipulated in the corresponding license agreement under
23 * which the software has been supplied. Any unauthorized use,
24 * duplication, transmission, distribution, or disclosure of this
25 * software is expressly forbidden.
26 *
27 * This Copyright notice may not be removed or modified without prior
28 * written consent of Real Time Logic LLC.
29 *
30 * Real Time Logic LLC. reserves the right to modify this software
31 * without notice.
32 *
33 * http://www.realtimelogic.com
34 ****************************************************************************
35 *
36 *
37 */
38
39
40#ifndef _balua_h
41#define _balua_h
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47#include "lua.h"
48#include "lauxlib.h"
49#ifndef NO_SHARKSSL
50#include "SharkSSL.h"
51#endif
52#ifdef __cplusplus
53}
54#endif
55
56#include "AuthenticatedUser.h"
57#include "ThreadLib.h"
58#include "DoubleList.h"
59#include "HttpCmdThreadPoolIntf.h"
60
61
80#ifdef __cplusplus
81extern "C" {
82#endif
83
84#ifdef BASLIB_VER_NO
85#define BALUA_VERSION BASLIB_VER_NO
86#else
87#define BALUA_VERSION 1
88#endif
89#define BA_ENV_IX lua_upvalueindex(1)
90#define BA_TABLE "_BA"
92#define balua_create(p) _balua_create(p, BALUA_VERSION)
93
94#define baluaENV_getmetatable(L,mtId) lua_rawgeti(L, BA_ENV_IX, mtId)
95#define baluaENV_checkudata(L,ud,mtid) _baluaENV_isudtype(L,ud,mtid,TRUE)
96#define baluaENV_isudtype(L,ud,mtid) _baluaENV_isudtype(L,ud,mtid,FALSE)
97#define balua_pushbatab(L) lua_getfield(L,LUA_REGISTRYINDEX,BA_TABLE)
98/* Similar to luaL_newlibtable, but sets batab as upvalue */
99#define balua_newlib(L,l) \
100 (luaL_newlibtable(L,l), balua_pushbatab(L), luaL_setfuncs(L,l,1))
101#define baluaENV_getmutex(L) baluaENV_getparam(L)->mutex
103#define balua_getmutex(L) balua_getparam(L)->mutex
104#define GET_BAMUTEX ThreadMutex* m = baluaENV_getmutex(L)
106#define balua_releasemutex(m) if(m) ThreadMutex_release(m)
108#define balua_setmutex(m) if(m) ThreadMutex_set(m)
109
110#ifdef NDEBUG
111#define balua_check(x,y) x
112#else
113#define balua_check(x,y) baAssert(y == x)
114#endif
115
116
117#define dmpstk1(L,x) \
118 HttpTrace_printf(0,"%d: %s %p\n", __LINE__,lua_typename(L,lua_type(L,(x))), \
119 lua_topointer(L,x))
120#define dmpstk2(L,x) { \
121 int ix=lua_absindex(L,x); \
122 HttpTrace_printf(0,"%4d: %2d %s\n",__LINE__,ix,luaL_tolstring(L,x,0)); \
123 lua_pop(L,1); \
124 }while(0)
125#define dmptop(L) \
126 HttpTrace_printf(0,"%d: top %d\n",__LINE__,lua_gettop(L))
127#define dmpTab(L, ix) do { \
128 HttpTrace_printf(0,"%d: TAB %d %p\n", \
129 __LINE__, lua_absindex(L,ix), lua_topointer(L,ix)); \
130 lua_pushnil(L); \
131 while(lua_next(L, ix < 0 ? ix-1: ix) != 0) \
132 { \
133 HttpTrace_printf(0,"\t%s = %s\n", \
134 luaL_tolstring(L,-3,0), \
135 luaL_tolstring(L,-1,0)); \
136 lua_pop(L,3); \
137 } \
138 } while(0)
139
140
141struct BaTimer;
142struct LoginTracker;
143
146typedef struct
147{
148 lua_State* L;
150 struct BaTimer* timer;
156
157
158typedef struct
159{
160 IoIntf* i;
161 int destroy;
162} baio_t;
163
164
165#ifdef BA_LEAK_CHECK
166BA_API void* baLMallocL(lua_State* L, size_t size,const char* file, int line);
167#define baLMalloc(L,size) baLMallocL(L,size,__FILE__,__LINE__)
168#else
170BA_API void* baLMalloc(lua_State* L, size_t size);
171#endif
172
176BA_API lua_State* _balua_create(const BaLua_param* p, int version);
177
178/* Close the Barracuda Lua VM */
179BA_API void balua_close(lua_State* L);
180
193 lua_State* L, U32 noOfLoginTrackerNodes, U32 maxNumberOfLogins,
194 BaTime banTime);
195
196BA_API lua_State* balua_getmainthread(lua_State* L);
197BA_API int balua_typeerror(lua_State *L, int narg, const char *tname);
198#define balua_optboolean(L,narg,def) luaL_opt(L, balua_checkboolean, narg, def)
199BA_API int balua_checkboolean(lua_State *L, int narg);
200BA_API int baluaENV_newmetatable(lua_State *L, int mtid, int inheritmtid);
201BA_API void baluaENV_register(
202 lua_State *L, int mtid, int inheritmtid, const luaL_Reg* lib);
203BA_API void* baluaENV_newuserdata(lua_State *L, int mtid, size_t size);
204BA_API void* _baluaENV_isudtype(lua_State* L, int udIx, int mtid, int check);
205BA_API HttpCommand* baluaENV_checkcmd(lua_State* L, int ix);
206BA_API BaLua_param* balua_getparam(lua_State* L);
207BA_API BaLua_param* baluaENV_getparam(lua_State* L);
208BA_API int balua_errorhandler(lua_State* L);
209BA_API void balua_manageerr(
210 lua_State* L,const char* ewhere,const char* emsg,HttpCommand* cmd);
211BA_API void balua_resumeerr(lua_State* L,const char* ewhere);
212BA_API int balua_loadfile(
213 lua_State *L, const char *filename, struct IoIntf* io, int envix);
214
221BA_API void
222balua_getuservalue(lua_State* L, int index);
223
224
240BA_API int balua_wkRef(lua_State* L);
241
242BA_API int balua_wkRefIx(lua_State* L, int index);
243
249BA_API void balua_wkPush(lua_State* L, int reference);
250
255BA_API void balua_wkUnref(lua_State* L, int reference); /* Weak */
257
258
259
260#ifdef _DOXYGEN
269 lua_State* L, struct IoIntf* io, const char* filename);
270#else
271#define balua_loadconfig(L, io, filename) \
272 balua_loadconfigExt(L, io, filename, 0)
273#endif
274
286 lua_State* L, struct IoIntf* io, const char* filename, int nresults);
287
288
289BA_API IoIntf* baluaENV_checkIoIntf(lua_State *L, int udIx);
290
302 lua_State* L, const char* name, struct IoIntf* newio);
303BA_API struct IoIntf** balua_createiointf(lua_State* L);
304BA_API HttpDir* baluaENV_toDir(lua_State* L, int ix);
305BA_API HttpDir* baluaENV_createDir(lua_State* L,int mtId,size_t dirSize);
306BA_API const char* balua_getStringField(
307 lua_State *L, int ix, const char *k, const char *def);
308BA_API lua_Integer balua_getIntField(
309 lua_State *L, int ix, const char *k, lua_Integer defVal);
310BA_API BaBool balua_getBoolField(
311 lua_State *L, int ix, const char *k, BaBool defVal);
312BA_API int balua_getTabField(lua_State *L, int ix, const char *k);
313BA_API const char* balua_checkStringField(lua_State *L, int ix, const char *k);
314BA_API lua_Integer balua_checkIntField(lua_State *L, int ix, const char *k);
315
316
317/* Internally used by the xrc code */
318#ifndef NO_SHARKSSL
319typedef struct
320{
321 int (*pushCertificate)(lua_State *L, SoDispCon* con);
322 int (*pushCipher)(lua_State *L, SoDispCon* con);
323 void (*unlockSharkSSL)(lua_State *L,struct SharkSsl* super);
324 struct SharkSsl* (*lockSharkSSL)(
325 lua_State *L,int tabIx,SharkSsl_Role role,SharkSsl* lockedShark);
326} LSharkSSLFuncs;
327 /* Auto set if using xrc/lua/lsharkssl.c */
328extern const LSharkSSLFuncs* lSharkSSLFuncs;
329#else
330extern const void* lSharkSSLFuncs;
331#endif
332
333enum BaUserDataTypes {
334 BA_VMPTR=1,
335 BA_IOINTFTAB,
336 BA_DIRTAB,
337 BA_CMDTAB,
338 BA_JSONPARSER,
339 BA_TDIR,
340 BA_TDIR_RSRDR,
341 BA_TDIR_DAV,
342 BA_TRESINTF,
343 BA_TIOINTF,
344 BA_TDIRITER,
345 BA_THTTPCMD,
346 BA_TCOOKIE,
347 BA_TSESSION,
348 BA_TSETRESPONSE,
349 BA_TAUTHORIZERINTF,
350 BA_TLUA_AUTHORIZER,
351 BA_TUSERINTF,
352 BA_TLUA_USER,
353 BA_TJAUTHORIZER,
354 BA_TJUSER,
355 BA_TAUTHENTICATORINTF,
356 BA_TAUTHENTICATOR,
357 BA_TTIMER,
358 BA_TUPLOAD,
359 BA_TASYNCRESP,
360 BA_TDIR_REDIRECTOR,
361 BA_TDIR_TRACELOGGER,
362 BA_DBGMON_NEWIO_CB /* ldbgmon.c */
363};
364
365
376typedef struct LHttpDir
377{
378 lua_State *LM;
379 HttpDir_Service orgServiceFunc;
380 struct LHttpDir* parent;
381 int parentRef;
382 int funcRef; /* Reference to Lua service function, if any: In registry */
383 int authenticatorRef; /* authenticator if any: In ENV */
384 int authorizerRef; /* authorizer if any: In ENV */
385 int utabRef; /* Table associated with udata saved in BA_WKTABLE */
387
388
389BA_API int LHttpResRdr_loadLsp(
390 lua_State* L, IoIntf* io, const char* pathname, IoStat* st);
391BA_API void balua_ubjson(lua_State* L);
392BA_API void balua_luaio(lua_State* L);
393BA_API void luaopen_ba_redirector(lua_State *L);
394BA_API void ba_ldbgmon(
395 lua_State* L, void (*exitCb)(void*,BaBool), void* exitCbData);
396BA_API void balua_revcon(lua_State* L);
397BA_API void balua_mallinfo(lua_State* L);
398
399
400#ifdef __cplusplus
401}
402#endif
403
404 /* LSP Plugin */
406
407#endif
void balua_luaio(lua_State *L)
Install the LuaIo Lua bindings.
BA_API int balua_usertracker_create(lua_State *L, U32 noOfLoginTrackerNodes, U32 maxNumberOfLogins, BaTime banTime)
Install Lua bindings for the default login tracker.
struct LHttpDir LHttpDir
LHttpDir is the HttpDir instance used by Lua bindings and can be used by advanced Lua bindings creati...
BA_API int balua_loadconfigExt(lua_State *L, struct IoIntf *io, const char *filename, int nresults)
Load a Lua script and run the script at startup.
BA_API lua_State * _balua_create(const BaLua_param *p, int version)
Creates the Barracuda Lua VM; Note: use macro balua_create(BaLua_param).
BA_API void balua_getuservalue(lua_State *L, int index)
Pushes onto the stack the first user value associated with the full userdata at the given index.
BA_API IoIntf * balua_iointf(lua_State *L, const char *name, struct IoIntf *newio)
Register an IoIntf instance with the Lua VM.
BA_API void * baLMalloc(lua_State *L, size_t size)
Same as baMalloc, but does an emergency GC if baMalloc returns NULL.
BA_API int balua_loadconfig(lua_State *L, struct IoIntf *io, const char *filename)
Load a Lua script and run the script at startup.
int(* HttpDir_Service)(struct HttpDir *o, const char *relPath, HttpCommand *cmd)
The HttpDir service callback function.
Definition: HttpServer.h:2334
S64 BaTime
An arithmetic type representing calendar time with epoch of 1970-01-01 00:00:10 GMT – i....
Definition: GenPrimT.h:93
BA_API void balua_wkUnref(lua_State *L, int reference)
Releases the reference ref from the weak table.
BA_API int balua_wkRef(lua_State *L)
Creates and returns a reference in the weak table, for the object on the top of the stack (and pops t...
BA_API void balua_wkPush(lua_State *L, int reference)
Pushes the value associated with the key 'index' on top of the stack.
The startup and runtime parameters for a Barracuda Server Lua VM.
Definition: balua.h:147
struct BaTimer * timer
Timer bindings activated if not NULL.
Definition: balua.h:150
struct LoginTracker * tracker
The optional tracker.
Definition: balua.h:153
ThreadMutex * mutex
The mutex used by the server's SoDisp.
Definition: balua.h:152
lua_State * L
The lua universe.
Definition: balua.h:148
IoIntf * vmio
The required VM (Lua) IO.
Definition: balua.h:151
HttpServer * server
Pointer to server for this vm.
Definition: balua.h:149
int errHndRef
Internal: The ba.seterrh(func) ref.
Definition: balua.h:154
The timer class makes it possible to create events that are activated at regular intervals or to crea...
Definition: BaTimer.h:59
The HttpCommand class is a container class for the HttpRequest and HttpResponse command pair.
Definition: HttpServer.h:1818
An instance of the HttpDir class, which is a collection of zero or more resources,...
Definition: HttpServer.h:2368
The Web Server.
Definition: HttpServer.h:2864
The IoIntf class specifies an abstract file API, implementations include ZipIo, DiskIo,...
Definition: IoIntf.h:377
Resource information.
Definition: IoIntf.h:168
LHttpDir is the HttpDir instance used by Lua bindings and can be used by advanced Lua bindings creati...
Definition: balua.h:377
The LoginTracker class is an optional security enhancement that can be installed in an instance of on...
Definition: AuthenticatedUser.h:812
Contains information about the physical socket connection.
Definition: SoDispCon.h:112
A mutual exclusion class.
Definition: ThreadLib.h:186