sv_tcpport to callback, reallocate command buffer properly (I'm sure this caused a few untracable bugs in the past)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2247 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
6f64002cc3
commit
575df34f7e
3 changed files with 88 additions and 67 deletions
|
@ -189,7 +189,7 @@ void Cbuf_AddText (const char *text, int level)
|
|||
|
||||
if (!cmd_text[level].buf.maxsize)
|
||||
{
|
||||
cmd_text[level].buf.data = (qbyte*)Z_Malloc(8192);
|
||||
cmd_text[level].buf.data = (qbyte*)BZ_Malloc(8192);
|
||||
cmd_text[level].buf.maxsize = 8192;
|
||||
}
|
||||
if (cmd_text[level].buf.cursize + l >= cmd_text[level].buf.maxsize)
|
||||
|
@ -205,7 +205,7 @@ void Cbuf_AddText (const char *text, int level)
|
|||
}
|
||||
while (newmax < cmd_text[level].buf.cursize + l)
|
||||
newmax*=2;
|
||||
cmd_text[level].buf.data = (qbyte*)Z_Malloc(newmax);
|
||||
cmd_text[level].buf.data = (qbyte*)BZ_Realloc(cmd_text[level].buf.data, newmax);
|
||||
cmd_text[level].buf.maxsize = newmax;
|
||||
}
|
||||
SZ_Write (&cmd_text[level].buf, text, Q_strlen (text));
|
||||
|
|
|
@ -652,6 +652,25 @@ void NET_SendLoopPacket (netsrc_t sock, int length, void *data, netadr_t to)
|
|||
}
|
||||
//=============================================================================
|
||||
|
||||
void SV_Tcpport_Callback(struct cvar_s *var, char *oldvalue)
|
||||
{
|
||||
#ifdef TCPCONNECT
|
||||
if (svs.sockettcp == INVALID_SOCKET && sv_tcpport.value)
|
||||
{
|
||||
svs.sockettcp = TCP_OpenListenSocket(sv_tcpport.value);
|
||||
if (svs.sockettcp != INVALID_SOCKET)
|
||||
NET_GetLocalAddress (svs.sockettcp, &net_local_sv_tcpipadr);
|
||||
else
|
||||
Con_Printf("Failed to open TCP port %i\n", (int)sv_tcpport.value);
|
||||
}
|
||||
else
|
||||
{
|
||||
UDP_CloseSocket(svs.sockettcp);
|
||||
svs.sockettcp = INVALID_SOCKET;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
qboolean NET_GetPacket (netsrc_t netsrc)
|
||||
{
|
||||
int ret;
|
||||
|
@ -914,26 +933,6 @@ qboolean NET_GetPacket (netsrc_t netsrc)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
#ifdef TCPCONNECT
|
||||
if (sv_tcpport.modified)
|
||||
{
|
||||
if (svs.sockettcp == INVALID_SOCKET && sv_tcpport.value)
|
||||
{
|
||||
svs.sockettcp = TCP_OpenListenSocket(sv_tcpport.value);
|
||||
if (svs.sockettcp != INVALID_SOCKET)
|
||||
NET_GetLocalAddress (svs.sockettcp, &net_local_sv_tcpipadr);
|
||||
else
|
||||
Con_Printf("Failed to open TCP port %i\n", (int)sv_tcpport.value);
|
||||
}
|
||||
else
|
||||
{
|
||||
UDP_CloseSocket(svs.sockettcp);
|
||||
svs.sockettcp = INVALID_SOCKET;
|
||||
}
|
||||
sv_tcpport.modified = false;
|
||||
}
|
||||
#endif
|
||||
if (svs.sockettcp != INVALID_SOCKET)
|
||||
{
|
||||
int newsock;
|
||||
|
@ -1583,9 +1582,8 @@ void NET_CloseServer(void)
|
|||
#ifdef TCPCONNECT
|
||||
if (svs.sockettcp != INVALID_SOCKET)
|
||||
{
|
||||
UDP_CloseSocket(svs.sockettcp );
|
||||
UDP_CloseSocket(svs.sockettcp);
|
||||
svs.sockettcp = INVALID_SOCKET;
|
||||
sv_tcpport.modified = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1638,10 +1636,15 @@ void NET_InitServer(void)
|
|||
NET_GetLocalAddress (svs.socketipx, &net_local_sv_ipxadr);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef TCPCONNECT
|
||||
Cvar_ForceCallback(&sv_tcpport);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
NET_CloseServer();
|
||||
|
||||
|
||||
//
|
||||
// init the message buffer
|
||||
//
|
||||
|
|
|
@ -43,24 +43,28 @@ double realtime; // without any filtering or bounding
|
|||
|
||||
int host_hunklevel;
|
||||
|
||||
// callbacks
|
||||
void SV_Masterlist_Callback(struct cvar_s *var, char *oldvalue);
|
||||
void SV_Tcpport_Callback(struct cvar_s *var, char *oldvalue);
|
||||
|
||||
typedef struct {
|
||||
qboolean isdp;
|
||||
cvar_t cv;
|
||||
netadr_t adr;
|
||||
} sv_masterlist_t;
|
||||
sv_masterlist_t sv_masterlist[] = {
|
||||
{false, SCVAR("sv_master1", "")},
|
||||
{false, SCVAR("sv_master2", "")},
|
||||
{false, SCVAR("sv_master3", "")},
|
||||
{false, SCVAR("sv_master4", "")},
|
||||
{false, SCVAR("sv_master5", "")},
|
||||
{false, SCVAR("sv_master6", "")},
|
||||
{false, SCVAR("sv_master7", "")},
|
||||
{false, SCVAR("sv_master8", "")},
|
||||
{false, SCVARC("sv_master1", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master2", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master3", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master4", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master5", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master6", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master7", "", SV_Masterlist_Callback)},
|
||||
{false, SCVARC("sv_master8", "", SV_Masterlist_Callback)},
|
||||
|
||||
{true, SCVAR("sv_masterextra1", "ghdigital.com")}, //69.59.212.88
|
||||
{true, SCVAR("sv_masterextra2", "dpmaster.deathmask.net")}, //209.164.24.243
|
||||
{true, SCVAR("sv_masterextra3", "12.166.196.192")}, //blaze.mindphukd.org (doesn't resolve currently but works as an ip)
|
||||
{true, SCVARC("sv_masterextra1", "ghdigital.com", SV_Masterlist_Callback)}, //69.59.212.88
|
||||
{true, SCVARC("sv_masterextra2", "dpmaster.deathmask.net", SV_Masterlist_Callback)}, //209.164.24.243
|
||||
{true, SCVARC("sv_masterextra3", "12.166.196.192", SV_Masterlist_Callback)}, //blaze.mindphukd.org (doesn't resolve currently but works as an ip)
|
||||
{false, SCVAR(NULL, NULL)}
|
||||
};
|
||||
|
||||
|
@ -124,7 +128,7 @@ cvar_t sv_masterport = SCVAR("sv_masterport", "0");
|
|||
cvar_t sv_voicechat = SCVAR("sv_voicechat", "0"); //still development.
|
||||
cvar_t sv_gamespeed = SCVAR("sv_gamespeed", "1");
|
||||
cvar_t sv_csqcdebug = SCVAR("sv_csqcdebug", "0");
|
||||
cvar_t sv_tcpport = SCVAR("sv_tcpport", "0");
|
||||
cvar_t sv_tcpport = SCVARC("sv_tcpport", "0", SV_Tcpport_Callback);
|
||||
|
||||
cvar_t pausable = SCVAR("pausable", "1");
|
||||
|
||||
|
@ -3342,6 +3346,51 @@ void SV_InitLocal (void)
|
|||
|
||||
//============================================================================
|
||||
|
||||
void SV_Masterlist_Callback(struct cvar_s *var, char *oldvalue)
|
||||
{
|
||||
int i;
|
||||
char data[2];
|
||||
|
||||
for (i = 0; sv_masterlist[i].cv.name; i++)
|
||||
{
|
||||
if (var == &sv_masterlist[i].cv)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!sv_masterlist[i].cv.name)
|
||||
return;
|
||||
|
||||
if (*var->string)
|
||||
{
|
||||
sv_masterlist[i].adr.port = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!NET_StringToAdr(var->string, &sv_masterlist[i].adr))
|
||||
{
|
||||
sv_masterlist[i].adr.port = 0;
|
||||
Con_Printf ("Couldn't resolve master \"%s\"\n", var->string);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sv_masterlist[i].isdp)
|
||||
{
|
||||
if (sv_masterlist[i].adr.port == 0)
|
||||
sv_masterlist[i].adr.port = BigShort (27950);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sv_masterlist[i].adr.port == 0)
|
||||
sv_masterlist[i].adr.port = BigShort (27000);
|
||||
|
||||
data[0] = A2A_PING;
|
||||
data[1] = 0;
|
||||
if (sv.state)
|
||||
NET_SendPacket (NS_SERVER, 2, data, sv_masterlist[i].adr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
Master_Heartbeat
|
||||
|
@ -3357,7 +3406,6 @@ void Master_Heartbeat (void)
|
|||
int active;
|
||||
int i, j;
|
||||
qboolean madeqwstring = false;
|
||||
char data[2];
|
||||
|
||||
if (!sv_public.value)
|
||||
return;
|
||||
|
@ -3372,36 +3420,6 @@ void Master_Heartbeat (void)
|
|||
// send to group master
|
||||
for (i = 0; sv_masterlist[i].cv.name; i++)
|
||||
{
|
||||
if (sv_masterlist[i].cv.modified)
|
||||
{
|
||||
sv_masterlist[i].cv.modified = false;
|
||||
if (!NET_StringToAdr(sv_masterlist[i].cv.string, &sv_masterlist[i].adr))
|
||||
{
|
||||
sv_masterlist[i].adr.port = 0;
|
||||
Con_Printf ("Couldn't resolve master \"%s\"\n", sv_masterlist[i].cv.string);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(sv_masterlist[i].isdp)
|
||||
{
|
||||
case false:
|
||||
if (sv_masterlist[i].adr.port == 0)
|
||||
sv_masterlist[i].adr.port = BigShort (27000);
|
||||
|
||||
data[0] = A2A_PING;
|
||||
data[1] = 0;
|
||||
if (sv.state)
|
||||
NET_SendPacket (NS_SERVER, 2, data, sv_masterlist[i].adr);
|
||||
break;
|
||||
|
||||
case true:
|
||||
if (sv_masterlist[i].adr.port == 0)
|
||||
sv_masterlist[i].adr.port = BigShort (27950);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sv_masterlist[i].adr.port)
|
||||
{
|
||||
switch(sv_masterlist[i].isdp)
|
||||
|
|
Loading…
Reference in a new issue