diff options
Diffstat (limited to 'ctl-lib/ctl-lua.c')
-rw-r--r-- | ctl-lib/ctl-lua.c | 116 |
1 files changed, 58 insertions, 58 deletions
diff --git a/ctl-lib/ctl-lua.c b/ctl-lib/ctl-lua.c index 1db0ed3..4d32794 100644 --- a/ctl-lib/ctl-lua.c +++ b/ctl-lib/ctl-lua.c @@ -86,7 +86,7 @@ STATIC LuaAfbSourceT *LuaSourcePush (lua_State *luaState, CtlSourceT *source) { AFB_ApiError(source->api, "LuaSourcePush fail to allocate user data context"); return NULL; } - + lua_pushlightuserdata(luaState, afbSource); afbSource->ctxMagic=CTX_MAGIC; afbSource->source= source; @@ -269,18 +269,18 @@ static json_object *LuaPopArgs (CtlSourceT *source, lua_State* luaState, int sta STATIC int LuaFormatMessage(lua_State* luaState, int verbosity, int level) { char *message; - + CtlSourceT *source= LuaSourcePop(luaState, LUA_FIST_ARG); if (!source) goto OnErrorExit; \ - + // if log level low then silently ignore message #ifdef AFB_BINDING_PREV3 - if(source->api->verbosity < verbosity) return 0; + if(source->api->verbosity < verbosity) return 0; #else - if(afb_get_verbosity() < verbosity) return 0; + if(afb_get_verbosity() < verbosity) return 0; #endif - + json_object *responseJ= LuaPopArgs(source, luaState, LUA_FIST_ARG+1); if (!responseJ) { @@ -324,7 +324,7 @@ STATIC int LuaFormatMessage(lua_State* luaState, int verbosity, int level) { message[targetIdx]='%'; targetIdx++; break; - + case 'A': targetIdx += snprintf (&message[targetIdx], LUA_MSG_MAX_LENGTH-targetIdx,"level: %s", source->uid); break; @@ -349,7 +349,7 @@ STATIC int LuaFormatMessage(lua_State* luaState, int verbosity, int level) { message[targetIdx]='\0'; PrintMessage: - // TBD: __file__ and __line__ should match LUA source code + // TBD: __file__ and __line__ should match LUA source code AFB_ApiVerbose(source->api, level,__FILE__,__LINE__,source->uid, message); return 0; // nothing return to lua @@ -426,7 +426,7 @@ STATIC void LuaAfbServiceCB(void *handle, int iserror, struct json_object *respo if (iserror) handleCb->source->status = CTL_STATUS_ERR; else handleCb->source->status = CTL_STATUS_DONE; LuaSourcePush(luaState, handleCb->source); - + // push response count+= LuaPushArgument(handleCb->source, responseJ); if (handleCb->context) count+= LuaPushArgument(handleCb->source, handleCb->context); @@ -449,7 +449,7 @@ STATIC int LuaAfbService(lua_State* luaState) { lua_pushliteral (luaState, "LuaAfbService-Fail Invalid request handle"); goto OnErrorExit; } - + // note: argument start at 2 because of AFB: table if (count <6 || !lua_isstring(luaState, 3) || !lua_isstring(luaState, 4) || !lua_isstring(luaState, 6)) { lua_pushliteral (luaState, "ERROR: syntax AFB:service(source, api, verb, {[Lua Table]})"); @@ -465,7 +465,7 @@ STATIC int LuaAfbService(lua_State* luaState) { LuaCbHandleT *handleCb = calloc (1, sizeof(LuaCbHandleT)); handleCb->callback= lua_tostring(luaState, 6); handleCb->context = LuaPopArgs(source, luaState, 7); - + // source need to be duplicate because request return free it handleCb->source = malloc(sizeof(CtlSourceT)); handleCb->source = memcpy (handleCb->source, source, sizeof(CtlSourceT)); @@ -488,14 +488,14 @@ STATIC int LuaAfbServiceSync(lua_State* luaState) { lua_pushliteral (luaState, "LuaAfbServiceSync-Fail Invalid request handle"); goto OnErrorExit; } - + // note: argument start at 2 because of AFB: table if (count != 5 || !lua_isstring(luaState, LUA_FIST_ARG+1) || !lua_isstring(luaState, LUA_FIST_ARG+2) || !lua_istable(luaState, LUA_FIST_ARG+3)) { lua_pushliteral (luaState, "ERROR: syntax AFB:servsync(api, verb, {[Lua Table]})"); goto OnErrorExit; } - + // get source/api/verb+query const char *api = lua_tostring(luaState,LUA_FIST_ARG+1); const char *verb= lua_tostring(luaState,LUA_FIST_ARG+2); @@ -522,15 +522,15 @@ STATIC int LuaAfbEventPush(lua_State* luaState) { lua_pushliteral (luaState, "LuaAfbEventSubscribe-Fail Invalid request handle"); goto OnErrorExit; } - + // if no private event handle then use default binding event if (!lua_islightuserdata(luaState, LUA_FIST_ARG+1)) { lua_pushliteral (luaState, "LuaAfbMakePush-Fail missing event handle"); goto OnErrorExit; } - + afbevt = (LuaAfbEvent*) lua_touserdata(luaState, LUA_FIST_ARG+1); - + if (!AFB_EventIsValid(afbevt->event)) { lua_pushliteral (luaState, "LuaAfbMakePush-Fail invalid event"); goto OnErrorExit; @@ -570,7 +570,7 @@ STATIC int LuaAfbEventSubscribe(lua_State* luaState) { lua_pushliteral (luaState, "LuaAfbMakePush-Fail missing event handle"); goto OnErrorExit; } - + afbevt = (LuaAfbEvent*) lua_touserdata(luaState, LUA_FIST_ARG+1); if (!AFB_EventIsValid(afbevt->event)) { @@ -634,7 +634,7 @@ STATIC int LuaAfbGetUid (lua_State* luaState) { lua_pushliteral (luaState, "LuaAfbEventSubscribe-Fail Invalid request handle"); goto OnErrorExit; } - + // extract and return afbSource from timer handle lua_pushstring(luaState, source->uid); @@ -651,7 +651,7 @@ STATIC int LuaAfbGetStatus (lua_State* luaState) { lua_pushliteral (luaState, "LuaAfbEventSubscribe-Fail Invalid request handle"); goto OnErrorExit; } - + // extract and return afbSource from timer handle lua_pushinteger(luaState, source->status); @@ -665,7 +665,7 @@ OnErrorExit: PUBLIC int Lua2cWrapper(void* luaHandle, char *funcname, Lua2cFunctionT callback) { lua_State* luaState = (lua_State*)luaHandle; json_object *responseJ=NULL; - + CtlSourceT *source= LuaSourcePop(luaState, LUA_FIST_ARG); json_object *argsJ= LuaPopArgs(source, luaState, LUA_FIST_ARG+1); @@ -675,7 +675,7 @@ PUBLIC int Lua2cWrapper(void* luaHandle, char *funcname, Lua2cFunctionT callback int count=1; lua_pushinteger (luaState, err); if (!responseJ) count += LuaPushArgument (source, responseJ); - + return count; } @@ -735,7 +735,7 @@ STATIC void LuaDoAction (LuaDoActionT action, AFB_ReqT request) { source->request = request; json_object* queryJ = AFB_ReqJson(request); - + switch (action) { @@ -897,10 +897,10 @@ PUBLIC void ctlapi_debuglua (AFB_ReqT request) { STATIC TimerHandleT *LuaTimerPop (lua_State *luaState, int index) { TimerHandleT *timerHandle; - + luaL_checktype(luaState, index, LUA_TLIGHTUSERDATA); timerHandle = (TimerHandleT *) lua_touserdata(luaState, index); - + if (timerHandle == NULL && timerHandle->magic != TIMER_MAGIC) { luaL_error(luaState, "Invalid source handle"); fprintf(stderr, "LuaSourcePop error retrieving afbSource"); @@ -930,7 +930,7 @@ STATIC int LuaTimerGet (lua_State* luaState) { TimerHandleT *timerHandle = LuaTimerPop(luaState, LUA_FIST_ARG); if (!timerHandle) goto OnErrorExit; LuaCbHandleT *luaCbHandle = (LuaCbHandleT*) timerHandle->context; - + // create response as a JSON object json_object *responseJ= json_object_new_object(); json_object_object_add(responseJ,"uid", json_object_new_string(timerHandle->uid)); @@ -987,17 +987,17 @@ STATIC int LuaTimerSetCB (void *handle) { // Free Timer context handle STATIC int LuaTimerCtxFree(void *handle) { LuaCbHandleT *LuaCbHandle = (LuaCbHandleT*) handle; - + free (LuaCbHandle->source); free (LuaCbHandle); - + return 0; } STATIC int LuaTimerSet(lua_State* luaState) { const char *uid=NULL, *info=NULL; int delay=0, count=0; - + // Get source handle CtlSourceT *source= LuaSourcePop(luaState, LUA_FIST_ARG); if (!source) goto OnErrorExit; @@ -1023,7 +1023,7 @@ STATIC int LuaTimerSet(lua_State* luaState) { handleCb->context = contextJ; handleCb->source = malloc(sizeof(CtlSourceT)); memcpy (handleCb->source, source, sizeof(CtlSourceT)); // Fulup need to be free when timer is done - + // everything look fine create timer structure TimerHandleT *timerHandle = malloc (sizeof (TimerHandleT)); timerHandle->magic= TIMER_MAGIC; @@ -1034,13 +1034,13 @@ STATIC int LuaTimerSet(lua_State* luaState) { // fire timer TimerEvtStart (source->api, timerHandle, LuaTimerSetCB, handleCb); - + // Fulup finir les timers avec handle // return empty error code plus timer handle lua_pushnil(luaState); lua_pushlightuserdata(luaState, timerHandle); - return 2; + return 2; OnErrorExit: lua_error(luaState); @@ -1055,10 +1055,10 @@ typedef struct { STATIC void *LuaClientCtxNew (void * handle) { - + LuaClientCtxT *clientCtx = (LuaClientCtxT*) handle; int count=1; - + // push callback and client context on Lua stack lua_getglobal(luaState, clientCtx->callback); @@ -1080,7 +1080,7 @@ STATIC void *LuaClientCtxNew (void * handle) { // If function return an error status then free client context if (lua_tointeger(luaState, -1)) { - free (clientCtx); + free (clientCtx); goto OnErrorExit; } @@ -1088,19 +1088,19 @@ STATIC void *LuaClientCtxNew (void * handle) { OnErrorExit: return NULL; - + } STATIC void LuaClientCtxFree (void * handle) { - + LuaClientCtxT *clientCtx = (LuaClientCtxT*) handle; int count=1; - + if (!handle) return; - + // let's Lua script know about new/free lua_getglobal(luaState, clientCtx->callback); - + // set source status to notify lua script about free clientCtx->source->status = CTL_STATUS_FREE; @@ -1119,7 +1119,7 @@ STATIC void LuaClientCtxFree (void * handle) { // If function return an error status then free client context if (lua_toboolean(luaState, -1)) { - free (clientCtx); + free (clientCtx); goto OnErrorExit; } @@ -1127,27 +1127,27 @@ STATIC void LuaClientCtxFree (void * handle) { OnErrorExit: return; - + } // set a context that will be free when WS is closed STATIC int LuaClientCtx(lua_State* luaState) { - + // Get source handle CtlSourceT *source= LuaSourcePop(luaState, LUA_FIST_ARG); if (!source) goto OnErrorExit; - + if (!AFB_ReqIsValid (source->request)) { lua_pushliteral(luaState, "LuaSessionSet-Syntax should be called within client request context"); - goto OnErrorExit; + goto OnErrorExit; } - + // in only one arg then we should free the clientCtx if (lua_gettop(luaState) == LUA_FIST_ARG) { AFB_ClientCtxClear(source->request); goto OnSuccessExit; - } - + } + const char *callback = lua_tostring(luaState, LUA_FIST_ARG + 1); json_object *clientCtxJ = LuaPopOneArg(source, luaState, LUA_FIST_ARG + 2); @@ -1167,13 +1167,13 @@ STATIC int LuaClientCtx(lua_State* luaState) { void *done = AFB_ClientCtxSet (source->request, 1, LuaClientCtxNew, LuaClientCtxFree, clientCtx); if (!done) { lua_pushliteral(luaState, "LuaClientCtx-Fail to allocate client context)"); - goto OnErrorExit; + goto OnErrorExit; } OnSuccessExit: lua_pushnil(luaState); - return 1; - + return 1; + OnErrorExit: lua_error(luaState); return 1; // return error code @@ -1219,7 +1219,7 @@ PUBLIC int LuaConfigLoad (AFB_ApiT apiHandle) { // Lua loads only once if (luaLoaded) return 0; luaLoaded=1; - + // open a new LUA interpretor luaState = luaL_newstate(); if (!luaState) { @@ -1233,7 +1233,7 @@ PUBLIC int LuaConfigLoad (AFB_ApiT apiHandle) { // redirect print to AFB_NOTICE luaL_newlib(luaState, afbFunction); lua_setglobal(luaState, "AFB"); - + // initialise static magic for context #ifndef CTX_MAGIC CTX_MAGIC=CtlConfigMagicNew(); @@ -1242,16 +1242,16 @@ PUBLIC int LuaConfigLoad (AFB_ApiT apiHandle) { #ifndef TIMER_MAGIC TIMER_MAGIC=CtlConfigMagicNew(); #endif - + return 0; - + OnErrorExit: return 1; } // Create Binding Event at Init Exec Time PUBLIC int LuaConfigExec (AFB_ApiT apiHandle, const char* prefix) { - + int err, index; // search for default policy config files @@ -1264,11 +1264,11 @@ PUBLIC int LuaConfigExec (AFB_ApiT apiHandle, const char* prefix) { const char *dirList= getenv("CONTROL_LUA_PATH"); if (!dirList) dirList=CONTROL_LUA_PATH; - // special case for no lua even when avaliable + // special case for no lua even when avaliable if (!strcasecmp ("/dev/null", dirList)) { return 0; } - + json_object *luaScriptPathJ = ScanForConfig(dirList , CTL_SCAN_RECURSIVE, fullprefix, "lua"); // load+exec any file found in LUA search path @@ -1298,7 +1298,7 @@ PUBLIC int LuaConfigExec (AFB_ApiT apiHandle, const char* prefix) { AFB_ApiError(apiHandle, "LUA-LOAD HOOPs Error in LUA exec scripts=%s err=%s", filepath, lua_tostring(luaState,-1)); goto OnErrorExit; } else { - AFB_ApiNotice(apiHandle, "LUA-LOAD '%s'", filepath); + AFB_ApiNotice(apiHandle, "LUA-LOAD '%s'", filepath); } } |