aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2020-05-01 21:44:28 +0200
committerGitHub <noreply@github.com>2020-05-01 21:44:28 +0200
commitac368af4fe27f61f5a4209cdfe90956ff745993c (patch)
treee50b778224099e38963db06d28c72ddf4677e528 /src/script
parent74d9b6010fd42573d20cdbe78f7aaa07badfbf1b (diff)
downloadminetest-ac368af4fe27f61f5a4209cdfe90956ff745993c.tar.gz
minetest-ac368af4fe27f61f5a4209cdfe90956ff745993c.tar.bz2
minetest-ac368af4fe27f61f5a4209cdfe90956ff745993c.zip
Allow connection info to be missing from minetest.get_player_information() (#9739)
fixes #9352 This reverts commit 23c907befea02005e2c0c87fca0131b60aace18a.
Diffstat (limited to 'src/script')
-rw-r--r--src/script/lua_api/l_server.cpp102
1 files changed, 52 insertions, 50 deletions
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index 7137484e8..b6754938e 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -138,53 +138,54 @@ int ModApiServer::l_get_player_ip(lua_State *L)
// get_player_information(name)
int ModApiServer::l_get_player_information(lua_State *L)
{
-
NO_MAP_LOCK_REQUIRED;
- const char * name = luaL_checkstring(L, 1);
- RemotePlayer *player = dynamic_cast<ServerEnvironment *>(getEnv(L))->getPlayer(name);
- if (player == NULL) {
+
+ Server *server = getServer(L);
+
+ const char *name = luaL_checkstring(L, 1);
+ RemotePlayer *player = server->getEnv().getPlayer(name);
+ if (!player) {
lua_pushnil(L); // no such player
return 1;
}
Address addr;
- try
- {
- addr = getServer(L)->getPeerAddress(player->getPeerId());
- } catch(const con::PeerNotFoundException &) {
+ try {
+ addr = server->getPeerAddress(player->getPeerId());
+ } catch (const con::PeerNotFoundException &) {
dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
lua_pushnil(L); // error
return 1;
}
- float min_rtt,max_rtt,avg_rtt,min_jitter,max_jitter,avg_jitter;
+ float min_rtt, max_rtt, avg_rtt, min_jitter, max_jitter, avg_jitter;
ClientState state;
u32 uptime;
u16 prot_vers;
- u8 ser_vers,major,minor,patch;
- std::string vers_string;
- std::string lang_code;
-
-#define ERET(code) \
- if (!(code)) { \
- dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \
- lua_pushnil(L); /* error */ \
- return 1; \
+ u8 ser_vers, major, minor, patch;
+ std::string vers_string, lang_code;
+
+ auto getConInfo = [&] (con::rtt_stat_type type, float *value) -> bool {
+ return server->getClientConInfo(player->getPeerId(), type, value);
+ };
+
+ bool have_con_info =
+ getConInfo(con::MIN_RTT, &min_rtt) &&
+ getConInfo(con::MAX_RTT, &max_rtt) &&
+ getConInfo(con::AVG_RTT, &avg_rtt) &&
+ getConInfo(con::MIN_JITTER, &min_jitter) &&
+ getConInfo(con::MAX_JITTER, &max_jitter) &&
+ getConInfo(con::AVG_JITTER, &avg_jitter);
+
+ bool r = server->getClientInfo(player->getPeerId(), &state, &uptime,
+ &ser_vers, &prot_vers, &major, &minor, &patch, &vers_string,
+ &lang_code);
+ if (!r) {
+ dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
+ lua_pushnil(L); // error
+ return 1;
}
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_RTT, &min_rtt))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_RTT, &max_rtt))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_RTT, &avg_rtt))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_JITTER,
- &min_jitter))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_JITTER,
- &max_jitter))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_JITTER,
- &avg_jitter))
-
- ERET(getServer(L)->getClientInfo(player->getPeerId(), &state, &uptime, &ser_vers,
- &prot_vers, &major, &minor, &patch, &vers_string, &lang_code))
-
lua_newtable(L);
int table = lua_gettop(L);
@@ -202,29 +203,31 @@ int ModApiServer::l_get_player_information(lua_State *L)
}
lua_settable(L, table);
- lua_pushstring(L,"min_rtt");
- lua_pushnumber(L, min_rtt);
- lua_settable(L, table);
+ if (have_con_info) { // may be missing
+ lua_pushstring(L, "min_rtt");
+ lua_pushnumber(L, min_rtt);
+ lua_settable(L, table);
- lua_pushstring(L,"max_rtt");
- lua_pushnumber(L, max_rtt);
- lua_settable(L, table);
+ lua_pushstring(L, "max_rtt");
+ lua_pushnumber(L, max_rtt);
+ lua_settable(L, table);
- lua_pushstring(L,"avg_rtt");
- lua_pushnumber(L, avg_rtt);
- lua_settable(L, table);
+ lua_pushstring(L, "avg_rtt");
+ lua_pushnumber(L, avg_rtt);
+ lua_settable(L, table);
- lua_pushstring(L,"min_jitter");
- lua_pushnumber(L, min_jitter);
- lua_settable(L, table);
+ lua_pushstring(L, "min_jitter");
+ lua_pushnumber(L, min_jitter);
+ lua_settable(L, table);
- lua_pushstring(L,"max_jitter");
- lua_pushnumber(L, max_jitter);
- lua_settable(L, table);
+ lua_pushstring(L, "max_jitter");
+ lua_pushnumber(L, max_jitter);
+ lua_settable(L, table);
- lua_pushstring(L,"avg_jitter");
- lua_pushnumber(L, avg_jitter);
- lua_settable(L, table);
+ lua_pushstring(L, "avg_jitter");
+ lua_pushnumber(L, avg_jitter);
+ lua_settable(L, table);
+ }
lua_pushstring(L,"connection_uptime");
lua_pushnumber(L, uptime);
@@ -268,7 +271,6 @@ int ModApiServer::l_get_player_information(lua_State *L)
lua_settable(L, table);
#endif
-#undef ERET
return 1;
}