summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/convert_json.cpp2
-rw-r--r--src/guiEngine.cpp2
-rw-r--r--src/httpfetch.cpp25
-rw-r--r--src/httpfetch.h9
-rw-r--r--src/server.cpp4
-rw-r--r--src/server.h2
-rw-r--r--src/serverlist.cpp19
-rw-r--r--src/serverlist.h2
-rw-r--r--util/master/servers.jst4
9 files changed, 45 insertions, 24 deletions
diff --git a/src/convert_json.cpp b/src/convert_json.cpp
index dbf0a82ac..917d6fcb3 100644
--- a/src/convert_json.cpp
+++ b/src/convert_json.cpp
@@ -37,8 +37,6 @@ Json::Value fetchJsonValue(const std::string url,
HTTPFetchRequest fetchrequest;
HTTPFetchResult fetchresult;
fetchrequest.url = url;
- fetchrequest.useragent = std::string("Minetest ")+minetest_version_hash;
- fetchrequest.timeout = g_settings->getS32("curl_timeout");
fetchrequest.caller = HTTPFETCH_SYNC;
struct curl_slist* runptr = chunk;
diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp
index 0ec68e3ae..f18473ee0 100644
--- a/src/guiEngine.cpp
+++ b/src/guiEngine.cpp
@@ -518,8 +518,6 @@ bool GUIEngine::downloadFile(std::string url,std::string target) {
HTTPFetchRequest fetchrequest;
HTTPFetchResult fetchresult;
fetchrequest.url = url;
- fetchrequest.useragent = std::string("Minetest ")+minetest_version_hash;
- fetchrequest.timeout = g_settings->getS32("curl_timeout");
fetchrequest.caller = HTTPFETCH_SYNC;
httpfetch_sync(fetchrequest,fetchresult);
diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp
index 60e4591a9..9eed045fe 100644
--- a/src/httpfetch.cpp
+++ b/src/httpfetch.cpp
@@ -25,6 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <list>
#include <map>
#include <errno.h>
+#ifndef _MSC_VER
+#include <sys/utsname.h>
+#endif
#include "jthread/jevent.h"
#include "config.h"
#include "exceptions.h"
@@ -32,10 +35,32 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "util/container.h"
#include "util/thread.h"
+#include "version.h"
+#include "main.h"
+#include "settings.h"
JMutex g_httpfetch_mutex;
std::map<unsigned long, std::list<HTTPFetchResult> > g_httpfetch_results;
+ HTTPFetchRequest::HTTPFetchRequest()
+ {
+ url = "";
+ caller = HTTPFETCH_DISCARD;
+ request_id = 0;
+ timeout = g_settings->getS32("curl_timeout");
+ connect_timeout = timeout * 5;
+
+ useragent = std::string("Minetest ") + minetest_version_hash;
+#ifdef _MSC_VER
+ useragent += "Windows";
+#else
+ struct utsname osinfo;
+ uname(&osinfo);
+ useragent += std::string(" (") + osinfo.sysname + "; " + osinfo.release + "; " + osinfo.machine + ")";
+#endif
+ }
+
+
static void httpfetch_deliver_result(const HTTPFetchResult &fetchresult)
{
unsigned long caller = fetchresult.caller;
diff --git a/src/httpfetch.h b/src/httpfetch.h
index f06c50e2c..e02e92b4a 100644
--- a/src/httpfetch.h
+++ b/src/httpfetch.h
@@ -58,14 +58,7 @@ struct HTTPFetchRequest
//useragent to use
std::string useragent;
- HTTPFetchRequest()
- {
- url = "";
- caller = HTTPFETCH_DISCARD;
- request_id = 0;
- timeout = 0;
- connect_timeout = 0;
- }
+ HTTPFetchRequest();
};
struct HTTPFetchResult
diff --git a/src/server.cpp b/src/server.cpp
index 09c2ca663..0b3eb31a6 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -675,6 +675,7 @@ Server::Server(
m_savemap_timer = 0.0;
m_step_dtime = 0.0;
+ m_lag = g_settings->getFloat("dedicated_server_step");
if(path_world == "")
throw ServerError("Supplied empty world path");
@@ -1260,13 +1261,14 @@ void Server::AsyncRunStep()
}
+ m_lag += (m_lag > dtime ? -1 : 1) * dtime/100;
#if USE_CURL
// send masterserver announce
{
float &counter = m_masterserver_timer;
if(!isSingleplayer() && (!counter || counter >= 300.0) && g_settings->getBool("server_announce") == true)
{
- ServerList::sendAnnounce(!counter ? "start" : "update", m_clients_names, m_uptime.get(), m_env->getGameTime(), m_gamespec.id, m_mods);
+ ServerList::sendAnnounce(!counter ? "start" : "update", m_clients_names, m_uptime.get(), m_env->getGameTime(), m_lag, m_gamespec.id, m_mods);
counter = 0.01;
}
counter += dtime;
diff --git a/src/server.h b/src/server.h
index 28678f59c..39e715aa3 100644
--- a/src/server.h
+++ b/src/server.h
@@ -701,6 +701,8 @@ private:
float m_step_dtime;
JMutex m_step_dtime_mutex;
+ float m_lag;
+
// The server mainly operates in this thread
ServerThread *m_thread;
diff --git a/src/serverlist.cpp b/src/serverlist.cpp
index 204427f88..2c475cbc0 100644
--- a/src/serverlist.cpp
+++ b/src/serverlist.cpp
@@ -188,7 +188,7 @@ std::string serializeJson(std::vector<ServerListSpec> serverlist)
#if USE_CURL
-void sendAnnounce(std::string action, const std::vector<std::string> & clients_names, double uptime, u32 game_time, std::string gameid, std::vector<ModSpec> mods) {
+void sendAnnounce(std::string action, const std::vector<std::string> & clients_names, double uptime, u32 game_time, float lag, std::string gameid, std::vector<ModSpec> mods) {
Json::Value server;
if (action.size())
server["action"] = action;
@@ -226,16 +226,19 @@ void sendAnnounce(std::string action, const std::vector<std::string> & clients_n
server["mods"].append(m->name);
}
actionstream << "announcing to " << g_settings->get("serverlist_url") << std::endl;
+ } else {
+ if (lag)
+ server["step"] = lag;
}
- Json::StyledWriter writer;
+ Json::FastWriter writer;
HTTPFetchRequest fetchrequest;
- fetchrequest.url = g_settings->get("serverlist_url")
- + std::string("/announce?json=")
- + urlencode(writer.write(server));
- fetchrequest.useragent = std::string("Minetest ")+minetest_version_hash;
- fetchrequest.caller = HTTPFETCH_DISCARD;
- fetchrequest.timeout = g_settings->getS32("curl_timeout");
+ fetchrequest.url = g_settings->get("serverlist_url") + std::string("/announce");
+ std::string query = std::string("json=") + urlencode(writer.write(server));
+ if (query.size() < 1000)
+ fetchrequest.url += "?" + query;
+ else
+ fetchrequest.post_fields = query;
httpfetch_async(fetchrequest);
}
#endif
diff --git a/src/serverlist.h b/src/serverlist.h
index 77eb29b14..915e8482f 100644
--- a/src/serverlist.h
+++ b/src/serverlist.h
@@ -41,7 +41,7 @@ namespace ServerList
std::string serializeJson(std::vector<ServerListSpec>);
#if USE_CURL
void sendAnnounce(std::string action = "", const std::vector<std::string> & clients_names = std::vector<std::string>(),
- double uptime = 0, u32 game_time = 0,std::string gameid = "",
+ double uptime = 0, u32 game_time = 0, float lag = 0, std::string gameid = "",
std::vector<ModSpec> mods = std::vector<ModSpec>());
#endif
} //ServerList namespace
diff --git a/util/master/servers.jst b/util/master/servers.jst
index 48116133a..54eea2842 100644
--- a/util/master/servers.jst
+++ b/util/master/servers.jst
@@ -13,7 +13,7 @@
{{? !master.no_description}}<th>Description</th>{{?}}
{{? !master.no_flags}}<th>Flags</th>{{?}}
{{? !master.no_uptime}}<th>Uptime, Age</th>{{?}}
- {{? !master.no_ping}}<th>Ping</th>{{?}}
+ {{? !master.no_ping}}<th>Ping, Lag</th>{{?}}
</tr>
{{~it.list :server:index}}
{{ if (master.limit && index + 1 > master.limit) break;}}
@@ -64,7 +64,7 @@
</td>{{?}}
{{? !master.no_ping}}
<td class="ping">
- {{=Math.floor(server.ping * 1000)}}
+ {{=Math.floor(server.ping * 1000)}}{{? server.lag}}, {{= Math.floor(server.lag * 1000)}}{{?}}
</td>{{?}}
</tr>
{{~}}