static void mod_destroy(void) { lua_sr_destroy(); }
int lua_sr_init_child(void) { sr_lua_load_t *li; int ret; char *txt; memset(&_sr_L_env, 0, sizeof(sr_lua_env_t)); _sr_L_env.L = lua_open(); if(_sr_L_env.L==NULL) { LM_ERR("cannot open lua\n"); return -1; } luaL_openlibs(_sr_L_env.L); lua_sr_openlibs(_sr_L_env.L); /* set SR lib version */ lua_pushstring(_sr_L_env.L, "SRVERSION"); lua_pushstring(_sr_L_env.L, SRVERSION); lua_settable(_sr_L_env.L, LUA_GLOBALSINDEX); if(_sr_lua_load_list != NULL) { _sr_L_env.LL = luaL_newstate(); if(_sr_L_env.LL==NULL) { LM_ERR("cannot open lua loading state\n"); return -1; } luaL_openlibs(_sr_L_env.LL); lua_sr_openlibs(_sr_L_env.LL); /* set SR lib version */ lua_pushstring(_sr_L_env.LL, "SRVERSION"); lua_pushstring(_sr_L_env.LL, SRVERSION); lua_settable(_sr_L_env.LL, LUA_GLOBALSINDEX); /* force loading lua lib now */ if(luaL_dostring(_sr_L_env.LL, "sr.probe()")!=0) { txt = (char*)lua_tostring(_sr_L_env.LL, -1); LM_ERR("error initializing Lua: %s\n", (txt)?txt:"unknown"); lua_pop(_sr_L_env.LL, 1); lua_sr_destroy(); return -1; } li = _sr_lua_load_list; while(li) { ret = luaL_dofile(_sr_L_env.LL, (const char*)li->script); if(ret!=0) { LM_ERR("failed to load Lua script: %s (err: %d)\n", li->script, ret); txt = (char*)lua_tostring(_sr_L_env.LL, -1); LM_ERR("error from Lua: %s\n", (txt)?txt:"unknown"); lua_pop(_sr_L_env.LL, 1); lua_sr_destroy(); return -1; } li = li->next; } } LM_DBG("Lua initialized!\n"); return 0; }