From d0c89e469d1523eae383ff5b2dcf9d3bd758dc16 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 2 Feb 2012 21:59:46 +0000 Subject: Re-resolve the address of the master server every eight hours, to adapt to changes in DNS configuration. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 2486 --- src/net_server.c | 50 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) (limited to 'src/net_server.c') diff --git a/src/net_server.c b/src/net_server.c index d889c120..77be7a26 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -49,6 +49,10 @@ #define MASTER_REFRESH_PERIOD 20 * 60 /* 20 minutes */ +// How often to re-resolve the address of the master server? + +#define MASTER_RESOLVE_PERIOD 8 * 60 * 60 /* 8 hours */ + typedef enum { // waiting for the game to start @@ -141,6 +145,7 @@ static net_gamesettings_t sv_settings; static net_addr_t *master_server = NULL; static unsigned int master_refresh_time; +static unsigned int master_resolve_time; // receive window @@ -1561,6 +1566,42 @@ void NET_SV_Init(void) server_initialized = true; } +static void UpdateMasterServer(void) +{ + unsigned int now; + + now = I_GetTimeMS(); + + // The address of the master server can change. Periodically + // re-resolve the master server to update. + + if (now - master_resolve_time > MASTER_RESOLVE_PERIOD * 1000) + { + net_addr_t *new_addr; + printf("Re-resolve master server\n"); + + new_addr = NET_Query_ResolveMaster(server_context); + + // Has the master server changed address? + + if (new_addr != NULL && new_addr != master_server) + { + NET_FreeAddress(master_server); + master_server = new_addr; + } + + master_resolve_time = now; + } + + // Possibly refresh our registration with the master server. + + if (now - master_refresh_time > MASTER_REFRESH_PERIOD * 1000) + { + NET_Query_AddToMaster(master_server); + master_refresh_time = now; + } +} + void NET_SV_RegisterWithMaster(void) { //! @@ -1585,6 +1626,7 @@ void NET_SV_RegisterWithMaster(void) { NET_Query_AddToMaster(master_server); master_refresh_time = I_GetTimeMS(); + master_resolve_time = master_refresh_time; } } @@ -1608,13 +1650,9 @@ void NET_SV_Run(void) NET_FreePacket(packet); } - // Possibly refresh our registration with the master server. - - if (master_server != NULL - && I_GetTimeMS() - master_refresh_time > MASTER_REFRESH_PERIOD * 1000) + if (master_server != NULL) { - NET_Query_AddToMaster(master_server); - master_refresh_time = I_GetTimeMS(); + UpdateMasterServer(); } // "Run" any clients that may have things to do, independent of responses -- cgit v1.2.3 From 42567795b30ae8e33a90f0fa956204408b419757 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 25 Oct 2012 20:40:56 +0000 Subject: Switch from MD5 to SHA-1 for network digests. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 2530 --- src/net_server.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/net_server.c') diff --git a/src/net_server.c b/src/net_server.c index 77be7a26..189e824f 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -100,10 +100,10 @@ typedef struct boolean drone; - // MD5 hash sums of the client's WAD directory and dehacked data + // SHA1 hash sums of the client's WAD directory and dehacked data - md5_digest_t wad_md5sum; - md5_digest_t deh_md5sum; + sha1_digest_t wad_sha1sum; + sha1_digest_t deh_sha1sum; // Is this client is playing with the Freedoom IWAD? @@ -481,7 +481,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, unsigned int cl_recording_lowres; unsigned int cl_drone; unsigned int is_freedoom; - md5_digest_t deh_md5sum, wad_md5sum; + sha1_digest_t deh_sha1sum, wad_sha1sum; char *player_name; char *client_version; int i; @@ -535,8 +535,8 @@ static void NET_SV_ParseSYN(net_packet_t *packet, || !NET_ReadInt16(packet, &cl_gamemission) || !NET_ReadInt8(packet, &cl_recording_lowres) || !NET_ReadInt8(packet, &cl_drone) - || !NET_ReadMD5Sum(packet, wad_md5sum) - || !NET_ReadMD5Sum(packet, deh_md5sum) + || !NET_ReadSHA1Sum(packet, wad_sha1sum) + || !NET_ReadSHA1Sum(packet, deh_sha1sum) || !NET_ReadInt8(packet, &is_freedoom)) { return; @@ -628,10 +628,10 @@ static void NET_SV_ParseSYN(net_packet_t *packet, sv_gamemission = cl_gamemission; } - // Save the MD5 checksums + // Save the SHA1 checksums - memcpy(client->wad_md5sum, wad_md5sum, sizeof(md5_digest_t)); - memcpy(client->deh_md5sum, deh_md5sum, sizeof(md5_digest_t)); + memcpy(client->wad_sha1sum, wad_sha1sum, sizeof(sha1_digest_t)); + memcpy(client->deh_sha1sum, deh_sha1sum, sizeof(sha1_digest_t)); client->is_freedoom = is_freedoom; // Check the connecting client is playing the same game as all @@ -1280,14 +1280,14 @@ static void NET_SV_SendWaitingData(net_client_t *client) if (controller != NULL) { - NET_WriteMD5Sum(packet, controller->wad_md5sum); - NET_WriteMD5Sum(packet, controller->deh_md5sum); + NET_WriteSHA1Sum(packet, controller->wad_sha1sum); + NET_WriteSHA1Sum(packet, controller->deh_sha1sum); NET_WriteInt8(packet, controller->is_freedoom); } else { - NET_WriteMD5Sum(packet, client->wad_md5sum); - NET_WriteMD5Sum(packet, client->deh_md5sum); + NET_WriteSHA1Sum(packet, client->wad_sha1sum); + NET_WriteSHA1Sum(packet, client->deh_sha1sum); NET_WriteInt8(packet, client->is_freedoom); } -- cgit v1.2.3