#include #include #include #include #include #include #include #include #include #include #include "../lualib.h" typedef struct { plugin_header_t* __plugin__; int fd; } lua_thread_data_t; void* lua_handle(void* ptr) { lua_thread_data_t* data = (lua_thread_data_t*)ptr; lua_State* L = NULL; antd_client_t* cl = (antd_client_t*) malloc(sizeof(antd_client_t)); cl->sock = data->fd; time(&cl->last_io); cl->ssl = NULL; cl->state = ANTD_CLIENT_PLUGIN_EXEC; cl->z_status = 0; cl->z_level = ANTD_CNONE; cl->zstream = NULL; //char * index = __s("%s/%s",__plugin__->htdocs,"router.lua"); char* cnf = __s("%s%s%s", data->__plugin__->pdir,DIR_SEP, data->__plugin__->name); char * apis = __s("%s/%s",cnf,"api.lua"); L = luaL_newstate(); luaL_openlibs(L); //module loader //luaL_newlib(L, modules); //lua_setglobal(L, "modules"); // set up global variable // API header lua_newtable(L); lua_pushstring(L,"name"); lua_pushstring(L, data->__plugin__->name); lua_settable(L,-3); //lua_pushstring(L,"root"); //htdocs(rq, buf); //lua_pushstring(L, data->__plugin__->htdocs); //lua_settable(L,-3); lua_pushstring(L,"apiroot"); lua_pushstring(L, cnf); lua_settable(L,-3); lua_pushstring(L,"tmpdir"); lua_pushstring(L, data->__plugin__->tmpdir); lua_settable(L,-3); lua_pushstring(L,"dbpath"); lua_pushstring(L, data->__plugin__->dbpath); lua_settable(L,-3); lua_setglobal(L, "__api__"); // Request lua_newtable(L); lua_pushstring(L,"id"); lua_pushlightuserdata(L, cl); //lua_pushnumber(L,client); lua_settable(L, -3); lua_pushstring(L,"socket"); lua_pushnumber(L, cl->sock); //lua_pushnumber(L,client); lua_settable(L, -3); //lua_pushstring(L,"request"); //push_dict_to_lua(L,rq->request); //lua_settable(L, -3); lua_setglobal(L, "HTTP_REQUEST"); free(ptr); // load major apis if(is_file(apis)) if (luaL_loadfile(L, apis) || lua_pcall(L, 0, 0, 0)) { ERROR("cannot start API file: [%s] %s\n", apis, lua_tostring(L, -1)); } /*if (luaL_loadfile(L, index) || lua_pcall(L, 0, 0, 0)) { text(client); __t(client, "Cannot run router: %s", lua_tostring(L, -1)); } free(index);*/ LOG("LUA handle exit on %d", cl->sock); // clear request if(L) lua_close(L); if(cnf) free(cnf); if(apis) free(apis); (void) antd_close(cl); return 0; //lua_close(L); }