Skip to content

Commit

Permalink
Send long announce as POST, show OS in useragent
Browse files Browse the repository at this point in the history
Add lag reporting to masterserver (average dtime)
StyledWriter  -> FastWriter in masterserver announce
  • Loading branch information
proller committed Jan 6, 2014
1 parent 3e728e7 commit c62bab0
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 24 deletions.
2 changes: 0 additions & 2 deletions src/convert_json.cpp
Expand Up @@ -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;
Expand Down
2 changes: 0 additions & 2 deletions src/guiEngine.cpp
Expand Up @@ -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);

Expand Down
25 changes: 25 additions & 0 deletions src/httpfetch.cpp
Expand Up @@ -25,17 +25,42 @@ 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"
#include "debug.h"
#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;
Expand Down
9 changes: 1 addition & 8 deletions src/httpfetch.h
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/server.cpp
Expand Up @@ -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");
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions src/server.h
Expand Up @@ -701,6 +701,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
float m_step_dtime;
JMutex m_step_dtime_mutex;

float m_lag;

// The server mainly operates in this thread
ServerThread *m_thread;

Expand Down
19 changes: 11 additions & 8 deletions src/serverlist.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/serverlist.h
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions util/master/servers.jst
Expand Up @@ -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;}}
Expand Down Expand Up @@ -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>
{{~}}
Expand Down

0 comments on commit c62bab0

Please sign in to comment.