summaryrefslogtreecommitdiff
path: root/src/net_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net_common.c')
-rw-r--r--src/net_common.c1040
1 files changed, 541 insertions, 499 deletions
diff --git a/src/net_common.c b/src/net_common.c
index 5e1fb25..84bce5a 100644
--- a/src/net_common.c
+++ b/src/net_common.c
@@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@@ -44,10 +44,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define IOCTLSOCKET_PARAM u_long
#define SETSOCKOPT_PARAM BOOL
#ifdef _WIN32_WCE
-#define NET_GET_ERROR() ( net_error = GetLastError() )
+#define NET_GET_ERROR() (net_error = GetLastError())
#else
-#define NET_GET_ERROR() ( net_error = WSAGetLastError() )
-#define NET_WOULD_BLOCK() ( NET_GET_ERROR() == WSAEWOULDBLOCK )
+#define NET_GET_ERROR() (net_error = WSAGetLastError())
+#define NET_WOULD_BLOCK() (NET_GET_ERROR() == WSAEWOULDBLOCK)
#endif
#else // _WIN32
#include <unistd.h>
@@ -71,8 +71,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ioctlsocket ioctl
#define IOCTLSOCKET_PARAM int
#define SETSOCKOPT_PARAM int
-#define NET_GET_ERROR() ( net_error = errno )
-#define NET_WOULD_BLOCK() ( NET_GET_ERROR() == EWOULDBLOCK )
+#define NET_GET_ERROR() (net_error = errno)
+#define NET_WOULD_BLOCK() (NET_GET_ERROR() == EWOULDBLOCK)
#endif // !_WIN32
#if USE_CLIENT
@@ -153,10 +153,11 @@ static uint64_t net_packets_sent;
NET_NetadrToSockadr
===================
*/
-static void NET_NetadrToSockadr( const netadr_t *a, struct sockaddr_in *s ) {
- memset( s, 0, sizeof( *s ) );
+static void NET_NetadrToSockadr(const netadr_t *a, struct sockaddr_in *s)
+{
+ memset(s, 0, sizeof(*s));
- switch( a->type ) {
+ switch (a->type) {
case NA_BROADCAST:
s->sin_family = AF_INET;
s->sin_addr.s_addr = INADDR_BROADCAST;
@@ -168,7 +169,7 @@ static void NET_NetadrToSockadr( const netadr_t *a, struct sockaddr_in *s ) {
s->sin_port = a->port;
break;
default:
- Com_Error( ERR_FATAL, "%s: bad address type", __func__ );
+ Com_Error(ERR_FATAL, "%s: bad address type", __func__);
break;
}
}
@@ -178,8 +179,9 @@ static void NET_NetadrToSockadr( const netadr_t *a, struct sockaddr_in *s ) {
NET_SockadrToNetadr
===================
*/
-static void NET_SockadrToNetadr( const struct sockaddr_in *s, netadr_t *a ) {
- memset( a, 0, sizeof( *a ) );
+static void NET_SockadrToNetadr(const struct sockaddr_in *s, netadr_t *a)
+{
+ memset(a, 0, sizeof(*a));
a->type = NA_IP;
a->ip.u32 = s->sin_addr.s_addr;
@@ -197,41 +199,42 @@ idnewt:28000
192.246.40.70:28000
=============
*/
-static qboolean NET_StringToSockaddr( const char *s, struct sockaddr_in *sadr ) {
+static qboolean NET_StringToSockaddr(const char *s, struct sockaddr_in *sadr)
+{
struct hostent *h;
char copy[MAX_QPATH], *p;
int dots;
- memset( sadr, 0, sizeof( *sadr ) );
+ memset(sadr, 0, sizeof(*sadr));
sadr->sin_family = AF_INET;
sadr->sin_port = 0;
- Q_strlcpy( copy, s, sizeof( copy ) );
+ Q_strlcpy(copy, s, sizeof(copy));
// strip off a trailing :port if present
- p = strchr( copy, ':' );
- if( p ) {
+ p = strchr(copy, ':');
+ if (p) {
*p = 0;
- sadr->sin_port = htons( ( u_short )atoi( p + 1 ) );
+ sadr->sin_port = htons((u_short)atoi(p + 1));
}
- for( p = copy, dots = 0; *p; p++ ) {
- if( *p == '.' ) {
+ for (p = copy, dots = 0; *p; p++) {
+ if (*p == '.') {
dots++;
- } else if( !Q_isdigit( *p ) ) {
+ } else if (!Q_isdigit(*p)) {
break;
}
}
- if( *p == 0 && dots <= 3 ) {
- uint32_t addr = inet_addr( copy );
+ if (*p == 0 && dots <= 3) {
+ uint32_t addr = inet_addr(copy);
- if( addr == INADDR_NONE ) {
+ if (addr == INADDR_NONE) {
return qfalse;
}
sadr->sin_addr.s_addr = addr;
} else {
- if( !( h = gethostbyname( copy ) ) )
+ if (!(h = gethostbyname(copy)))
return qfalse;
- sadr->sin_addr.s_addr = *( uint32_t * )h->h_addr_list[0];
+ sadr->sin_addr.s_addr = *(uint32_t *)h->h_addr_list[0];
}
return qtrue;
@@ -243,22 +246,23 @@ static qboolean NET_StringToSockaddr( const char *s, struct sockaddr_in *sadr )
NET_AdrToString
===================
*/
-char *NET_AdrToString( const netadr_t *a ) {
+char *NET_AdrToString(const netadr_t *a)
+{
static char s[MAX_QPATH];
const uint8_t *ip;
- switch( a->type ) {
+ switch (a->type) {
case NA_LOOPBACK:
- strcpy( s, "loopback" );
+ strcpy(s, "loopback");
return s;
case NA_IP:
case NA_BROADCAST:
ip = a->ip.u8;
- Q_snprintf( s, sizeof( s ), "%u.%u.%u.%u:%u",
- ip[0], ip[1], ip[2], ip[3], ntohs( a->port ) );
+ Q_snprintf(s, sizeof(s), "%u.%u.%u.%u:%u",
+ ip[0], ip[1], ip[2], ip[3], ntohs(a->port));
return s;
default:
- Com_Error( ERR_FATAL, "%s: bad address type", __func__ );
+ Com_Error(ERR_FATAL, "%s: bad address type", __func__);
break;
}
@@ -276,17 +280,18 @@ idnewt:28000
192.246.40.70:28000
=============
*/
-qboolean NET_StringToAdr( const char *s, netadr_t *a, int port ) {
+qboolean NET_StringToAdr(const char *s, netadr_t *a, int port)
+{
struct sockaddr_in sadr;
-
- if( !NET_StringToSockaddr( s, &sadr ) ) {
+
+ if (!NET_StringToSockaddr(s, &sadr)) {
return qfalse;
}
-
- NET_SockadrToNetadr( &sadr, a );
- if( !a->port ) {
- a->port = BigShort( port );
+ NET_SockadrToNetadr(&sadr, a);
+
+ if (!a->port) {
+ a->port = BigShort(port);
}
return qtrue;
@@ -296,54 +301,58 @@ qboolean NET_StringToAdr( const char *s, netadr_t *a, int port ) {
#ifdef _DEBUG
-static void logfile_close( void ) {
- if( !net_logFile ) {
+static void logfile_close(void)
+{
+ if (!net_logFile) {
return;
}
- Com_Printf( "Closing network log.\n" );
+ Com_Printf("Closing network log.\n");
- FS_FCloseFile( net_logFile );
+ FS_FCloseFile(net_logFile);
net_logFile = 0;
}
-static void logfile_open( void ) {
+static void logfile_open(void)
+{
char buffer[MAX_OSPATH];
unsigned mode;
qhandle_t f;
mode = net_log_enable->integer > 1 ? FS_MODE_APPEND : FS_MODE_WRITE;
- if( net_log_flush->integer > 0 ) {
- if( net_log_flush->integer > 1 ) {
+ if (net_log_flush->integer > 0) {
+ if (net_log_flush->integer > 1) {
mode |= FS_BUF_NONE;
} else {
mode |= FS_BUF_LINE;
}
}
- f = FS_EasyOpenFile( buffer, sizeof( buffer ), mode | FS_FLAG_TEXT,
- "logs/", net_log_name->string, ".log" );
- if( !f ) {
- Cvar_Set( "net_log_enable", "0" );
+ f = FS_EasyOpenFile(buffer, sizeof(buffer), mode | FS_FLAG_TEXT,
+ "logs/", net_log_name->string, ".log");
+ if (!f) {
+ Cvar_Set("net_log_enable", "0");
return;
}
net_logFile = f;
- Com_Printf( "Logging network packets to %s\n", buffer );
+ Com_Printf("Logging network packets to %s\n", buffer);
}
-static void net_log_enable_changed( cvar_t *self ) {
+static void net_log_enable_changed(cvar_t *self)
+{
logfile_close();
- if( self->integer ) {
+ if (self->integer) {
logfile_open();
- }
+ }
}
-static void net_log_param_changed( cvar_t *self ) {
- if( net_log_enable->integer ) {
+static void net_log_param_changed(cvar_t *self)
+{
+ if (net_log_enable->integer) {
logfile_close();
logfile_open();
- }
+ }
}
/*
@@ -351,55 +360,56 @@ static void net_log_param_changed( cvar_t *self ) {
NET_LogPacket
=============
*/
-static void NET_LogPacket( const netadr_t *address, const char *prefix,
- const byte *data, size_t length )
+static void NET_LogPacket(const netadr_t *address, const char *prefix,
+ const byte *data, size_t length)
{
int numRows;
int i, j, c;
- if( !net_logFile ) {
+ if (!net_logFile) {
return;
}
- FS_FPrintf( net_logFile, "%s : %s\n", prefix, NET_AdrToString( address ) );
+ FS_FPrintf(net_logFile, "%s : %s\n", prefix, NET_AdrToString(address));
- numRows = ( length + 15 ) / 16;
- for( i = 0; i < numRows; i++ ) {
- FS_FPrintf( net_logFile, "%04x : ", i * 16 );
- for( j = 0; j < 16; j++ ) {
- if( i * 16 + j < length ) {
- FS_FPrintf( net_logFile, "%02x ", data[i * 16 + j] );
+ numRows = (length + 15) / 16;
+ for (i = 0; i < numRows; i++) {
+ FS_FPrintf(net_logFile, "%04x : ", i * 16);
+ for (j = 0; j < 16; j++) {
+ if (i * 16 + j < length) {
+ FS_FPrintf(net_logFile, "%02x ", data[i * 16 + j]);
} else {
- FS_FPrintf( net_logFile, " " );
+ FS_FPrintf(net_logFile, " ");
}
}
- FS_FPrintf( net_logFile, ": " );
- for( j = 0; j < 16; j++ ) {
- if( i * 16 + j < length ) {
+ FS_FPrintf(net_logFile, ": ");
+ for (j = 0; j < 16; j++) {
+ if (i * 16 + j < length) {
c = data[i * 16 + j];
- FS_FPrintf( net_logFile, "%c", ( c < 32 || c > 127 ) ? '.' : c );
+ FS_FPrintf(net_logFile, "%c", (c < 32 || c > 127) ? '.' : c);
} else {
- FS_FPrintf( net_logFile, " " );
+ FS_FPrintf(net_logFile, " ");
}
}
- FS_FPrintf( net_logFile, "\n" );
+ FS_FPrintf(net_logFile, "\n");
}
- FS_FPrintf( net_logFile, "\n" );
+ FS_FPrintf(net_logFile, "\n");
}
#endif
#define RATE_SECS 3
-static void NET_UpdateStats( void ) {
+static void NET_UpdateStats(void)
+{
unsigned diff;
- if( net_rate_time > com_eventTime ) {
+ if (net_rate_time > com_eventTime) {
net_rate_time = com_eventTime;
}
diff = com_eventTime - net_rate_time;
- if( diff < RATE_SECS * 1000 ) {
+ if (diff < RATE_SECS * 1000) {
return;
}
net_rate_time = com_eventTime;
@@ -418,7 +428,8 @@ static void NET_UpdateStats( void ) {
NET_GetLoopPacket
=============
*/
-qboolean NET_GetLoopPacket( netsrc_t sock ) {
+qboolean NET_GetLoopPacket(netsrc_t sock)
+{
loopback_t *loop;
loopmsg_t *loopmsg;
@@ -426,29 +437,29 @@ qboolean NET_GetLoopPacket( netsrc_t sock ) {
loop = &loopbacks[sock];
- if( loop->send - loop->get > MAX_LOOPBACK - 1 ) {
+ if (loop->send - loop->get > MAX_LOOPBACK - 1) {
loop->get = loop->send - MAX_LOOPBACK + 1;
}
- if( loop->get >= loop->send ) {
+ if (loop->get >= loop->send) {
return qfalse;
}
- loopmsg = &loop->msgs[loop->get & (MAX_LOOPBACK-1)];
+ loopmsg = &loop->msgs[loop->get & (MAX_LOOPBACK - 1)];
loop->get++;
- memcpy( msg_read_buffer, loopmsg->data, loopmsg->datalen );
+ memcpy(msg_read_buffer, loopmsg->data, loopmsg->datalen);
#ifdef _DEBUG
- if( net_log_enable->integer ) {
- NET_LogPacket( &net_from, "LP recv", loopmsg->data, loopmsg->datalen );
+ if (net_log_enable->integer) {
+ NET_LogPacket(&net_from, "LP recv", loopmsg->data, loopmsg->datalen);
}
#endif
- if( sock == NS_CLIENT ) {
+ if (sock == NS_CLIENT) {
net_rate_rcvd += loopmsg->datalen;
}
- SZ_Init( &msg_read, msg_read_buffer, sizeof( msg_read_buffer ) );
+ SZ_Init(&msg_read, msg_read_buffer, sizeof(msg_read_buffer));
msg_read.cursize = loopmsg->datalen;
return qtrue;
@@ -461,18 +472,19 @@ qboolean NET_GetLoopPacket( netsrc_t sock ) {
// prevents infinite retry loops caused by broken TCP/IP stacks
#define MAX_ERROR_RETRIES 64
-static void icmp_error_event( netsrc_t sock, int info ) {
- if( net_ignore_icmp->integer > 0 ) {
+static void icmp_error_event(netsrc_t sock, int info)
+{
+ if (net_ignore_icmp->integer > 0) {
return;
}
- Com_DPrintf( "%s: %s from %s\n", __func__,
- NET_ErrorString(), NET_AdrToString( &net_from ) );
+ Com_DPrintf("%s: %s from %s\n", __func__,
+ NET_ErrorString(), NET_AdrToString(&net_from));
net_icmp_errors++;
- switch( sock ) {
+ switch (sock) {
case NS_SERVER:
- SV_ErrorEvent( info );
+ SV_ErrorEvent(info);
break;
#if USE_CLIENT
case NS_CLIENT:
@@ -490,7 +502,8 @@ static void icmp_error_event( netsrc_t sock, int info ) {
// via IP_RECVERR cruft below... What about BSD?
//
// Returns true if failed socket operation should be retried, extremely hacky :/
-static qboolean process_error_queue( netsrc_t sock, struct sockaddr_in *to ) {
+static qboolean process_error_queue(netsrc_t sock, struct sockaddr_in *to)
+{
byte buffer[1024];
struct sockaddr_in from;
struct msghdr msg;
@@ -504,59 +517,57 @@ static qboolean process_error_queue( netsrc_t sock, struct sockaddr_in *to ) {
found = qfalse;
retry:
- memset( &from, 0, sizeof( from ) );
+ memset(&from, 0, sizeof(from));
- memset( &msg, 0, sizeof( msg ) );
+ memset(&msg, 0, sizeof(msg));
msg.msg_name = &from;
- msg.msg_namelen = sizeof( from );
+ msg.msg_namelen = sizeof(from);
msg.msg_control = buffer;
- msg.msg_controllen = sizeof( buffer );
+ msg.msg_controllen = sizeof(buffer);
- if( recvmsg( udp_sockets[sock], &msg, MSG_ERRQUEUE ) == -1 ) {
- if( NET_WOULD_BLOCK() ) {
+ if (recvmsg(udp_sockets[sock], &msg, MSG_ERRQUEUE) == -1) {
+ if (NET_WOULD_BLOCK()) {
// wouldblock is silent
goto finish;
}
- Com_EPrintf( "%s: %s\n", __func__, NET_ErrorString() );
+ Com_EPrintf("%s: %s\n", __func__, NET_ErrorString());
goto finish;
}
- if( !( msg.msg_flags & MSG_ERRQUEUE ) ) {
- Com_DPrintf( "%s: no extended error received\n", __func__ );
+ if (!(msg.msg_flags & MSG_ERRQUEUE)) {
+ Com_DPrintf("%s: no extended error received\n", __func__);
goto finish;
}
// find an ICMP error message
- for( cmsg = CMSG_FIRSTHDR( &msg );
- cmsg != NULL;
- cmsg = CMSG_NXTHDR( &msg, cmsg ) )
- {
- if( cmsg->cmsg_level != IPPROTO_IP ) {
+ for (cmsg = CMSG_FIRSTHDR(&msg);
+ cmsg != NULL;
+ cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+ if (cmsg->cmsg_level != IPPROTO_IP) {
continue;
}
- if( cmsg->cmsg_type != IP_RECVERR ) {
+ if (cmsg->cmsg_type != IP_RECVERR) {
continue;
}
- ee = ( struct sock_extended_err * )CMSG_DATA( cmsg );
- if( ee->ee_origin == SO_EE_ORIGIN_ICMP ) {
+ ee = (struct sock_extended_err *)CMSG_DATA(cmsg);
+ if (ee->ee_origin == SO_EE_ORIGIN_ICMP) {
break;
}
}
- if( !cmsg ) {
- Com_DPrintf( "%s: no ICMP error found\n", __func__ );
+ if (!cmsg) {
+ Com_DPrintf("%s: no ICMP error found\n", __func__);
goto finish;
}
- NET_SockadrToNetadr( &from, &net_from );
+ NET_SockadrToNetadr(&from, &net_from);
// check if this error was caused by a packet sent to the given address
// if so, do not retry send operation to prevent infinite loop
- if( to != NULL && from.sin_addr.s_addr == to->sin_addr.s_addr &&
- ( !from.sin_port || from.sin_port == to->sin_port ) )
- {
- Com_DPrintf( "%s: found offending address %s:%d\n",
- __func__, inet_ntoa( from.sin_addr ), BigShort( from.sin_port ) );
+ if (to != NULL && from.sin_addr.s_addr == to->sin_addr.s_addr &&
+ (!from.sin_port || from.sin_port == to->sin_port)) {
+ Com_DPrintf("%s: found offending address %s:%d\n",
+ __func__, inet_ntoa(from.sin_addr), BigShort(from.sin_port));
found = qtrue;
}
@@ -565,13 +576,13 @@ retry:
info = 0;
#if USE_PMTUDISC
// for EMSGSIZE ee_info should hold discovered MTU
- if( net_error == EMSGSIZE && ee->ee_info >= 576 && ee->ee_info < 4096 ) {
+ if (net_error == EMSGSIZE && ee->ee_info >= 576 && ee->ee_info < 4096) {
info = ee->ee_info;
}
#endif
- icmp_error_event( sock, info );
+ icmp_error_event(sock, info);
- if( ++tries < MAX_ERROR_RETRIES ) {
+ if (++tries < MAX_ERROR_RETRIES) {
goto retry;
}
@@ -591,7 +602,8 @@ Fills msg_read_buffer with packet contents,
net_from variable receives source address.
=============
*/
-qboolean NET_GetPacket( netsrc_t sock ) {
+qboolean NET_GetPacket(netsrc_t sock)
+{
struct sockaddr_in from;
socklen_t fromlen;
int ret;
@@ -603,14 +615,14 @@ qboolean NET_GetPacket( netsrc_t sock ) {
#endif
ioentry_t *e;
- if( udp_sockets[sock] == INVALID_SOCKET ) {
+ if (udp_sockets[sock] == INVALID_SOCKET) {
return qfalse;
}
NET_UpdateStats();
- e = IO_Get( udp_sockets[sock] );
- if( !e->canread ) {
+ e = IO_Get(udp_sockets[sock]);
+ if (!e->canread) {
return qfalse;
}
@@ -619,23 +631,23 @@ qboolean NET_GetPacket( netsrc_t sock ) {
retry:
#endif
- memset( &from, 0, sizeof( from ) );
+ memset(&from, 0, sizeof(from));
- fromlen = sizeof( from );
- ret = recvfrom( udp_sockets[sock], ( void * )msg_read_buffer,
- MAX_PACKETLEN, 0, ( struct sockaddr * )&from, &fromlen );
+ fromlen = sizeof(from);
+ ret = recvfrom(udp_sockets[sock], (void *)msg_read_buffer,
+ MAX_PACKETLEN, 0, (struct sockaddr *)&from, &fromlen);
- if( !ret ) {
+ if (!ret) {
return qfalse;
}
- NET_SockadrToNetadr( &from, &net_from );
+ NET_SockadrToNetadr(&from, &net_from);
- if( ret == -1 ) {
+ if (ret == -1) {
NET_GET_ERROR();
#ifdef _WIN32
- switch( net_error ) {
+ switch (net_error) {
case WSAEWOULDBLOCK:
// wouldblock is silent
e->canread = qfalse;
@@ -645,20 +657,20 @@ retry:
case WSAENETRESET:
// winsock has already provided us with
// a valid address from ICMP error packet
- icmp_error_event( sock, 0 );
- if( ++tries < MAX_ERROR_RETRIES ) {
+ icmp_error_event(sock, 0);
+ if (++tries < MAX_ERROR_RETRIES) {
goto retry;
}
// intentional fallthrough
#endif // USE_ICMP
default:
- Com_DPrintf( "%s: %s from %s\n", __func__,
- NET_ErrorString(), NET_AdrToString( &net_from ) );
+ Com_DPrintf("%s: %s from %s\n", __func__,
+ NET_ErrorString(), NET_AdrToString(&net_from));
net_recv_errors++;
break;
}
#else // _WIN32
- switch( net_error ) {
+ switch (net_error) {
case EWOULDBLOCK:
// wouldblock is silent
e->canread = qfalse;
@@ -668,15 +680,15 @@ retry:
saved_error = net_error;
// recvfrom() fails on Linux if there's an ICMP originated
// pending error on socket. suck up error queue and retry...
- if( process_error_queue( sock, NULL ) ) {
- if( ++tries < MAX_ERROR_RETRIES ) {
+ if (process_error_queue(sock, NULL)) {
+ if (++tries < MAX_ERROR_RETRIES) {
goto retry;
}
}
net_error = saved_error;
#endif
- Com_DPrintf( "%s: %s from %s\n", __func__,
- NET_ErrorString(), NET_AdrToString( &net_from ) );
+ Com_DPrintf("%s: %s from %s\n", __func__,
+ NET_ErrorString(), NET_AdrToString(&net_from));
net_recv_errors++;
break;
}
@@ -684,19 +696,19 @@ retry:
return qfalse;
}
- if( ret > MAX_PACKETLEN ) {
- Com_EPrintf( "%s: oversize packet from %s\n", __func__,
- NET_AdrToString( &net_from ) );
+ if (ret > MAX_PACKETLEN) {
+ Com_EPrintf("%s: oversize packet from %s\n", __func__,
+ NET_AdrToString(&net_from));
return qfalse;
}
#ifdef _DEBUG
- if( net_log_enable->integer ) {
- NET_LogPacket( &net_from, "UDP recv", msg_read_buffer, ret );
+ if (net_log_enable->integer) {
+ NET_LogPacket(&net_from, "UDP recv", msg_read_buffer, ret);
}
#endif
- SZ_Init( &msg_read, msg_read_buffer, sizeof( msg_read_buffer ) );
+ SZ_Init(&msg_read, msg_read_buffer, sizeof(msg_read_buffer));
msg_read.cursize = ret;
net_rate_rcvd += ret;
net_bytes_rcvd += ret;
@@ -713,99 +725,99 @@ NET_SendPacket
=============
*/
-qboolean NET_SendPacket( netsrc_t sock, const netadr_t *to, size_t length, const void *data ) {
+qboolean NET_SendPacket(netsrc_t sock, const netadr_t *to, size_t length, const void *data)
+{
struct sockaddr_in addr;
int ret;
-#if USE_ICMP && ( defined __linux__ )
+#if USE_ICMP && (defined __linux__)
int tries;
int saved_error;
#endif
- if( !length ) {
+ if (!length) {
return qfalse;
}
- if( length > MAX_PACKETLEN ) {
- Com_EPrintf( "%s: oversize packet to %s\n", __func__,
- NET_AdrToString( to ) );
+ if (length > MAX_PACKETLEN) {
+ Com_EPrintf("%s: oversize packet to %s\n", __func__,
+ NET_AdrToString(to));
return qfalse;
}
- switch( to->type ) {
+ switch (to->type) {
#if USE_CLIENT
case NA_LOOPBACK: {
- loopback_t *loop;
- loopmsg_t *msg;
+ loopback_t *loop;
+ loopmsg_t *msg;
- if( net_dropsim->integer > 0 &&
- ( rand() % 100 ) < net_dropsim->integer )
- {
- return NET_AGAIN;
- }
-
- loop = &loopbacks[sock ^ 1];
+ if (net_dropsim->integer > 0 &&
+ (rand() % 100) < net_dropsim->integer) {
+ return NET_AGAIN;
+ }
+
+ loop = &loopbacks[sock ^ 1];
+
+ msg = &loop->msgs[loop->send & (MAX_LOOPBACK - 1)];
+ loop->send++;
- msg = &loop->msgs[loop->send & ( MAX_LOOPBACK - 1 )];
- loop->send++;
-
- memcpy( msg->data, data, length );
- msg->datalen = length;
+ memcpy(msg->data, data, length);
+ msg->datalen = length;
#ifdef _DEBUG
- if( net_log_enable->integer ) {
- NET_LogPacket( to, "LB send", data, length );
- }
+ if (net_log_enable->integer) {
+ NET_LogPacket(to, "LB send", data, length);
+ }
#endif
- if( sock == NS_CLIENT ) {
- net_rate_sent += length;
- }
+ if (sock == NS_CLIENT) {
+ net_rate_sent += length;
}
- return qtrue;
+ }
+ return qtrue;
#endif
case NA_IP:
case NA_BROADCAST:
break;
default:
- Com_Error( ERR_FATAL, "%s: bad address type", __func__ );
+ Com_Error(ERR_FATAL, "%s: bad address type", __func__);
break;
}
- if( udp_sockets[sock] == INVALID_SOCKET ) {
+ if (udp_sockets[sock] == INVALID_SOCKET) {
return qfalse;
}
- NET_NetadrToSockadr( to, &addr );
+ NET_NetadrToSockadr(to, &addr);
-#if USE_ICMP && ( defined __linux__ )
+#if USE_ICMP && (defined __linux__)
tries = 0;
retry:
#endif
- ret = sendto( udp_sockets[sock], data, length, 0,
- ( struct sockaddr * )&addr, sizeof( addr ) );
- if( ret == -1 ) {
+ ret = sendto(udp_sockets[sock], data, length, 0,
+ (struct sockaddr *)&addr, sizeof(addr));
+ if (ret == -1) {
NET_GET_ERROR();
#ifdef _WIN32
- switch( net_error ) {
+ switch (net_error) {
case WSAEWOULDBLOCK:
case WSAEINTR:
// wouldblock is silent
break;
case WSAEADDRNOTAVAIL:
// some PPP links do not allow broadcasts
- if( to->type == NA_BROADCAST ) {
+ if (to->type == NA_BROADCAST) {
break;
}
// intentional fallthrough
default:
- Com_DPrintf( "%s: %s to %s\n", __func__,
- NET_ErrorString(), NET_AdrToString( to ) );
+ Com_DPrintf("%s: %s to %s\n", __func__,
+ NET_ErrorString(), NET_AdrToString(to));
net_send_errors++;
break;
}
#else // _WIN32
- switch( net_error ) {
+ switch (net_error) {
case EWOULDBLOCK:
// wouldblock is silent
break;
@@ -818,7 +830,7 @@ retry:
// this one is especially lame - how do I distingiush between
// a failure caused by completely unrelated ICMP error sitting
// in the queue and an error explicit to this sendto() call?
- //
+ //
// on one hand, I don't want to drop packets to legitimate
// clients because of this, and have to retry sendto() after
// processing error queue, on another hand, infinite loop should be
@@ -828,15 +840,15 @@ retry:
// to process_error_queue() and checking if this address/port
// pair is found in the queue. if it is found, or the queue
// is empty, do not retry
- if( process_error_queue( sock, &addr ) ) {
- if( ++tries < MAX_ERROR_RETRIES ) {
+ if (process_error_queue(sock, &addr)) {
+ if (++tries < MAX_ERROR_RETRIES) {
goto retry;
}
}
net_error = saved_error;
#endif
- Com_DPrintf( "%s: %s to %s\n", __func__,
- NET_ErrorString(), NET_AdrToString( to ) );
+ Com_DPrintf("%s: %s to %s\n", __func__,
+ NET_ErrorString(), NET_AdrToString(to));
net_send_errors++;
break;
}
@@ -844,14 +856,14 @@ retry:
return qfalse;
}
- if( ret != length ) {
- Com_WPrintf( "%s: short send to %s\n", __func__,
- NET_AdrToString( to ) );
+ if (ret != length) {
+ Com_WPrintf("%s: short send to %s\n", __func__,
+ NET_AdrToString(to));
}
#ifdef _DEBUG
- if( net_log_enable->integer ) {
- NET_LogPacket( to, "UDP send", data, ret );
+ if (net_log_enable->integer) {
+ NET_LogPacket(to, "UDP send", data, ret);
}
#endif
net_rate_sent += ret;
@@ -864,9 +876,10 @@ retry:
//=============================================================================
-const char *NET_ErrorString( void ) {
+const char *NET_ErrorString(void)
+{
#ifdef _WIN32
- switch( net_error ) {
+ switch (net_error) {
case S_OK:
return "NO ERROR";
default:
@@ -874,38 +887,41 @@ const char *NET_ErrorString( void ) {
#include "wsaerr.h"
}
#else
- return strerror( net_error );
+ return strerror(net_error);
#endif
}
-static qboolean get_bind_addr( const char *iface, int port, struct sockaddr_in *sadr ) {
- if( *iface ) {
- if( !NET_StringToSockaddr( iface, sadr ) ) {
+static qboolean get_bind_addr(const char *iface, int port, struct sockaddr_in *sadr)
+{
+ if (*iface) {
+ if (!NET_StringToSockaddr(iface, sadr)) {
return qfalse;
}
} else {
- // empty string binds to all interfaces
- memset( sadr, 0, sizeof( *sadr ) );
+ // empty string binds to all interfaces
+ memset(sadr, 0, sizeof(*sadr));
sadr->sin_family = AF_INET;
sadr->sin_addr.s_addr = INADDR_ANY;
}
- if( port != PORT_ANY ) {
- sadr->sin_port = htons( ( u_short )port );
+ if (port != PORT_ANY) {
+ sadr->sin_port = htons((u_short)port);
}
return qtrue;
}
-static SOCKET create_socket( int type, int proto ) {
- SOCKET ret = socket( PF_INET, type, proto );
+static SOCKET create_socket(int type, int proto)
+{
+ SOCKET ret = socket(PF_INET, type, proto);
NET_GET_ERROR();
return ret;
}
-static int set_option( SOCKET s, int level, int optname, int value ) {
+static int set_option(SOCKET s, int level, int optname, int value)
+{
SETSOCKOPT_PARAM _value = value;
- int ret = setsockopt( s, level, optname, ( char * )&_value, sizeof( _value ) );
+ int ret = setsockopt(s, level, optname, (char *)&_value, sizeof(_value));
NET_GET_ERROR();
return ret;
@@ -913,48 +929,51 @@ static int set_option( SOCKET s, int level, int optname, int value ) {
#define enable_option(s,level,optname) set_option(s,level,optname,1)
-static int make_nonblock( SOCKET s ) {
+static int make_nonblock(SOCKET s)
+{
IOCTLSOCKET_PARAM _true = 1;
- int ret = ioctlsocket( s, FIONBIO, &_true );
+ int ret = ioctlsocket(s, FIONBIO, &_true);
NET_GET_ERROR();
return ret;
}
-static int bind_socket( SOCKET s, struct sockaddr_in *sadr ) {
- int ret = bind( s, ( struct sockaddr * )sadr, sizeof( *sadr ) );
+static int bind_socket(SOCKET s, struct sockaddr_in *sadr)
+{
+ int ret = bind(s, (struct sockaddr *)sadr, sizeof(*sadr));
NET_GET_ERROR();
return ret;
}
-static SOCKET UDP_OpenSocket( const char *iface, int port ) {
+static SOCKET UDP_OpenSocket(const char *iface, int port)
+{
SOCKET s;
struct sockaddr_in sadr;
#ifdef __linux__
int pmtudisc;
#endif
- Com_DPrintf( "Opening UDP socket: %s:%i\n", iface, port );
+ Com_DPrintf("Opening UDP socket: %s:%i\n", iface, port);
- s = create_socket( SOCK_DGRAM, IPPROTO_UDP );
- if( s == INVALID_SOCKET ) {
- Com_EPrintf( "%s: %s:%d: can't create socket: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ s = create_socket(SOCK_DGRAM, IPPROTO_UDP);
+ if (s == INVALID_SOCKET) {
+ Com_EPrintf("%s: %s:%d: can't create socket: %s\n",
+ __func__, iface, port, NET_ErrorString());
return INVALID_SOCKET;
}
// make it non-blocking
- if( make_nonblock( s ) == -1 ) {
- Com_EPrintf( "%s: %s:%d: can't make socket non-blocking: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ if (make_nonblock(s) == -1) {
+ Com_EPrintf("%s: %s:%d: can't make socket non-blocking: %s\n",
+ __func__, iface, port, NET_ErrorString());
goto fail;
}
// make it broadcast capable
- if( enable_option( s, SOL_SOCKET, SO_BROADCAST ) == -1 ) {
- Com_WPrintf( "%s: %s:%d: can't make socket broadcast capable: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ if (enable_option(s, SOL_SOCKET, SO_BROADCAST) == -1) {
+ Com_WPrintf("%s: %s:%d: can't make socket broadcast capable: %s\n",
+ __func__, iface, port, NET_ErrorString());
}
#ifdef __linux__
@@ -962,20 +981,20 @@ static SOCKET UDP_OpenSocket( const char *iface, int port ) {
#if USE_ICMP
// enable ICMP error queue
- if( net_ignore_icmp->integer <= 0 ) {
- if( enable_option( s, IPPROTO_IP, IP_RECVERR ) == -1 ) {
- Com_WPrintf( "%s: %s:%d: can't enable ICMP error queue: %s\n",
- __func__, iface, port, NET_ErrorString() );
- Cvar_Set( "net_ignore_icmp", "1" );
+ if (net_ignore_icmp->integer <= 0) {
+ if (enable_option(s, IPPROTO_IP, IP_RECVERR) == -1) {
+ Com_WPrintf("%s: %s:%d: can't enable ICMP error queue: %s\n",
+ __func__, iface, port, NET_ErrorString());
+ Cvar_Set("net_ignore_icmp", "1");
}
#if USE_PMTUDISC
// overload negative values to enable path MTU discovery
- switch( net_ignore_icmp->integer ) {
- case -1: pmtudisc = IP_PMTUDISC_WANT; break;
- case -2: pmtudisc = IP_PMTUDISC_DO; break;
+ switch (net_ignore_icmp->integer) {
+ case -1: pmtudisc = IP_PMTUDISC_WANT; break;
+ case -2: pmtudisc = IP_PMTUDISC_DO; break;
#ifdef IP_PMTUDISC_PROBE
- case -3: pmtudisc = IP_PMTUDISC_PROBE; break;
+ case -3: pmtudisc = IP_PMTUDISC_PROBE; break;
#endif
}
#endif // USE_PMTUDISC
@@ -983,213 +1002,219 @@ static SOCKET UDP_OpenSocket( const char *iface, int port ) {
#endif // USE_ICMP
// disable or enable path MTU discovery
- if( set_option( s, IPPROTO_IP, IP_MTU_DISCOVER, pmtudisc ) == -1 ) {
- Com_WPrintf( "%s: %s:%d: can't %sable path MTU discovery: %s\n",
- __func__, iface, port, pmtudisc == IP_PMTUDISC_DONT ? "dis" : "en",
- NET_ErrorString() );
+ if (set_option(s, IPPROTO_IP, IP_MTU_DISCOVER, pmtudisc) == -1) {
+ Com_WPrintf("%s: %s:%d: can't %sable path MTU discovery: %s\n",
+ __func__, iface, port, pmtudisc == IP_PMTUDISC_DONT ? "dis" : "en",
+ NET_ErrorString());
}
#endif // __linux__
// resolve iface sadr
- if( !get_bind_addr( iface, port, &sadr ) ) {
- Com_EPrintf( "%s: %s:%d: bad interface address\n",
- __func__, iface, port );
+ if (!get_bind_addr(iface, port, &sadr)) {
+ Com_EPrintf("%s: %s:%d: bad interface address\n",
+ __func__, iface, port);
goto fail;
}
- if( bind_socket( s, &sadr ) == -1 ) {
- Com_EPrintf( "%s: %s:%d: can't bind socket: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ if (bind_socket(s, &sadr) == -1) {
+ Com_EPrintf("%s: %s:%d: can't bind socket: %s\n",
+ __func__, iface, port, NET_ErrorString());
goto fail;
}
return s;
fail:
- closesocket( s );
+ closesocket(s);
return INVALID_SOCKET;
}
-static SOCKET TCP_OpenSocket( const char *iface, int port, netsrc_t who ) {
+static SOCKET TCP_OpenSocket(const char *iface, int port, netsrc_t who)
+{
SOCKET s;
struct sockaddr_in sadr;
- Com_DPrintf( "Opening TCP socket: %s:%i\n", iface, port );
+ Com_DPrintf("Opening TCP socket: %s:%i\n", iface, port);
- s = create_socket( SOCK_STREAM, IPPROTO_TCP );
- if( s == INVALID_SOCKET ) {
- Com_EPrintf( "%s: %s:%d: can't create socket: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ s = create_socket(SOCK_STREAM, IPPROTO_TCP);
+ if (s == INVALID_SOCKET) {
+ Com_EPrintf("%s: %s:%d: can't create socket: %s\n",
+ __func__, iface, port, NET_ErrorString());
return INVALID_SOCKET;
}
// make it non-blocking
- if( make_nonblock( s ) == -1 ) {
- Com_EPrintf( "%s: %s:%d: can't make socket non-blocking: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ if (make_nonblock(s) == -1) {
+ Com_EPrintf("%s: %s:%d: can't make socket non-blocking: %s\n",
+ __func__, iface, port, NET_ErrorString());
goto fail;
}
// give it a chance to reuse previous port
- if( who == NS_SERVER ) {
- if( enable_option( s, SOL_SOCKET, SO_REUSEADDR ) == -1 ) {
- Com_WPrintf( "%s: %s:%d: can't force socket to reuse address: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ if (who == NS_SERVER) {
+ if (enable_option(s, SOL_SOCKET, SO_REUSEADDR) == -1) {
+ Com_WPrintf("%s: %s:%d: can't force socket to reuse address: %s\n",
+ __func__, iface, port, NET_ErrorString());
}
}
- if( !get_bind_addr( iface, port, &sadr ) ) {
- Com_EPrintf( "%s: %s:%d: bad interface address\n",
- __func__, iface, port );
+ if (!get_bind_addr(iface, port, &sadr)) {
+ Com_EPrintf("%s: %s:%d: bad interface address\n",
+ __func__, iface, port);
goto fail;
}
- if( bind_socket( s, &sadr ) == -1 ) {
- Com_EPrintf( "%s: %s:%d: can't bind socket: %s\n",
- __func__, iface, port, NET_ErrorString() );
+ if (bind_socket(s, &sadr) == -1) {
+ Com_EPrintf("%s: %s:%d: can't bind socket: %s\n",
+ __func__, iface, port, NET_ErrorString());
goto fail;
}
return s;
fail:
- closesocket( s );
+ closesocket(s);
return INVALID_SOCKET;
}
-static void NET_OpenServer( void ) {
+static void NET_OpenServer(void)
+{
static int saved_port;
ioentry_t *e;
SOCKET s;
- s = UDP_OpenSocket( net_ip->string, net_port->integer );
- if( s != INVALID_SOCKET ) {
+ s = UDP_OpenSocket(net_ip->string, net_port->integer);
+ if (s != INVALID_SOCKET) {
saved_port = net_port->integer;
udp_sockets[NS_SERVER] = s;
- e = IO_Add( s );
+ e = IO_Add(s);
e->wantread = qtrue;
return;
}
- if( saved_port && saved_port != net_port->integer ) {
+ if (saved_port && saved_port != net_port->integer) {
// revert to the last valid port
- Com_Printf( "Reverting to the last valid port %d...\n", saved_port );
- Cbuf_AddText( &cmd_buffer, va( "set net_port %d\n", saved_port ) );
+ Com_Printf("Reverting to the last valid port %d...\n", saved_port);
+ Cbuf_AddText(&cmd_buffer, va("set net_port %d\n", saved_port));
return;
}
#if USE_CLIENT
- if( !dedicated->integer ) {
- Com_WPrintf( "Couldn't open server UDP port.\n" );
+ if (!dedicated->integer) {
+ Com_WPrintf("Couldn't open server UDP port.\n");
return;
}
#endif
- Com_Error( ERR_FATAL, "Couldn't open dedicated server UDP port" );
+ Com_Error(ERR_FATAL, "Couldn't open dedicated server UDP port");
}
#if USE_CLIENT
-static void NET_OpenClient( void ) {
+static void NET_OpenClient(void)
+{
ioentry_t *e;
SOCKET s;
struct sockaddr_in sadr;
socklen_t len;
- s = UDP_OpenSocket( net_ip->string, net_clientport->integer );
- if( s == INVALID_SOCKET ) {
+ s = UDP_OpenSocket(net_ip->string, net_clientport->integer);
+ if (s == INVALID_SOCKET) {
// now try with random port
- if( net_clientport->integer != PORT_ANY ) {
- s = UDP_OpenSocket( net_ip->string, PORT_ANY );
+ if (net_clientport->integer != PORT_ANY) {
+ s = UDP_OpenSocket(net_ip->string, PORT_ANY);
}
- if( s == INVALID_SOCKET ) {
- Com_WPrintf( "Couldn't open client UDP port.\n" );
+ if (s == INVALID_SOCKET) {
+ Com_WPrintf("Couldn't open client UDP port.\n");
return;
}
- len = sizeof( sadr );
- getsockname( s, ( struct sockaddr * )&sadr, &len );
- Com_WPrintf( "Client bound to UDP port %d.\n", ntohs( sadr.sin_port ) );
- Cvar_SetByVar( net_clientport, va( "%d", PORT_ANY ), FROM_CODE );
+ len = sizeof(sadr);
+ getsockname(s, (struct sockaddr *)&sadr, &len);
+ Com_WPrintf("Client bound to UDP port %d.\n", ntohs(sadr.sin_port));
+ Cvar_SetByVar(net_clientport, va("%d", PORT_ANY), FROM_CODE);
}
udp_sockets[NS_CLIENT] = s;
- e = IO_Add( s );
+ e = IO_Add(s);
e->wantread = qtrue;
}
#endif
//=============================================================================
-void NET_Close( netstream_t *s ) {
- if( !s->state ) {
+void NET_Close(netstream_t *s)
+{
+ if (!s->state) {
return;
}
- IO_Remove( s->socket );
- closesocket( s->socket );
+ IO_Remove(s->socket);
+ closesocket(s->socket);
s->socket = INVALID_SOCKET;
s->state = NS_DISCONNECTED;
}
-neterr_t NET_Listen( qboolean arg ) {
+neterr_t NET_Listen(qboolean arg)
+{
SOCKET s;
ioentry_t *e;
- if( !arg ) {
- if( tcp_socket != INVALID_SOCKET ) {
- IO_Remove( tcp_socket );
- closesocket( tcp_socket );
+ if (!arg) {
+ if (tcp_socket != INVALID_SOCKET) {
+ IO_Remove(tcp_socket);
+ closesocket(tcp_socket);
tcp_socket = INVALID_SOCKET;
}
return NET_OK;
}
- if( tcp_socket != INVALID_SOCKET ) {
+ if (tcp_socket != INVALID_SOCKET) {
return NET_OK;
}
- s = TCP_OpenSocket( net_tcp_ip->string,
- net_tcp_port->integer, NS_SERVER );
- if( s == INVALID_SOCKET ) {
+ s = TCP_OpenSocket(net_tcp_ip->string,
+ net_tcp_port->integer, NS_SERVER);
+ if (s == INVALID_SOCKET) {
return NET_ERROR;
}
- if( listen( s, net_tcp_backlog->integer ) == -1 ) {
+ if (listen(s, net_tcp_backlog->integer) == -1) {
NET_GET_ERROR();
- closesocket( s );
+ closesocket(s);
return NET_ERROR;
}
tcp_socket = s;
- e = IO_Add( s );
+ e = IO_Add(s);
e->wantread = qtrue;
return NET_OK;
}
// net_from variable receives source address
-neterr_t NET_Accept( netstream_t *s ) {
+neterr_t NET_Accept(netstream_t *s)
+{
struct sockaddr_in from;
socklen_t fromlen;
SOCKET newsocket;
ioentry_t *e;
- if( tcp_socket == INVALID_SOCKET ) {
+ if (tcp_socket == INVALID_SOCKET) {
return NET_AGAIN;
}
- e = IO_Get( tcp_socket );
- if( !e->canread ) {
+ e = IO_Get(tcp_socket);
+ if (!e->canread) {
return NET_AGAIN;
}
- memset( &from, 0, sizeof( from ) );
- fromlen = sizeof( from );
- newsocket = accept( tcp_socket, ( struct sockaddr * )&from, &fromlen );
+ memset(&from, 0, sizeof(from));
+ fromlen = sizeof(from);
+ newsocket = accept(tcp_socket, (struct sockaddr *)&from, &fromlen);
- NET_SockadrToNetadr( &from, &net_from );
+ NET_SockadrToNetadr(&from, &net_from);
- if( newsocket == -1 ) {
- if( NET_WOULD_BLOCK() ) {
+ if (newsocket == -1) {
+ if (NET_WOULD_BLOCK()) {
// wouldblock is silent
e->canread = qfalse;
return NET_AGAIN;
@@ -1198,26 +1223,27 @@ neterr_t NET_Accept( netstream_t *s ) {
}
// make it non-blocking
- if( make_nonblock( newsocket ) == -1 ) {
- closesocket( newsocket );
+ if (make_nonblock(newsocket) == -1) {
+ closesocket(newsocket);
return NET_ERROR;
}
// initialize stream
- memset( s, 0, sizeof( *s ) );
+ memset(s, 0, sizeof(*s));
s->socket = newsocket;
s->address = net_from;
s->state = NS_CONNECTED;
// initialize io entry
- e = IO_Add( newsocket );
+ e = IO_Add(newsocket);
//e->wantwrite = qtrue;
e->wantread = qtrue;
return NET_OK;
}
-neterr_t NET_Connect( const netadr_t *peer, netstream_t *s ) {
+neterr_t NET_Connect(const netadr_t *peer, netstream_t *s)
+{
SOCKET socket;
ioentry_t *e;
struct sockaddr_in sadr;
@@ -1225,34 +1251,34 @@ neterr_t NET_Connect( const netadr_t *peer, netstream_t *s ) {
// always bind to `net_ip' for outgoing TCP connections
// to avoid problems with AC or MVD/GTV auth on a multi IP system
- socket = TCP_OpenSocket( net_ip->string, PORT_ANY, NS_CLIENT );
- if( socket == INVALID_SOCKET ) {
+ socket = TCP_OpenSocket(net_ip->string, PORT_ANY, NS_CLIENT);
+ if (socket == INVALID_SOCKET) {
return NET_ERROR;
}
- NET_NetadrToSockadr( peer, &sadr );
+ NET_NetadrToSockadr(peer, &sadr);
- ret = connect( socket, ( struct sockaddr * )&sadr, sizeof( sadr ) );
- if( ret == -1 ) {
+ ret = connect(socket, (struct sockaddr *)&sadr, sizeof(sadr));
+ if (ret == -1) {
#ifdef _WIN32
- if( NET_GET_ERROR() != WSAEWOULDBLOCK ) {
+ if (NET_GET_ERROR() != WSAEWOULDBLOCK) {
#else
- if( NET_GET_ERROR() != EINPROGRESS ) {
+ if (NET_GET_ERROR() != EINPROGRESS) {
#endif
// wouldblock is silent
- closesocket( socket );
+ closesocket(socket);
return NET_ERROR;
}
}
// initialize stream
- memset( s, 0, sizeof( *s ) );
+ memset(s, 0, sizeof(*s));
s->state = NS_CONNECTING;
s->address = *peer;
s->socket = socket;
// initialize io entry
- e = IO_Add( socket );
+ e = IO_Add(socket);
e->wantwrite = qtrue;
#ifdef _WIN32
e->wantexcept = qtrue;
@@ -1261,31 +1287,31 @@ neterr_t NET_Connect( const netadr_t *peer, netstream_t *s ) {
return NET_OK;
}
-neterr_t NET_RunConnect( netstream_t *s ) {
+neterr_t NET_RunConnect(netstream_t *s)
+{
socklen_t len;
int ret, err;
ioentry_t *e;
- if( s->state != NS_CONNECTING ) {
+ if (s->state != NS_CONNECTING) {
return NET_AGAIN;
}
- e = IO_Get( s->socket );
- if( !e->canwrite
+ e = IO_Get(s->socket);
+ if (!e->canwrite
#ifdef _WIN32
&& !e->canexcept
#endif
- )
- {
+ ) {
return NET_AGAIN;
}
- len = sizeof( err );
- ret = getsockopt( s->socket, SOL_SOCKET, SO_ERROR, ( char * )&err, &len );
- if( ret == -1 ) {
+ len = sizeof(err);
+ ret = getsockopt(s->socket, SOL_SOCKET, SO_ERROR, (char *)&err, &len);
+ if (ret == -1) {
goto error1;
}
- if( err ) {
+ if (err) {
net_error = err;
goto error2;
}
@@ -1311,56 +1337,58 @@ error2:
}
// updates wantread/wantwrite
-void NET_UpdateStream( netstream_t *s ) {
+void NET_UpdateStream(netstream_t *s)
+{
size_t len;
ioentry_t *e;
- if( s->state != NS_CONNECTED ) {
+ if (s->state != NS_CONNECTED) {
return;
}
- e = IO_Get( s->socket );
+ e = IO_Get(s->socket);
- FIFO_Reserve( &s->recv, &len );
+ FIFO_Reserve(&s->recv, &len);
e->wantread = len ? qtrue : qfalse;
- FIFO_Peek( &s->send, &len );
+ FIFO_Peek(&s->send, &len);
e->wantwrite = len ? qtrue : qfalse;
}
// returns NET_OK only when there was some data read
-neterr_t NET_RunStream( netstream_t *s ) {
+neterr_t NET_RunStream(netstream_t *s)
+{
int ret;
size_t len;
void *data;
neterr_t result = NET_AGAIN;
ioentry_t *e;
- if( s->state != NS_CONNECTED ) {
+ if (s->state != NS_CONNECTED) {
return result;
}
- e = IO_Get( s->socket );
- if( e->wantread && e->canread ) {
+ e = IO_Get(s->socket);
+ if (e->wantread && e->canread) {
// read as much as we can
- data = FIFO_Reserve( &s->recv, &len );
- if( len ) {
- ret = recv( s->socket, data, len, 0 );
- if( !ret ) {
+ data = FIFO_Reserve(&s->recv, &len);
+ if (len) {
+ ret = recv(s->socket, data, len, 0);
+ if (!ret) {
goto closed;
}
- if( ret == -1 ) {
- if( NET_WOULD_BLOCK() ) {
+ if (ret == -1) {
+ if (NET_WOULD_BLOCK()) {
// wouldblock is silent
e->canread = qfalse;
} else {
goto error;
}
} else {
- FIFO_Commit( &s->recv, ret );
+ FIFO_Commit(&s->recv, ret);
#if _DEBUG
- if( net_log_enable->integer ) {
- NET_LogPacket( &s->address, "TCP recv", data, ret );
+ if (net_log_enable->integer) {
+ NET_LogPacket(&s->address, "TCP recv", data, ret);
}
#endif
net_rate_rcvd += ret;
@@ -1369,34 +1397,34 @@ neterr_t NET_RunStream( netstream_t *s ) {
result = NET_OK;
// now see if there's more space to read
- FIFO_Reserve( &s->recv, &len );
- if( !len ) {
+ FIFO_Reserve(&s->recv, &len);
+ if (!len) {
e->wantread = qfalse;
}
}
}
}
- if( e->wantwrite && e->canwrite ) {
+ if (e->wantwrite && e->canwrite) {
// write as much as we can
- data = FIFO_Peek( &s->send, &len );
- if( len ) {
- ret = send( s->socket, data, len, 0 );
- if( !ret ) {
+ data = FIFO_Peek(&s->send, &len);
+ if (len) {
+ ret = send(s->socket, data, len, 0);
+ if (!ret) {
goto closed;
}
- if( ret == -1 ) {
- if( NET_WOULD_BLOCK() ) {
+ if (ret == -1) {
+ if (NET_WOULD_BLOCK()) {
// wouldblock is silent
e->canwrite = qfalse;
} else {
goto error;
}
} else {
- FIFO_Decommit( &s->send, ret );
+ FIFO_Decommit(&s->send, ret);
#if _DEBUG
- if( net_log_enable->integer ) {
- NET_LogPacket( &s->address, "TCP send", data, ret );
+ if (net_log_enable->integer) {
+ NET_LogPacket(&s->address, "TCP send", data, ret);
}
#endif
net_rate_sent += ret;
@@ -1405,8 +1433,8 @@ neterr_t NET_RunStream( netstream_t *s ) {
//result = NET_OK;
// now see if there's more data to write
- FIFO_Peek( &s->send, &len );
- if( !len ) {
+ FIFO_Peek(&s->send, &len);
+ if (!len) {
e->wantwrite = qfalse;
}
@@ -1435,37 +1463,38 @@ error:
NET_Stats_f
====================
*/
-static void NET_Stats_f( void ) {
- time_t diff, now = time( NULL );
+static void NET_Stats_f(void)
+{
+ time_t diff, now = time(NULL);
char buffer[MAX_QPATH];
- if( com_startTime > now ) {
+ if (com_startTime > now) {
com_startTime = now;
}
diff = now - com_startTime;
- if( diff < 1 ) {
+ if (diff < 1) {
diff = 1;
}
- Com_FormatTime( buffer, sizeof( buffer ), diff );
- Com_Printf( "Network uptime: %s\n", buffer );
- Com_Printf( "Bytes sent: %"PRIu64" (%"PRIu64" bytes/sec)\n",
- net_bytes_sent, net_bytes_sent / diff );
- Com_Printf( "Bytes rcvd: %"PRIu64" (%"PRIu64" bytes/sec)\n",
- net_bytes_rcvd, net_bytes_rcvd / diff );
- Com_Printf( "Packets sent: %"PRIu64" (%"PRIu64" packets/sec)\n",
- net_packets_sent, net_packets_sent / diff );
- Com_Printf( "Packets rcvd: %"PRIu64" (%"PRIu64" packets/sec)\n",
- net_packets_rcvd, net_packets_rcvd / diff );
+ Com_FormatTime(buffer, sizeof(buffer), diff);
+ Com_Printf("Network uptime: %s\n", buffer);
+ Com_Printf("Bytes sent: %"PRIu64" (%"PRIu64" bytes/sec)\n",
+ net_bytes_sent, net_bytes_sent / diff);
+ Com_Printf("Bytes rcvd: %"PRIu64" (%"PRIu64" bytes/sec)\n",
+ net_bytes_rcvd, net_bytes_rcvd / diff);
+ Com_Printf("Packets sent: %"PRIu64" (%"PRIu64" packets/sec)\n",
+ net_packets_sent, net_packets_sent / diff);
+ Com_Printf("Packets rcvd: %"PRIu64" (%"PRIu64" packets/sec)\n",
+ net_packets_rcvd, net_packets_rcvd / diff);
#if USE_ICMP
- Com_Printf( "Total errors: %"PRIu64"/%"PRIu64"/%"PRIu64" (send/recv/icmp)\n",
- net_send_errors, net_recv_errors, net_icmp_errors );
+ Com_Printf("Total errors: %"PRIu64"/%"PRIu64"/%"PRIu64" (send/recv/icmp)\n",
+ net_send_errors, net_recv_errors, net_icmp_errors);
#else
- Com_Printf( "Total errors: %"PRIu64"/%"PRIu64" (send/recv)\n",
- net_send_errors, net_recv_errors );
+ Com_Printf("Total errors: %"PRIu64"/%"PRIu64" (send/recv)\n",
+ net_send_errors, net_recv_errors);
#endif
- Com_Printf( "Current upload rate: %"PRIz" bytes/sec\n", net_rate_up );
- Com_Printf( "Current download rate: %"PRIz" bytes/sec\n", net_rate_dn );
+ Com_Printf("Current upload rate: %"PRIz" bytes/sec\n", net_rate_up);
+ Com_Printf("Current download rate: %"PRIz" bytes/sec\n", net_rate_dn);
}
/*
@@ -1473,37 +1502,39 @@ static void NET_Stats_f( void ) {
NET_DumpHostInfo
====================
*/
-static void NET_DumpHostInfo( struct hostent *h ) {
+static void NET_DumpHostInfo(struct hostent *h)
+{
byte **list;
int i;
- Com_Printf( "Hostname: %s\n", h->h_name );
+ Com_Printf("Hostname: %s\n", h->h_name);
- list = ( byte ** )h->h_aliases;
- for( i = 0; list[i]; i++ ) {
- Com_Printf( "Alias : %s\n", list[i] );
+ list = (byte **)h->h_aliases;
+ for (i = 0; list[i]; i++) {
+ Com_Printf("Alias : %s\n", list[i]);
}
- list = ( byte ** )h->h_addr_list;
- for( i = 0; list[i]; i++ ) {
- Com_Printf( "IP : %u.%u.%u.%u\n",
- list[i][0], list[i][1], list[i][2], list[i][3] );
+ list = (byte **)h->h_addr_list;
+ for (i = 0; list[i]; i++) {
+ Com_Printf("IP : %u.%u.%u.%u\n",
+ list[i][0], list[i][1], list[i][2], list[i][3]);
}
}
-static void dump_socket( SOCKET s, const char *s1, const char *s2 ) {
+static void dump_socket(SOCKET s, const char *s1, const char *s2)
+{
struct sockaddr_in sadr;
socklen_t len;
netadr_t adr;
- len = sizeof( sadr );
- if( getsockname( s, ( struct sockaddr * )&sadr, &len ) == -1 ) {
+ len = sizeof(sadr);
+ if (getsockname(s, (struct sockaddr *)&sadr, &len) == -1) {
NET_GET_ERROR();
- Com_EPrintf( "%s: getsockname: %s\n", __func__, NET_ErrorString() );
+ Com_EPrintf("%s: getsockname: %s\n", __func__, NET_ErrorString());
return;
}
- NET_SockadrToNetadr( &sadr, &adr );
- Com_Printf( "%s %s socket bound to %s\n", s1, s2, NET_AdrToString( &adr ) );
+ NET_SockadrToNetadr(&sadr, &adr);
+ Com_Printf("%s %s socket bound to %s\n", s1, s2, NET_AdrToString(&adr));
}
/*
@@ -1511,32 +1542,33 @@ static void dump_socket( SOCKET s, const char *s1, const char *s2 ) {
NET_ShowIP_f
====================
*/
-static void NET_ShowIP_f( void ) {
+static void NET_ShowIP_f(void)
+{
char buffer[256];
struct hostent *h;
netsrc_t sock;
- if( gethostname( buffer, sizeof( buffer ) ) == -1 ) {
+ if (gethostname(buffer, sizeof(buffer)) == -1) {
NET_GET_ERROR();
- Com_EPrintf( "%s: gethostname: %s\n", __func__, NET_ErrorString() );
+ Com_EPrintf("%s: gethostname: %s\n", __func__, NET_ErrorString());
return;
}
- if( !( h = gethostbyname( buffer ) ) ) {
+ if (!(h = gethostbyname(buffer))) {
NET_GET_ERROR();
- Com_EPrintf( "%s: gethostbyname: %s\n", __func__, NET_ErrorString() );
+ Com_EPrintf("%s: gethostbyname: %s\n", __func__, NET_ErrorString());
return;
}
- NET_DumpHostInfo( h );
+ NET_DumpHostInfo(h);
- for( sock = 0; sock < NS_COUNT; sock++ ) {
- if( udp_sockets[sock] != INVALID_SOCKET ) {
- dump_socket( udp_sockets[sock], socketNames[sock], "UDP" );
+ for (sock = 0; sock < NS_COUNT; sock++) {
+ if (udp_sockets[sock] != INVALID_SOCKET) {
+ dump_socket(udp_sockets[sock], socketNames[sock], "UDP");
}
}
- if( tcp_socket != INVALID_SOCKET ) {
- dump_socket( tcp_socket, socketNames[NS_SERVER], "TCP" );
+ if (tcp_socket != INVALID_SOCKET) {
+ dump_socket(tcp_socket, socketNames[NS_SERVER], "TCP");
}
}
@@ -1545,36 +1577,37 @@ static void NET_ShowIP_f( void ) {
NET_Dns_f
====================
*/
-static void NET_Dns_f( void ) {
+static void NET_Dns_f(void)
+{
char buffer[MAX_QPATH];
char *p;
struct hostent *h;
u_long address;
- if( Cmd_Argc() != 2 ) {
- Com_Printf( "Usage: %s <address>\n", Cmd_Argv( 0 ) );
+ if (Cmd_Argc() != 2) {
+ Com_Printf("Usage: %s <address>\n", Cmd_Argv(0));
return;
}
- Cmd_ArgvBuffer( 1, buffer, sizeof( buffer ) );
+ Cmd_ArgvBuffer(1, buffer, sizeof(buffer));
- if( ( p = strchr( buffer, ':' ) ) != NULL ) {
+ if ((p = strchr(buffer, ':')) != NULL) {
*p = 0;
}
- if( ( address = inet_addr( buffer ) ) != INADDR_NONE ) {
- h = gethostbyaddr( ( const char * )&address, sizeof( address ), AF_INET );
+ if ((address = inet_addr(buffer)) != INADDR_NONE) {
+ h = gethostbyaddr((const char *)&address, sizeof(address), AF_INET);
} else {
- h = gethostbyname( buffer );
+ h = gethostbyname(buffer);
}
- if( !h ) {
- Com_Printf( "Couldn't resolve %s\n", buffer );
+ if (!h) {
+ Com_Printf("Couldn't resolve %s\n", buffer);
return;
}
- NET_DumpHostInfo( h );
-
+ NET_DumpHostInfo(h);
+
}
/*
@@ -1582,19 +1615,20 @@ static void NET_Dns_f( void ) {
NET_Restart_f
====================
*/
-static void NET_Restart_f( void ) {
+static void NET_Restart_f(void)
+{
netflag_t flag = net_active;
qboolean listen = tcp_socket != INVALID_SOCKET;
- Com_DPrintf( "%s\n", __func__ );
+ Com_DPrintf("%s\n", __func__);
- if( listen ) {
- NET_Listen( qfalse );
+ if (listen) {
+ NET_Listen(qfalse);
}
- NET_Config( NET_NONE );
- NET_Config( flag );
- if( listen ) {
- NET_Listen( qtrue );
+ NET_Config(NET_NONE);
+ NET_Config(flag);
+ if (listen) {
+ NET_Listen(qtrue);
}
#if USE_SYSCON
@@ -1607,19 +1641,20 @@ static void NET_Restart_f( void ) {
NET_Config
====================
*/
-void NET_Config( netflag_t flag ) {
+void NET_Config(netflag_t flag)
+{
netsrc_t sock;
- if( flag == net_active ) {
+ if (flag == net_active) {
return;
}
- if( flag == NET_NONE ) {
+ if (flag == NET_NONE) {
// shut down any existing sockets
- for( sock = 0; sock < NS_COUNT; sock++ ) {
- if( udp_sockets[sock] != INVALID_SOCKET ) {
- IO_Remove( udp_sockets[sock] );
- closesocket( udp_sockets[sock] );
+ for (sock = 0; sock < NS_COUNT; sock++) {
+ if (udp_sockets[sock] != INVALID_SOCKET) {
+ IO_Remove(udp_sockets[sock]);
+ closesocket(udp_sockets[sock]);
udp_sockets[sock] = INVALID_SOCKET;
}
}
@@ -1628,61 +1663,66 @@ void NET_Config( netflag_t flag ) {
}
#if USE_CLIENT
- if( ( flag & NET_CLIENT ) && udp_sockets[NS_CLIENT] == INVALID_SOCKET ) {
+ if ((flag & NET_CLIENT) && udp_sockets[NS_CLIENT] == INVALID_SOCKET) {
NET_OpenClient();
}
#endif
- if( ( flag & NET_SERVER ) && udp_sockets[NS_SERVER] == INVALID_SOCKET ) {
+ if ((flag & NET_SERVER) && udp_sockets[NS_SERVER] == INVALID_SOCKET) {
NET_OpenServer();
}
net_active |= flag;
}
-qboolean NET_GetAddress( netsrc_t sock, netadr_t *adr ) {
+qboolean NET_GetAddress(netsrc_t sock, netadr_t *adr)
+{
struct sockaddr_in sadr;
socklen_t len;
SOCKET s = udp_sockets[sock];
- if( s == INVALID_SOCKET ) {
+ if (s == INVALID_SOCKET) {
return qfalse;
}
- len = sizeof( sadr );
- if( getsockname( s, ( struct sockaddr * )&sadr, &len ) == -1 ) {
+ len = sizeof(sadr);
+ if (getsockname(s, (struct sockaddr *)&sadr, &len) == -1) {
return qfalse;
}
- NET_SockadrToNetadr( &sadr, adr );
+ NET_SockadrToNetadr(&sadr, adr);
return qtrue;
}
-static size_t NET_UpRate_m( char *buffer, size_t size ) {
- return Q_scnprintf( buffer, size, "%"PRIz, net_rate_up );
+static size_t NET_UpRate_m(char *buffer, size_t size)
+{
+ return Q_scnprintf(buffer, size, "%"PRIz, net_rate_up);
}
-static size_t NET_DnRate_m( char *buffer, size_t size ) {
- return Q_scnprintf( buffer, size, "%"PRIz, net_rate_dn );
+static size_t NET_DnRate_m(char *buffer, size_t size)
+{
+ return Q_scnprintf(buffer, size, "%"PRIz, net_rate_dn);
}
-static void net_udp_param_changed( cvar_t *self ) {
+static void net_udp_param_changed(cvar_t *self)
+{
// keep TCP socket vars in sync unless modified by user
- if( !( net_tcp_ip->flags & CVAR_MODIFIED ) ) {
- Cvar_SetByVar( net_tcp_ip, net_ip->string, FROM_CODE );
+ if (!(net_tcp_ip->flags & CVAR_MODIFIED)) {
+ Cvar_SetByVar(net_tcp_ip, net_ip->string, FROM_CODE);
}
- if( !( net_tcp_port->flags & CVAR_MODIFIED ) ) {
- Cvar_SetByVar( net_tcp_port, net_port->string, FROM_CODE );
+ if (!(net_tcp_port->flags & CVAR_MODIFIED)) {
+ Cvar_SetByVar(net_tcp_port, net_port->string, FROM_CODE);
}
NET_Restart_f();
}
-static void net_tcp_param_changed( cvar_t *self ) {
- if( tcp_socket != INVALID_SOCKET ) {
- NET_Listen( qfalse );
- NET_Listen( qtrue );
+static void net_tcp_param_changed(cvar_t *self)
+{
+ if (tcp_socket != INVALID_SOCKET) {
+ NET_Listen(qfalse);
+ NET_Listen(qtrue);
}
}
@@ -1691,58 +1731,59 @@ static void net_tcp_param_changed( cvar_t *self ) {
NET_Init
====================
*/
-void NET_Init( void ) {
+void NET_Init(void)
+{
#ifdef _WIN32
WSADATA ws;
int ret;
- ret = WSAStartup( MAKEWORD( 1, 1 ), &ws );
- if( ret ) {
- Com_Error( ERR_FATAL, "Winsock initialization failed, returned %d", ret );
+ ret = WSAStartup(MAKEWORD(1, 1), &ws);
+ if (ret) {
+ Com_Error(ERR_FATAL, "Winsock initialization failed, returned %d", ret);
}
- Com_DPrintf( "Winsock Initialized\n" );
+ Com_DPrintf("Winsock Initialized\n");
#endif
- net_ip = Cvar_Get( "net_ip", "", 0 );
+ net_ip = Cvar_Get("net_ip", "", 0);
net_ip->changed = net_udp_param_changed;
- net_port = Cvar_Get( "net_port", PORT_SERVER_STRING, 0 );
+ net_port = Cvar_Get("net_port", PORT_SERVER_STRING, 0);
net_port->changed = net_udp_param_changed;
#if USE_CLIENT
- net_clientport = Cvar_Get( "net_clientport", PORT_ANY_STRING, 0 );
+ net_clientport = Cvar_Get("net_clientport", PORT_ANY_STRING, 0);
net_clientport->changed = net_udp_param_changed;
- net_dropsim = Cvar_Get( "net_dropsim", "0", 0 );
+ net_dropsim = Cvar_Get("net_dropsim", "0", 0);
#endif
#if _DEBUG
- net_log_enable = Cvar_Get( "net_log_enable", "0", 0 );
+ net_log_enable = Cvar_Get("net_log_enable", "0", 0);
net_log_enable->changed = net_log_enable_changed;
- net_log_name = Cvar_Get( "net_log_name", "network", 0 );
+ net_log_name = Cvar_Get("net_log_name", "network", 0);
net_log_name->changed = net_log_param_changed;
- net_log_flush = Cvar_Get( "net_log_flush", "0", 0 );
+ net_log_flush = Cvar_Get("net_log_flush", "0", 0);
net_log_flush->changed = net_log_param_changed;
#endif
#if USE_ICMP
- net_ignore_icmp = Cvar_Get( "net_ignore_icmp", "0", 0 );
+ net_ignore_icmp = Cvar_Get("net_ignore_icmp", "0", 0);
#endif
- net_tcp_ip = Cvar_Get( "net_tcp_ip", net_ip->string, 0 );
+ net_tcp_ip = Cvar_Get("net_tcp_ip", net_ip->string, 0);
net_tcp_ip->changed = net_tcp_param_changed;
- net_tcp_port = Cvar_Get( "net_tcp_port", net_port->string, 0 );
+ net_tcp_port = Cvar_Get("net_tcp_port", net_port->string, 0);
net_tcp_port->changed = net_tcp_param_changed;
- net_tcp_backlog = Cvar_Get( "net_tcp_backlog", "4", 0 );
+ net_tcp_backlog = Cvar_Get("net_tcp_backlog", "4", 0);
#if _DEBUG
- net_log_enable_changed( net_log_enable );
+ net_log_enable_changed(net_log_enable);
#endif
net_rate_time = com_eventTime;
- Cmd_AddCommand( "net_restart", NET_Restart_f );
- Cmd_AddCommand( "net_stats", NET_Stats_f );
- Cmd_AddCommand( "showip", NET_ShowIP_f );
- Cmd_AddCommand( "dns", NET_Dns_f );
+ Cmd_AddCommand("net_restart", NET_Restart_f);
+ Cmd_AddCommand("net_stats", NET_Stats_f);
+ Cmd_AddCommand("showip", NET_ShowIP_f);
+ Cmd_AddCommand("dns", NET_Dns_f);
- Cmd_AddMacro( "net_uprate", NET_UpRate_m );
- Cmd_AddMacro( "net_dnrate", NET_DnRate_m );
+ Cmd_AddMacro("net_uprate", NET_UpRate_m);
+ Cmd_AddMacro("net_dnrate", NET_DnRate_m);
}
/*
@@ -1750,24 +1791,25 @@ void NET_Init( void ) {
NET_Shutdown
====================
*/
-void NET_Shutdown( void ) {
+void NET_Shutdown(void)
+{
#if _DEBUG
- if( net_logFile ) {
- FS_FCloseFile( net_logFile );
+ if (net_logFile) {
+ FS_FCloseFile(net_logFile);
net_logFile = 0;
}
#endif
- NET_Listen( qfalse );
- NET_Config( NET_NONE );
+ NET_Listen(qfalse);
+ NET_Config(NET_NONE);
#ifdef _WIN32
WSACleanup();
#endif
- Cmd_RemoveCommand( "net_restart" );
- Cmd_RemoveCommand( "net_stats" );
- Cmd_RemoveCommand( "showip" );
- Cmd_RemoveCommand( "dns" );
+ Cmd_RemoveCommand("net_restart");
+ Cmd_RemoveCommand("net_stats");
+ Cmd_RemoveCommand("showip");
+ Cmd_RemoveCommand("dns");
}