mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-29 23:22:01 +00:00
sv_tcpport -> sv_port_tcp, added sv_port/sv_port_ipx/sv_port_ipv6 defaulting to 27500, use 0 to disable and shutdown protocol, -port/-svport redirect to these cvars
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2256 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
6cbf2b2f32
commit
c32061184e
2 changed files with 161 additions and 49 deletions
|
@ -67,11 +67,22 @@ void (*pfreeaddrinfo) (struct addrinfo*);
|
||||||
|
|
||||||
void NET_GetLocalAddress (int socket, netadr_t *out);
|
void NET_GetLocalAddress (int socket, netadr_t *out);
|
||||||
int TCP_OpenListenSocket (int port);
|
int TCP_OpenListenSocket (int port);
|
||||||
|
extern cvar_t sv_port;
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
int UDP6_OpenSocket (int port, qboolean bcast);
|
||||||
|
extern cvar_t sv_port_ipv6;
|
||||||
|
#endif
|
||||||
|
#ifdef USEIPX
|
||||||
|
void IPX_CloseSocket (int socket);
|
||||||
|
extern cvar_t sv_port_ipx;
|
||||||
|
#endif
|
||||||
|
#ifdef TCPCONNECT
|
||||||
|
extern cvar_t sv_port_tcp;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern cvar_t sv_public, sv_listen;
|
extern cvar_t sv_public, sv_listen;
|
||||||
extern cvar_t sv_tcpport;
|
|
||||||
|
|
||||||
|
|
||||||
|
static qboolean allowconnects = false;
|
||||||
|
|
||||||
#define MAX_LOOPBACK 4
|
#define MAX_LOOPBACK 4
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -655,18 +666,103 @@ void NET_SendLoopPacket (netsrc_t sock, int length, void *data, netadr_t to)
|
||||||
void SV_Tcpport_Callback(struct cvar_s *var, char *oldvalue)
|
void SV_Tcpport_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
{
|
{
|
||||||
#ifdef TCPCONNECT
|
#ifdef TCPCONNECT
|
||||||
if (svs.sockettcp == INVALID_SOCKET && sv_tcpport.value)
|
if (!allowconnects)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (var->value)
|
||||||
{
|
{
|
||||||
svs.sockettcp = TCP_OpenListenSocket(sv_tcpport.value);
|
if (svs.sockettcp == INVALID_SOCKET)
|
||||||
if (svs.sockettcp != INVALID_SOCKET)
|
{
|
||||||
NET_GetLocalAddress (svs.sockettcp, &net_local_sv_tcpipadr);
|
svs.sockettcp = TCP_OpenListenSocket(var->value);
|
||||||
else
|
if (svs.sockettcp != INVALID_SOCKET)
|
||||||
Con_Printf("Failed to open TCP port %i\n", (int)sv_tcpport.value);
|
NET_GetLocalAddress (svs.sockettcp, &net_local_sv_tcpipadr);
|
||||||
|
else
|
||||||
|
Con_Printf("Failed to open TCP port %i\n", (int)var->value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UDP_CloseSocket(svs.sockettcp);
|
if (svs.sockettcp != INVALID_SOCKET)
|
||||||
svs.sockettcp = INVALID_SOCKET;
|
{
|
||||||
|
closesocket(svs.sockettcp);
|
||||||
|
svs.sockettcp = INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void SV_Port_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
if (!allowconnects)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (var->value)
|
||||||
|
{
|
||||||
|
if (svs.socketip == INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
svs.socketip = UDP_OpenSocket (var->value, false);
|
||||||
|
if (svs.socketip != INVALID_SOCKET)
|
||||||
|
NET_GetLocalAddress (svs.socketip, &net_local_sv_ipadr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (svs.socketip != INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
UDP_CloseSocket(svs.socketip);
|
||||||
|
svs.socketip = INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SV_PortIPv6_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
if (!allowconnects)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (var->value)
|
||||||
|
{
|
||||||
|
if (svs.socketip6 == INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
svs.socketip6 = UDP6_OpenSocket (var->value, false);
|
||||||
|
if (svs.socketip6 != INVALID_SOCKET)
|
||||||
|
NET_GetLocalAddress (svs.socketip6, &net_local_sv_ip6adr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (svs.socketip6 != INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
UDP_CloseSocket(svs.socketip6);
|
||||||
|
svs.socketip6 = INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void SV_PortIPX_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
#ifdef USEIPX
|
||||||
|
if (!allowconnects)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (var->value)
|
||||||
|
{
|
||||||
|
if (svs.socketipx == INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
svs.socketipx = IPX_OpenSocket (var->value, false);
|
||||||
|
if (svs.socketipx != INVALID_SOCKET)
|
||||||
|
NET_GetLocalAddress (svs.socketipx, &net_local_sv_ipxadr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (svs.socketipx != INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
IPX_CloseSocket(svs.socketipx);
|
||||||
|
svs.socketipx = INVALID_SOCKET;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1560,6 +1656,8 @@ void NET_InitClient(void)
|
||||||
|
|
||||||
void NET_CloseServer(void)
|
void NET_CloseServer(void)
|
||||||
{
|
{
|
||||||
|
allowconnects = false;
|
||||||
|
|
||||||
if (svs.socketip != INVALID_SOCKET)
|
if (svs.socketip != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
UDP_CloseSocket(svs.socketip);
|
UDP_CloseSocket(svs.socketip);
|
||||||
|
@ -1582,7 +1680,7 @@ void NET_CloseServer(void)
|
||||||
#ifdef TCPCONNECT
|
#ifdef TCPCONNECT
|
||||||
if (svs.sockettcp != INVALID_SOCKET)
|
if (svs.sockettcp != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
UDP_CloseSocket(svs.sockettcp);
|
closesocket(svs.sockettcp);
|
||||||
svs.sockettcp = INVALID_SOCKET;
|
svs.sockettcp = INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1595,51 +1693,22 @@ void NET_CloseServer(void)
|
||||||
void NET_InitServer(void)
|
void NET_InitServer(void)
|
||||||
{
|
{
|
||||||
int port;
|
int port;
|
||||||
int p;
|
|
||||||
port = PORT_SERVER;
|
port = PORT_SERVER;
|
||||||
|
|
||||||
if (sv_listen.value)
|
if (sv_listen.value)
|
||||||
{
|
{
|
||||||
p = COM_CheckParm ("-port");
|
allowconnects = true;
|
||||||
if (p && p < com_argc)
|
|
||||||
{
|
|
||||||
port = atoi(com_argv[p+1]);
|
|
||||||
}
|
|
||||||
p = COM_CheckParm ("-svport");
|
|
||||||
if (p && p < com_argc)
|
|
||||||
{
|
|
||||||
port = atoi(com_argv[p+1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
Cvar_ForceCallback(&sv_port);
|
||||||
// open the single socket to be used for all communications
|
#ifdef TCPCONNECT
|
||||||
//
|
Cvar_ForceCallback(&sv_port_tcp);
|
||||||
if (svs.socketip == INVALID_SOCKET)
|
#endif
|
||||||
{
|
|
||||||
svs.socketip = UDP_OpenSocket (port, false);
|
|
||||||
if (svs.socketip != INVALID_SOCKET)
|
|
||||||
NET_GetLocalAddress (svs.socketip, &net_local_sv_ipadr);
|
|
||||||
}
|
|
||||||
#ifdef IPPROTO_IPV6
|
#ifdef IPPROTO_IPV6
|
||||||
if (svs.socketip6 == INVALID_SOCKET)
|
Cvar_ForceCallback(&sv_port_ipv6);
|
||||||
{
|
|
||||||
svs.socketip6 = UDP6_OpenSocket (port, false);
|
|
||||||
if (svs.socketip6 != INVALID_SOCKET)
|
|
||||||
NET_GetLocalAddress (svs.socketip6, &net_local_sv_ip6adr);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef USEIPX
|
#ifdef USEIPX
|
||||||
if (svs.socketipx == INVALID_SOCKET)
|
Cvar_ForceCallback(&sv_port_ipx);
|
||||||
{
|
|
||||||
svs.socketipx = IPX_OpenSocket (port, false);
|
|
||||||
if (svs.socketipx != INVALID_SOCKET)
|
|
||||||
NET_GetLocalAddress (svs.socketipx, &net_local_sv_ipxadr);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TCPCONNECT
|
|
||||||
Cvar_ForceCallback(&sv_tcpport);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
NET_CloseServer();
|
NET_CloseServer();
|
||||||
|
|
|
@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#include "qwsvdef.h"
|
#include "qwsvdef.h"
|
||||||
|
#include "netinc.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#ifndef CLIENTONLY
|
#ifndef CLIENTONLY
|
||||||
#define Q2EDICT_NUM(i) (q2edict_t*)((char *)ge->edicts+i*ge->edict_size)
|
#define Q2EDICT_NUM(i) (q2edict_t*)((char *)ge->edicts+i*ge->edict_size)
|
||||||
|
@ -46,6 +47,9 @@ int host_hunklevel;
|
||||||
// callbacks
|
// callbacks
|
||||||
void SV_Masterlist_Callback(struct cvar_s *var, char *oldvalue);
|
void SV_Masterlist_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
void SV_Tcpport_Callback(struct cvar_s *var, char *oldvalue);
|
void SV_Tcpport_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void SV_Port_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void SV_PortIPv6_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void SV_PortIPX_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
qboolean isdp;
|
qboolean isdp;
|
||||||
|
@ -128,7 +132,16 @@ 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 = SCVARC("sv_tcpport", "0", SV_Tcpport_Callback);
|
#ifdef TCPCONNECT
|
||||||
|
cvar_t sv_port_tcp = SCVARC("sv_port_tcp", "0", SV_Tcpport_Callback);
|
||||||
|
#endif
|
||||||
|
cvar_t sv_port = SCVARC("sv_port", "27500", SV_Port_Callback);
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
cvar_t sv_port_ipv6 = SCVARC("sv_port_ipv6", "27500", SV_PortIPv6_Callback);
|
||||||
|
#endif
|
||||||
|
#ifdef USEIPX
|
||||||
|
cvar_t sv_port_ipx = SCVARC("sv_port_ipx", "27500", SV_PortIPX_Callback);
|
||||||
|
#endif
|
||||||
|
|
||||||
cvar_t pausable = SCVAR("pausable", "1");
|
cvar_t pausable = SCVAR("pausable", "1");
|
||||||
|
|
||||||
|
@ -3182,7 +3195,17 @@ void SV_InitLocal (void)
|
||||||
|
|
||||||
Cvar_Register (&sv_public, cvargroup_servercontrol);
|
Cvar_Register (&sv_public, cvargroup_servercontrol);
|
||||||
Cvar_Register (&sv_listen, cvargroup_servercontrol);
|
Cvar_Register (&sv_listen, cvargroup_servercontrol);
|
||||||
Cvar_Register (&sv_tcpport, cvargroup_servercontrol);
|
#ifdef TCPCONNECT
|
||||||
|
Cvar_Register (&sv_port_tcp, cvargroup_servercontrol);
|
||||||
|
#endif
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
Cvar_Register (&sv_port_ipv6, cvargroup_servercontrol);
|
||||||
|
#endif
|
||||||
|
#ifdef USEIPX
|
||||||
|
Cvar_Register (&sv_port_ipx, cvargroup_servercontrol);
|
||||||
|
#endif
|
||||||
|
Cvar_Register (&sv_port, cvargroup_servercontrol);
|
||||||
|
|
||||||
Cvar_Register (&sv_reportheartbeats, cvargroup_servercontrol);
|
Cvar_Register (&sv_reportheartbeats, cvargroup_servercontrol);
|
||||||
|
|
||||||
#ifndef SERVERONLY
|
#ifndef SERVERONLY
|
||||||
|
@ -3811,6 +3834,8 @@ SV_Init
|
||||||
void SV_Demo_Init(void);
|
void SV_Demo_Init(void);
|
||||||
void SV_Init (quakeparms_t *parms)
|
void SV_Init (quakeparms_t *parms)
|
||||||
{
|
{
|
||||||
|
int p;
|
||||||
|
|
||||||
#ifndef SERVERONLY
|
#ifndef SERVERONLY
|
||||||
if (isDedicated)
|
if (isDedicated)
|
||||||
#endif
|
#endif
|
||||||
|
@ -3837,6 +3862,24 @@ void SV_Init (quakeparms_t *parms)
|
||||||
COM_Init ();
|
COM_Init ();
|
||||||
Mod_Init ();
|
Mod_Init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p = COM_CheckParm ("-port");
|
||||||
|
if (!p)
|
||||||
|
p = COM_CheckParm ("-svport");
|
||||||
|
if (p && p < com_argc)
|
||||||
|
{
|
||||||
|
int port = atoi(com_argv[p+1]);
|
||||||
|
if (!port)
|
||||||
|
port = PORT_SERVER;
|
||||||
|
Cvar_SetValue(&sv_port, port);
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
Cvar_SetValue(&sv_port_ipv6, port);
|
||||||
|
#endif
|
||||||
|
#ifdef USEIPX
|
||||||
|
Cvar_SetValue(&sv_port_ipx, port);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
PR_Init ();
|
PR_Init ();
|
||||||
|
|
||||||
SV_InitNet ();
|
SV_InitNet ();
|
||||||
|
|
Loading…
Reference in a new issue