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)
|
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;
|
cmd_text[level].buf.maxsize = 8192;
|
||||||
}
|
}
|
||||||
if (cmd_text[level].buf.cursize + l >= cmd_text[level].buf.maxsize)
|
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)
|
while (newmax < cmd_text[level].buf.cursize + l)
|
||||||
newmax*=2;
|
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;
|
cmd_text[level].buf.maxsize = newmax;
|
||||||
}
|
}
|
||||||
SZ_Write (&cmd_text[level].buf, text, Q_strlen (text));
|
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)
|
qboolean NET_GetPacket (netsrc_t netsrc)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -914,26 +933,6 @@ qboolean NET_GetPacket (netsrc_t netsrc)
|
||||||
return true;
|
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)
|
if (svs.sockettcp != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
int newsock;
|
int newsock;
|
||||||
|
@ -1583,9 +1582,8 @@ void NET_CloseServer(void)
|
||||||
#ifdef TCPCONNECT
|
#ifdef TCPCONNECT
|
||||||
if (svs.sockettcp != INVALID_SOCKET)
|
if (svs.sockettcp != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
UDP_CloseSocket(svs.sockettcp );
|
UDP_CloseSocket(svs.sockettcp);
|
||||||
svs.sockettcp = INVALID_SOCKET;
|
svs.sockettcp = INVALID_SOCKET;
|
||||||
sv_tcpport.modified = true;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1638,10 +1636,15 @@ void NET_InitServer(void)
|
||||||
NET_GetLocalAddress (svs.socketipx, &net_local_sv_ipxadr);
|
NET_GetLocalAddress (svs.socketipx, &net_local_sv_ipxadr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef TCPCONNECT
|
||||||
|
Cvar_ForceCallback(&sv_tcpport);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
NET_CloseServer();
|
NET_CloseServer();
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// init the message buffer
|
// init the message buffer
|
||||||
//
|
//
|
||||||
|
|
|
@ -43,24 +43,28 @@ double realtime; // without any filtering or bounding
|
||||||
|
|
||||||
int host_hunklevel;
|
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 {
|
typedef struct {
|
||||||
qboolean isdp;
|
qboolean isdp;
|
||||||
cvar_t cv;
|
cvar_t cv;
|
||||||
netadr_t adr;
|
netadr_t adr;
|
||||||
} sv_masterlist_t;
|
} sv_masterlist_t;
|
||||||
sv_masterlist_t sv_masterlist[] = {
|
sv_masterlist_t sv_masterlist[] = {
|
||||||
{false, SCVAR("sv_master1", "")},
|
{false, SCVARC("sv_master1", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master2", "")},
|
{false, SCVARC("sv_master2", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master3", "")},
|
{false, SCVARC("sv_master3", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master4", "")},
|
{false, SCVARC("sv_master4", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master5", "")},
|
{false, SCVARC("sv_master5", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master6", "")},
|
{false, SCVARC("sv_master6", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master7", "")},
|
{false, SCVARC("sv_master7", "", SV_Masterlist_Callback)},
|
||||||
{false, SCVAR("sv_master8", "")},
|
{false, SCVARC("sv_master8", "", SV_Masterlist_Callback)},
|
||||||
|
|
||||||
{true, SCVAR("sv_masterextra1", "ghdigital.com")}, //69.59.212.88
|
{true, SCVARC("sv_masterextra1", "ghdigital.com", SV_Masterlist_Callback)}, //69.59.212.88
|
||||||
{true, SCVAR("sv_masterextra2", "dpmaster.deathmask.net")}, //209.164.24.243
|
{true, SCVARC("sv_masterextra2", "dpmaster.deathmask.net", SV_Masterlist_Callback)}, //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_masterextra3", "12.166.196.192", SV_Masterlist_Callback)}, //blaze.mindphukd.org (doesn't resolve currently but works as an ip)
|
||||||
{false, SCVAR(NULL, NULL)}
|
{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_voicechat = SCVAR("sv_voicechat", "0"); //still development.
|
||||||
cvar_t sv_gamespeed = SCVAR("sv_gamespeed", "1");
|
cvar_t sv_gamespeed = SCVAR("sv_gamespeed", "1");
|
||||||
cvar_t sv_csqcdebug = SCVAR("sv_csqcdebug", "0");
|
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");
|
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
|
Master_Heartbeat
|
||||||
|
@ -3357,7 +3406,6 @@ void Master_Heartbeat (void)
|
||||||
int active;
|
int active;
|
||||||
int i, j;
|
int i, j;
|
||||||
qboolean madeqwstring = false;
|
qboolean madeqwstring = false;
|
||||||
char data[2];
|
|
||||||
|
|
||||||
if (!sv_public.value)
|
if (!sv_public.value)
|
||||||
return;
|
return;
|
||||||
|
@ -3372,36 +3420,6 @@ void Master_Heartbeat (void)
|
||||||
// send to group master
|
// send to group master
|
||||||
for (i = 0; sv_masterlist[i].cv.name; i++)
|
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)
|
if (sv_masterlist[i].adr.port)
|
||||||
{
|
{
|
||||||
switch(sv_masterlist[i].isdp)
|
switch(sv_masterlist[i].isdp)
|
||||||
|
|
Loading…
Reference in a new issue