Refresh master server address cache every 24 hours
Resolve master server addresses every 24 hours instead of keeping result forever. Don't clear sv_master[1-5] cvar if the address fails to resolve; it might work later.
This commit is contained in:
parent
8a50e2aa09
commit
973e0a7e9c
2 changed files with 13 additions and 15 deletions
|
@ -241,8 +241,10 @@ typedef struct {
|
||||||
int nextHeartbeatTime;
|
int nextHeartbeatTime;
|
||||||
challenge_t challenges[MAX_CHALLENGES]; // to prevent invalid IPs from connecting
|
challenge_t challenges[MAX_CHALLENGES]; // to prevent invalid IPs from connecting
|
||||||
netadr_t redirectAddress; // for rcon return messages
|
netadr_t redirectAddress; // for rcon return messages
|
||||||
|
#ifndef STANDALONE
|
||||||
netadr_t authorizeAddress; // for rcon return messages
|
netadr_t authorizeAddress; // authorize server address
|
||||||
|
#endif
|
||||||
|
int masterResolveTime[MAX_MASTER_SERVERS]; // next svs.time that server should do dns lookup for master server
|
||||||
} serverStatic_t;
|
} serverStatic_t;
|
||||||
|
|
||||||
#define SERVER_MAXBANS 1024
|
#define SERVER_MAXBANS 1024
|
||||||
|
|
|
@ -236,6 +236,7 @@ but not on every player enter or exit.
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
#define HEARTBEAT_MSEC 300*1000
|
#define HEARTBEAT_MSEC 300*1000
|
||||||
|
#define MASTERDNS_MSEC 24*60*60*1000
|
||||||
void SV_MasterHeartbeat(const char *message)
|
void SV_MasterHeartbeat(const char *message)
|
||||||
{
|
{
|
||||||
static netadr_t adr[MAX_MASTER_SERVERS][2]; // [2] for v4 and v6 address for the same address string.
|
static netadr_t adr[MAX_MASTER_SERVERS][2]; // [2] for v4 and v6 address for the same address string.
|
||||||
|
@ -264,12 +265,12 @@ void SV_MasterHeartbeat(const char *message)
|
||||||
if(!sv_master[i]->string[0])
|
if(!sv_master[i]->string[0])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// see if we haven't already resolved the name
|
// see if we haven't already resolved the name or if it's been over 24 hours
|
||||||
// resolving usually causes hitches on win95, so only
|
// resolving usually causes hitches on win95, so only do it when needed
|
||||||
// do it when needed
|
if (sv_master[i]->modified || svs.time > svs.masterResolveTime[i])
|
||||||
if(sv_master[i]->modified || (adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD))
|
|
||||||
{
|
{
|
||||||
sv_master[i]->modified = qfalse;
|
sv_master[i]->modified = qfalse;
|
||||||
|
svs.masterResolveTime[i] = svs.time + MASTERDNS_MSEC;
|
||||||
|
|
||||||
if(netenabled & NET_ENABLEV4)
|
if(netenabled & NET_ENABLEV4)
|
||||||
{
|
{
|
||||||
|
@ -304,16 +305,11 @@ void SV_MasterHeartbeat(const char *message)
|
||||||
else
|
else
|
||||||
Com_Printf( "%s has no IPv6 address.\n", sv_master[i]->string);
|
Com_Printf( "%s has no IPv6 address.\n", sv_master[i]->string);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD)
|
if(adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD)
|
||||||
{
|
{
|
||||||
// if the address failed to resolve, clear it
|
continue;
|
||||||
// so we don't take repeated dns hits
|
|
||||||
Com_Printf("Couldn't resolve address: %s\n", sv_master[i]->string);
|
|
||||||
Cvar_Set(sv_master[i]->name, "");
|
|
||||||
sv_master[i]->modified = qfalse;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue