Skip to content

Commit ac368af

Browse files
authoredMay 1, 2020
Allow connection info to be missing from minetest.get_player_information() (#9739)
fixes #9352 This reverts commit 23c907b.
1 parent 74d9b60 commit ac368af

File tree

3 files changed

+61
-58
lines changed

3 files changed

+61
-58
lines changed
 

Diff for: ‎doc/lua_api.txt

+6-5
Original file line numberDiff line numberDiff line change
@@ -4160,17 +4160,18 @@ Utilities
41604160
{
41614161
address = "127.0.0.1", -- IP address of client
41624162
ip_version = 4, -- IPv4 / IPv6
4163+
connection_uptime = 200, -- seconds since client connected
4164+
protocol_version = 32, -- protocol version used by client
4165+
formspec_version = 2, -- supported formspec version
4166+
lang_code = "fr" -- Language code used for translation
4167+
-- the following keys can be missing if no stats have been collected yet
41634168
min_rtt = 0.01, -- minimum round trip time
41644169
max_rtt = 0.2, -- maximum round trip time
41654170
avg_rtt = 0.02, -- average round trip time
41664171
min_jitter = 0.01, -- minimum packet time jitter
41674172
max_jitter = 0.5, -- maximum packet time jitter
41684173
avg_jitter = 0.03, -- average packet time jitter
4169-
connection_uptime = 200, -- seconds since client connected
4170-
protocol_version = 32, -- protocol version used by client
4171-
formspec_version = 2, -- supported formspec version
4172-
lang_code = "fr" -- Language code used for translation
4173-
-- following information is available on debug build only!!!
4174+
-- the following information is available in a debug build only!!!
41744175
-- DO NOT USE IN MODS
41754176
--ser_vers = 26, -- serialization version used by client
41764177
--major = 0, -- major version number

Diff for: ‎src/network/connection.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -612,16 +612,16 @@ class Peer {
612612
struct rttstats {
613613
float jitter_min = FLT_MAX;
614614
float jitter_max = 0.0f;
615-
float jitter_avg = -2.0f;
615+
float jitter_avg = -1.0f;
616616
float min_rtt = FLT_MAX;
617617
float max_rtt = 0.0f;
618-
float avg_rtt = -2.0f;
618+
float avg_rtt = -1.0f;
619619

620620
rttstats() = default;
621621
};
622622

623623
rttstats m_rtt;
624-
float m_last_rtt = -2.0f;
624+
float m_last_rtt = -1.0f;
625625

626626
// current usage count
627627
unsigned int m_usage = 0;

Diff for: ‎src/script/lua_api/l_server.cpp

+52-50
Original file line numberDiff line numberDiff line change
@@ -138,53 +138,54 @@ int ModApiServer::l_get_player_ip(lua_State *L)
138138
// get_player_information(name)
139139
int ModApiServer::l_get_player_information(lua_State *L)
140140
{
141-
142141
NO_MAP_LOCK_REQUIRED;
143-
const char * name = luaL_checkstring(L, 1);
144-
RemotePlayer *player = dynamic_cast<ServerEnvironment *>(getEnv(L))->getPlayer(name);
145-
if (player == NULL) {
142+
143+
Server *server = getServer(L);
144+
145+
const char *name = luaL_checkstring(L, 1);
146+
RemotePlayer *player = server->getEnv().getPlayer(name);
147+
if (!player) {
146148
lua_pushnil(L); // no such player
147149
return 1;
148150
}
149151

150152
Address addr;
151-
try
152-
{
153-
addr = getServer(L)->getPeerAddress(player->getPeerId());
154-
} catch(const con::PeerNotFoundException &) {
153+
try {
154+
addr = server->getPeerAddress(player->getPeerId());
155+
} catch (const con::PeerNotFoundException &) {
155156
dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
156157
lua_pushnil(L); // error
157158
return 1;
158159
}
159160

160-
float min_rtt,max_rtt,avg_rtt,min_jitter,max_jitter,avg_jitter;
161+
float min_rtt, max_rtt, avg_rtt, min_jitter, max_jitter, avg_jitter;
161162
ClientState state;
162163
u32 uptime;
163164
u16 prot_vers;
164-
u8 ser_vers,major,minor,patch;
165-
std::string vers_string;
166-
std::string lang_code;
167-
168-
#define ERET(code) \
169-
if (!(code)) { \
170-
dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \
171-
lua_pushnil(L); /* error */ \
172-
return 1; \
165+
u8 ser_vers, major, minor, patch;
166+
std::string vers_string, lang_code;
167+
168+
auto getConInfo = [&] (con::rtt_stat_type type, float *value) -> bool {
169+
return server->getClientConInfo(player->getPeerId(), type, value);
170+
};
171+
172+
bool have_con_info =
173+
getConInfo(con::MIN_RTT, &min_rtt) &&
174+
getConInfo(con::MAX_RTT, &max_rtt) &&
175+
getConInfo(con::AVG_RTT, &avg_rtt) &&
176+
getConInfo(con::MIN_JITTER, &min_jitter) &&
177+
getConInfo(con::MAX_JITTER, &max_jitter) &&
178+
getConInfo(con::AVG_JITTER, &avg_jitter);
179+
180+
bool r = server->getClientInfo(player->getPeerId(), &state, &uptime,
181+
&ser_vers, &prot_vers, &major, &minor, &patch, &vers_string,
182+
&lang_code);
183+
if (!r) {
184+
dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
185+
lua_pushnil(L); // error
186+
return 1;
173187
}
174188

175-
ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_RTT, &min_rtt))
176-
ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_RTT, &max_rtt))
177-
ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_RTT, &avg_rtt))
178-
ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_JITTER,
179-
&min_jitter))
180-
ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_JITTER,
181-
&max_jitter))
182-
ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_JITTER,
183-
&avg_jitter))
184-
185-
ERET(getServer(L)->getClientInfo(player->getPeerId(), &state, &uptime, &ser_vers,
186-
&prot_vers, &major, &minor, &patch, &vers_string, &lang_code))
187-
188189
lua_newtable(L);
189190
int table = lua_gettop(L);
190191

@@ -202,29 +203,31 @@ int ModApiServer::l_get_player_information(lua_State *L)
202203
}
203204
lua_settable(L, table);
204205

205-
lua_pushstring(L,"min_rtt");
206-
lua_pushnumber(L, min_rtt);
207-
lua_settable(L, table);
206+
if (have_con_info) { // may be missing
207+
lua_pushstring(L, "min_rtt");
208+
lua_pushnumber(L, min_rtt);
209+
lua_settable(L, table);
208210

209-
lua_pushstring(L,"max_rtt");
210-
lua_pushnumber(L, max_rtt);
211-
lua_settable(L, table);
211+
lua_pushstring(L, "max_rtt");
212+
lua_pushnumber(L, max_rtt);
213+
lua_settable(L, table);
212214

213-
lua_pushstring(L,"avg_rtt");
214-
lua_pushnumber(L, avg_rtt);
215-
lua_settable(L, table);
215+
lua_pushstring(L, "avg_rtt");
216+
lua_pushnumber(L, avg_rtt);
217+
lua_settable(L, table);
216218

217-
lua_pushstring(L,"min_jitter");
218-
lua_pushnumber(L, min_jitter);
219-
lua_settable(L, table);
219+
lua_pushstring(L, "min_jitter");
220+
lua_pushnumber(L, min_jitter);
221+
lua_settable(L, table);
220222

221-
lua_pushstring(L,"max_jitter");
222-
lua_pushnumber(L, max_jitter);
223-
lua_settable(L, table);
223+
lua_pushstring(L, "max_jitter");
224+
lua_pushnumber(L, max_jitter);
225+
lua_settable(L, table);
224226

225-
lua_pushstring(L,"avg_jitter");
226-
lua_pushnumber(L, avg_jitter);
227-
lua_settable(L, table);
227+
lua_pushstring(L, "avg_jitter");
228+
lua_pushnumber(L, avg_jitter);
229+
lua_settable(L, table);
230+
}
228231

229232
lua_pushstring(L,"connection_uptime");
230233
lua_pushnumber(L, uptime);
@@ -268,7 +271,6 @@ int ModApiServer::l_get_player_information(lua_State *L)
268271
lua_settable(L, table);
269272
#endif
270273

271-
#undef ERET
272274
return 1;
273275
}
274276

0 commit comments

Comments
 (0)
Please sign in to comment.