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 5581 2024-10-21 23:22:49Z wini $
15 *
16 * COPYRIGHT: Real Time Logic LLC, 2008 - 2024
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
150typedef struct
151{
152 lua_State* L;
154 struct BaTimer* timer;
159 const U8* zipPubKey;
160 const U8* zipBinPwd;
162 BaBool pwdRequired;
164
165typedef struct
166{
167 IoIntf* i;
168 int destroy;
169} baio_t;
170
171
172#ifdef BA_LEAK_CHECK
173BA_API void* baLMallocL(lua_State* L, size_t size,const char* file, int line);
174#define baLMalloc(L,size) baLMallocL(L,size,__FILE__,__LINE__)
175#else
177BA_API void* baLMalloc(lua_State* L, size_t size);
178#endif
179
183BA_API lua_State* _balua_create(const BaLua_param* p, int version);
184
185/* Close the Barracuda Lua VM */
186BA_API void balua_close(lua_State* L);
187
200 lua_State* L, U32 noOfLoginTrackerNodes, U32 maxNumberOfLogins,
201 BaTime banTime);
202
203BA_API lua_State* balua_getmainthread(lua_State* L);
204BA_API int balua_typeerror(lua_State *L, int narg, const char *tname);
205#define balua_optboolean(L,narg,def) luaL_opt(L, balua_checkboolean, narg, def)
206BA_API int balua_checkboolean(lua_State *L, int narg);
207BA_API int baluaENV_newmetatable(lua_State *L, int mtid, int inheritmtid);
208BA_API void baluaENV_register(
209 lua_State *L, int mtid, int inheritmtid, const luaL_Reg* lib);
210BA_API void* baluaENV_newuserdata(lua_State *L, int mtid, size_t size);
211BA_API void* _baluaENV_isudtype(lua_State* L, int udIx, int mtid, int check);
212BA_API HttpCommand* baluaENV_checkcmd(lua_State* L, int ix);
213BA_API BaLua_param* balua_getparam(lua_State* L);
214BA_API BaLua_param* baluaENV_getparam(lua_State* L);
215BA_API int balua_errorhandler(lua_State* L);
216BA_API void balua_manageerr(
217 lua_State* L,const char* ewhere,const char* emsg,HttpCommand* cmd);
218BA_API void balua_resumeerr(lua_State* L,const char* ewhere);
219BA_API int balua_loadfile(
220 lua_State *L, const char *filename, struct IoIntf* io, int envix);
221
228BA_API void
229balua_getuservalue(lua_State* L, int index);
230
231
247BA_API int balua_wkRef(lua_State* L);
248
249BA_API int balua_wkRefIx(lua_State* L, int index);
250
256BA_API void balua_wkPush(lua_State* L, int reference);
257
262BA_API void balua_wkUnref(lua_State* L, int reference); /* Weak */
264
265
266
267#ifdef _DOXYGEN
276 lua_State* L, struct IoIntf* io, const char* filename);
277#else
278#define balua_loadconfig(L, io, filename) \
279 balua_loadconfigExt(L, io, filename, 0)
280#endif
281
293 lua_State* L, struct IoIntf* io, const char* filename, int nresults);
294
295
296BA_API IoIntf* baluaENV_checkIoIntf(lua_State *L, int udIx);
297
309 lua_State* L, const char* name, struct IoIntf* newio);
310BA_API struct IoIntf** balua_createiointf(lua_State* L);
311BA_API HttpDir* baluaENV_toDir(lua_State* L, int ix);
312BA_API HttpDir* baluaENV_createDir(lua_State* L,int mtId,size_t dirSize);
313BA_API const char* balua_getStringField(
314 lua_State *L, int ix, const char *k, const char *def);
315BA_API lua_Integer balua_getIntField(
316 lua_State *L, int ix, const char *k, lua_Integer defVal);
317BA_API BaBool balua_getBoolField(
318 lua_State *L, int ix, const char *k, BaBool defVal);
319BA_API int balua_getTabField(lua_State *L, int ix, const char *k);
320BA_API const char* balua_checkStringField(lua_State *L, int ix, const char *k);
321BA_API lua_Integer balua_checkIntField(lua_State *L, int ix, const char *k);
322
323
324/* Internally used by the xrc code */
325#ifndef NO_SHARKSSL
326typedef struct
327{
328 int (*pushCertificate)(lua_State *L, SoDispCon* con);
329 int (*pushCipher)(lua_State *L, SoDispCon* con);
330 void (*unlockSharkSSL)(lua_State *L,struct SharkSsl* super);
331 struct SharkSsl* (*lockSharkSSL)(
332 lua_State *L,int tabIx,SharkSsl_Role role,SharkSsl* lockedShark);
333} LSharkSSLFuncs;
334 /* Auto set if using xrc/lua/lsharkssl.c */
335extern const LSharkSSLFuncs* lSharkSSLFuncs;
336#else
337extern const void* lSharkSSLFuncs;
338#endif
339
340enum BaUserDataTypes {
341 BA_VMPTR=1,
342 BA_IOINTFTAB,
343 BA_DIRTAB,
344 BA_CMDTAB,
345 BA_JSONPARSER,
346 BA_TDIR,
347 BA_TDIR_RSRDR,
348 BA_TDIR_DAV,
349 BA_TRESINTF,
350 BA_TIOINTF,
351 BA_TDIRITER,
352 BA_THTTPCMD,
353 BA_TCOOKIE,
354 BA_TSESSION,
355 BA_TSETRESPONSE,
356 BA_TAUTHORIZERINTF,
357 BA_TLUA_AUTHORIZER,
358 BA_TUSERINTF,
359 BA_TLUA_USER,
360 BA_TJAUTHORIZER,
361 BA_TJUSER,
362 BA_TAUTHENTICATORINTF,
363 BA_TAUTHENTICATOR,
364 BA_TTIMER,
365 BA_TUPLOAD,
366 BA_TASYNCRESP,
367 BA_TDIR_REDIRECTOR,
368 BA_TDIR_TRACELOGGER,
369 BA_DBGMON_NEWIO_CB, /* ldbgmon.c */
370 BA_IOINTFPTRTAB /* balua_installZIO */
371};
372
373
386typedef struct LHttpDir
387{
388 lua_State *LM;
389 HttpDir_Service orgServiceFunc;
390 struct LHttpDir* parent;
391 int parentRef;
392 int funcRef; /* Reference to Lua service function, if any: In registry */
393 int authenticatorRef; /* authenticator if any: In ENV */
394 int authorizerRef; /* authorizer if any: In ENV */
395 int utabRef; /* Table associated with udata saved in BA_WKTABLE */
397
398
399BA_API int LHttpResRdr_loadLsp(
400 lua_State* L, IoIntf* io, const char* pathname, IoStat* st);
402BA_API void balua_ubjson(lua_State* L);
403BA_API void balua_luaio(lua_State* L);
404BA_API void luaopen_ba_redirector(lua_State *L);
405BA_API void ba_ldbgmon(
406 lua_State* L, void (*exitCb)(void*,BaBool), void* exitCbData);
407BA_API void balua_revcon(lua_State* L);
408BA_API void balua_mallinfo(lua_State* L);
409struct CspReader;
410
423 const U8* pubKey, U32 fileSize, struct CspReader* reader);
424struct ZipReader;
425
439BA_API void balua_installZIO(lua_State* L, const char* name, struct ZipReader* reader);
440
441
442#ifdef __cplusplus
443}
444#endif
445
446 /* LSP Plugin */
448
449#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.
BA_API void balua_ubjson(lua_State *L)
Install the UBJSON lua api.
BA_API void balua_installZIO(lua_State *L, const char *name, struct ZipReader *reader)
Installs a Zip I/O interface into the Lua environment.
struct LHttpDir LHttpDir
LHttpDir is the HttpDir instance used by Lua bindings and can be used by advanced Lua bindings creati...
BA_API int baCheckZipSignature(const U8 *pubKey, U32 fileSize, struct CspReader *reader)
Verifies the signature of a ZIP file using a public key.
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:151
struct BaTimer * timer
Timer bindings activated if not NULL.
Definition: balua.h:154
struct LoginTracker * tracker
The optional tracker.
Definition: balua.h:157
const U8 * zipBinPwd
Set the binary password for all ZIP files.
Definition: balua.h:160
ThreadMutex * mutex
The mutex used by the server's SoDisp.
Definition: balua.h:156
const U8 * zipPubKey
Set when zip signature check enabled.
Definition: balua.h:159
BaBool pwdRequired
Set to true to enforce password on all files.
Definition: balua.h:162
lua_State * L
The lua universe.
Definition: balua.h:152
IoIntf * vmio
The required VM (Lua) IO.
Definition: balua.h:155
HttpServer * server
Pointer to server for this vm.
Definition: balua.h:153
U16 zipBinPwdLen
Binary password length.
Definition: balua.h:161
int errHndRef
Internal: The ba.seterrh(func) ref.
Definition: balua.h:158
The timer class makes it possible to create events that are activated at regular intervals or to crea...
Definition: BaTimer.h:59
Abstract interface class for reading the "dat" file generated byHttpLink.
Definition: CspRunTm.h:119
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:387
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
Abstract interface class for reading a ZipFile.
Definition: ZipFileIterator.h:72