56#include "AuthenticatedUser.h"
58#include "DoubleList.h"
59#include "HttpCmdThreadPoolIntf.h"
85#define BALUA_VERSION BASLIB_VER_NO
87#define BALUA_VERSION 1
89#define BA_ENV_IX lua_upvalueindex(1)
92#define balua_create(p) _balua_create(p, BALUA_VERSION)
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)
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)
111#define balua_check(x,y) x
113#define balua_check(x,y) baAssert(y == x)
117#define dmpstk1(L,x) \
118 HttpTrace_printf(0,"%d: %s %p\n", __LINE__,lua_typename(L,lua_type(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)); \
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)); \
131 while(lua_next(L, ix < 0 ? ix-1: ix) != 0) \
133 HttpTrace_printf(0,"\t%s = %s\n", \
134 luaL_tolstring(L,-3,0), \
135 luaL_tolstring(L,-1,0)); \
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__)
179BA_API
void balua_close(lua_State* L);
193 lua_State* L, U32 noOfLoginTrackerNodes, U32 maxNumberOfLogins,
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);
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);
242BA_API
int balua_wkRefIx(lua_State* L,
int index);
269 lua_State* L,
struct IoIntf* io,
const char* filename);
271#define balua_loadconfig(L, io, filename) \
272 balua_loadconfigExt(L, io, filename, 0)
286 lua_State* L,
struct IoIntf* io,
const char* filename,
int nresults);
289BA_API
IoIntf* baluaENV_checkIoIntf(lua_State *L,
int udIx);
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);
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);
328extern const LSharkSSLFuncs* lSharkSSLFuncs;
330extern const void* lSharkSSLFuncs;
333enum BaUserDataTypes {
355 BA_TAUTHENTICATORINTF,
383 int authenticatorRef;
389BA_API
int LHttpResRdr_loadLsp(
390 lua_State* L,
IoIntf* io,
const char* pathname,
IoStat* st);
391BA_API
void balua_ubjson(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);
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