static int lua_EnumProtos(lua_State *L) { ObsoleteMethod(L, "Use \"for x in protos.AllProtos \" instead"); if (!lua_isfunction(L, 1)) { lua_pushlightuserdata(L, NULL); return 1; } lua_pushvalue(L, 1); int ref = luaL_ref(L, LUA_REGISTRYINDEX); int count; PROTOCOLDESCRIPTOR** protos; Proto_EnumProtocols(&count, &protos); for (int i = 0; i < count; i++) { lua_rawgeti(L, LUA_REGISTRYINDEX, ref); MapToTable(L, protos[i]); if (lua_pcall(L, 1, 0, 0)) CallService(MS_NETLIB_LOG, (WPARAM)hNetlib, (LPARAM)lua_tostring(L, -1)); } luaL_unref(L, LUA_REGISTRYINDEX, ref); lua_pushinteger(L, count); return 1; }
static int lua_EnumAccounts(lua_State *L) { if (!lua_isfunction(L, 1)) { lua_pushlightuserdata(L, NULL); return 1; } lua_pushvalue(L, 1); int ref = luaL_ref(L, LUA_REGISTRYINDEX); int count; PROTOACCOUNT** accounts; Proto_EnumAccounts(&count, &accounts); for (int i = 0; i < count; i++) { lua_rawgeti(L, LUA_REGISTRYINDEX, ref); MapToTable(L, accounts[i]); if (lua_pcall(L, 1, 0, 0)) CallService(MS_NETLIB_LOG, (WPARAM)hNetlib, (LPARAM)lua_tostring(L, -1)); } luaL_unref(L, LUA_REGISTRYINDEX, ref); lua_pushinteger(L, count); return 1; }
static int lua_GetProto(lua_State *L) { ptrA name(mir_utf8decodeA(luaL_checkstring(L, 1))); PROTOCOLDESCRIPTOR* pd = ::Proto_IsProtocolLoaded(name); if (pd) MapToTable(L, pd); else lua_pushnil(L); return 1; }
static int lua_GetAccount(lua_State *L) { ptrA moduleName(mir_utf8decodeA(luaL_checkstring(L, 1))); PROTOACCOUNT* pa = ::Proto_GetAccount(moduleName); if (pa) MapToTable(L, pa); else lua_pushnil(L); return 1; }
static int lua_ProtoIterator(lua_State *L) { int i = lua_tointeger(L, lua_upvalueindex(1)); int count = lua_tointeger(L, lua_upvalueindex(2)); PROTOCOLDESCRIPTOR** protos = (PROTOCOLDESCRIPTOR**)lua_touserdata(L, lua_upvalueindex(3)); if (i < count) { lua_pushinteger(L, (i + 1)); lua_replace(L, lua_upvalueindex(1)); MapToTable(L, protos[i]); } else lua_pushnil(L); return 1; }
static int lua_AccountIterator(lua_State *L) { int i = lua_tointeger(L, lua_upvalueindex(1)); int count = lua_tointeger(L, lua_upvalueindex(2)); PROTOACCOUNT** accounts = (PROTOACCOUNT**)lua_touserdata(L, lua_upvalueindex(3)); if (i < count) { lua_pushinteger(L, (i + 1)); lua_replace(L, lua_upvalueindex(1)); MapToTable(L, accounts[i]); } else lua_pushnil(L); return 1; }