summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2008-03-07 16:32:33 +0000
committerAndrey Nazarov <skuller@skuller.net>2008-03-07 16:32:33 +0000
commit6a989837298ceea93efc2912df00ccf6fdfa84ce (patch)
treee6a3a9b55ac0fd941ac691d6711385772d6ba79c
parentc9de9262ae2cbb799ff71d4d93dace22f33247aa (diff)
Network code cleanup.
Fixed port endianess bug in MVD_Connect_f.
-rw-r--r--source/mvd_client.c4
-rw-r--r--source/net_common.c192
-rw-r--r--source/wsaerr.h86
3 files changed, 151 insertions, 131 deletions
diff --git a/source/mvd_client.c b/source/mvd_client.c
index a6b199f..592d235 100644
--- a/source/mvd_client.c
+++ b/source/mvd_client.c
@@ -1050,10 +1050,10 @@ void MVD_Connect_f( void ) {
if( p ) {
*p = 0;
strcpy( resource, p + 1 );
- port = BigShort( 80 );
+ port = 80;
} else {
Q_concat( resource, sizeof( resource ), "mvdstream/", id, NULL );
- port = BigShort( PORT_SERVER );
+ port = PORT_SERVER;
}
// resolve hostname
diff --git a/source/net_common.c b/source/net_common.c
index e06cad6..1f81b26 100644
--- a/source/net_common.c
+++ b/source/net_common.c
@@ -110,7 +110,7 @@ static void NET_NetadrToSockadr( const netadr_t *a, struct sockaddr_in *s ) {
s->sin_port = a->port;
break;
default:
- Com_Error( ERR_FATAL, "NetadrToSockadr: bad address type" );
+ Com_Error( ERR_FATAL, "%s: bad address type", __func__ );
break;
}
}
@@ -141,8 +141,8 @@ idnewt:28000
*/
static qboolean NET_StringToSockaddr( const char *s, struct sockaddr_in *sadr ) {
struct hostent *h;
- char *colon;
- char copy[MAX_QPATH];
+ char copy[MAX_QPATH], *p;
+ int dots;
memset( sadr, 0, sizeof( *sadr ) );
@@ -151,14 +151,25 @@ static qboolean NET_StringToSockaddr( const char *s, struct sockaddr_in *sadr )
Q_strncpyz( copy, s, sizeof( copy ) );
// strip off a trailing :port if present
- for( colon = copy ; *colon ; colon++ ) {
- if( *colon == ':' ) {
- *colon = 0;
- sadr->sin_port = htons( ( u_short )atoi( colon + 1 ) );
- }
+ p = strchr( copy, ':' );
+ if( p ) {
+ *p = 0;
+ sadr->sin_port = htons( ( u_short )atoi( p + 1 ) );
+ }
+ for( p = copy, dots = 0; *p; p++ ) {
+ if( *p == '.' ) {
+ dots++;
+ } else if( !Q_isdigit( *p ) ) {
+ break;
+ }
}
- if( copy[0] >= '0' && copy[0] <= '9' ) {
- *( uint32_t * )&sadr->sin_addr = inet_addr( copy );
+ if( *p == 0 && dots == 3 ) {
+ uint32_t addr = inet_addr( copy );
+
+ if( addr == INADDR_NONE ) {
+ return qfalse;
+ }
+ *( uint32_t * )&sadr->sin_addr = addr;
} else {
if( !( h = gethostbyname( copy ) ) )
return qfalse;
@@ -183,13 +194,11 @@ char *NET_AdrToString( const netadr_t *a ) {
return s;
case NA_IP:
case NA_BROADCAST:
- Com_sprintf( s, sizeof( s ), "%i.%i.%i.%i:%i",
- a->ip[0], a->ip[1], a->ip[2], a->ip[3],
- ntohs( a->port ) );
+ Com_sprintf( s, sizeof( s ), "%u.%u.%u.%u:%u",
+ a->ip[0], a->ip[1], a->ip[2], a->ip[3], ntohs( a->port ) );
return s;
default:
- Com_Error( ERR_FATAL, "NET_AdrToString: bad address type: %i",
- a->type );
+ Com_Error( ERR_FATAL, "%s: bad address type", __func__ );
break;
}
@@ -411,11 +420,11 @@ neterr_t NET_GetPacket( netsrc_t sock ) {
}
break;
case WSAEMSGSIZE:
- Com_WPrintf( "NET_GetPacket: oversize packet from %s\n",
+ Com_WPrintf( "%s: oversize packet from %s\n", __func__,
NET_AdrToString( &net_from ) );
break;
default:
- Com_EPrintf( "NET_GetPacket: %s from %s\n",
+ Com_EPrintf( "%s: %s from %s\n", __func__,
NET_ErrorString(), NET_AdrToString( &net_from ) );
break;
}
@@ -430,7 +439,7 @@ neterr_t NET_GetPacket( netsrc_t sock ) {
}
break;
default:
- Com_EPrintf( "NET_GetPacket: %s from %s\n",
+ Com_EPrintf( "%s: %s from %s\n", __func__,
NET_ErrorString(), NET_AdrToString( &net_from ) );
break;
}
@@ -443,7 +452,7 @@ neterr_t NET_GetPacket( netsrc_t sock ) {
}
if( ret > MAX_PACKETLEN ) {
- Com_WPrintf( "NET_GetPacket: oversize packet from %s\n",
+ Com_WPrintf( "%s: oversize packet from %s\n", __func__,
NET_AdrToString( &net_from ) );
return NET_AGAIN;
}
@@ -467,13 +476,13 @@ neterr_t NET_SendPacket( netsrc_t sock, const netadr_t *to, unsigned length, con
int ret;
if( length > MAX_PACKETLEN ) {
- Com_WPrintf( "NET_SendPacket: bad length: %u bytes\n", length );
+ Com_WPrintf( "%s: bad length: %u bytes\n", __func__, length );
return NET_ERROR;
}
switch( to->type ) {
case NA_LOOPBACK: {
- loopback_t *loop;
+ loopback_t *loop;
loopmsg_t *msg;
if( net_dropsim->integer > 0 &&
@@ -502,9 +511,9 @@ neterr_t NET_SendPacket( netsrc_t sock, const netadr_t *to, unsigned length, con
case NA_BROADCAST:
break;
default:
- Com_Error( ERR_FATAL, "NET_SendPacket: bad address type: %i",to->type );
+ Com_Error( ERR_FATAL, "%s: bad address type", __func__ );
break;
- }
+ }
if( udp_sockets[sock] == INVALID_SOCKET ) {
return NET_AGAIN;
@@ -536,7 +545,7 @@ neterr_t NET_SendPacket( netsrc_t sock, const netadr_t *to, unsigned length, con
}
// intentional fallthrough
default:
- Com_EPrintf( "NET_SendPacket: %s to %s\n",
+ Com_EPrintf( "%s: %s to %s\n", __func__,
NET_ErrorString(), NET_AdrToString( to ) );
break;
}
@@ -554,7 +563,7 @@ neterr_t NET_SendPacket( netsrc_t sock, const netadr_t *to, unsigned length, con
}
break;
default:
- Com_EPrintf( "NET_SendPacket: %s to %s\n",
+ Com_EPrintf( "%s: %s to %s\n", __func__,
NET_ErrorString(), NET_AdrToString( to ) );
break;
}
@@ -563,7 +572,7 @@ neterr_t NET_SendPacket( netsrc_t sock, const netadr_t *to, unsigned length, con
}
if( ret != length ) {
- Com_WPrintf( "NET_SendPacket: short send to %s\n",
+ Com_WPrintf( "%s: short send to %s\n", __func__,
NET_AdrToString( to ) );
}
@@ -585,80 +594,24 @@ const char *NET_ErrorString( void ) {
return "NO ERROR";
default:
return "UNKNOWN ERROR";
-
-#define MAPERR( x ) case x: return #x;
-
- MAPERR( WSAEINTR )
- MAPERR( WSAEBADF )
- MAPERR( WSAEACCES )
- MAPERR( WSAEFAULT )
- MAPERR( WSAEINVAL )
- MAPERR( WSAEMFILE )
- MAPERR( WSAEWOULDBLOCK )
- MAPERR( WSAEINPROGRESS )
- MAPERR( WSAEALREADY )
- MAPERR( WSAENOTSOCK )
- MAPERR( WSAEDESTADDRREQ )
- MAPERR( WSAEMSGSIZE )
- MAPERR( WSAEPROTOTYPE )
- MAPERR( WSAENOPROTOOPT )
- MAPERR( WSAEPROTONOSUPPORT )
- MAPERR( WSAESOCKTNOSUPPORT )
- MAPERR( WSAEOPNOTSUPP )
- MAPERR( WSAEPFNOSUPPORT )
- MAPERR( WSAEAFNOSUPPORT )
- MAPERR( WSAEADDRINUSE )
- MAPERR( WSAEADDRNOTAVAIL )
- MAPERR( WSAENETDOWN )
- MAPERR( WSAENETUNREACH )
- MAPERR( WSAENETRESET )
- MAPERR( WSAECONNABORTED )
- MAPERR( WSAECONNRESET )
- MAPERR( WSAENOBUFS )
- MAPERR( WSAEISCONN )
- MAPERR( WSAENOTCONN )
- MAPERR( WSAESHUTDOWN )
- MAPERR( WSAETOOMANYREFS )
- MAPERR( WSAETIMEDOUT )
- MAPERR( WSAECONNREFUSED )
- MAPERR( WSAELOOP )
- MAPERR( WSAENAMETOOLONG )
- MAPERR( WSAEHOSTDOWN )
- MAPERR( WSAEHOSTUNREACH )
- MAPERR( WSAENOTEMPTY )
- MAPERR( WSAEPROCLIM )
- MAPERR( WSAEUSERS )
- MAPERR( WSAEDQUOT )
- MAPERR( WSAESTALE )
- MAPERR( WSAEREMOTE )
- MAPERR( WSASYSNOTREADY )
- MAPERR( WSAVERNOTSUPPORTED )
- MAPERR( WSANOTINITIALISED )
- MAPERR( WSAEDISCON )
- MAPERR( WSAENOMORE )
- MAPERR( WSAECANCELLED )
- MAPERR( WSAEINVALIDPROCTABLE )
- MAPERR( WSAEINVALIDPROVIDER )
- MAPERR( WSAEPROVIDERFAILEDINIT )
- MAPERR( WSASYSCALLFAILURE )
- MAPERR( WSASERVICE_NOT_FOUND )
- MAPERR( WSATYPE_NOT_FOUND )
- MAPERR( WSA_E_NO_MORE )
- MAPERR( WSA_E_CANCELLED )
- MAPERR( WSAEREFUSED )
- MAPERR( WSAHOST_NOT_FOUND )
- MAPERR( WSATRY_AGAIN )
- MAPERR( WSANO_RECOVERY )
- MAPERR( WSANO_DATA )
- }
-
-#undef MAPERR
-
+#include "wsaerr.h"
+ }
#else
return strerror( net_error );
#endif
}
+static qboolean NET_StringToIface( const char *s, struct sockaddr_in *sadr ) {
+ if( !Q_stricmp( s, "localhost" ) ) {
+ // FIXME: this use of `localhost' is misleading
+ memset( sadr, 0, sizeof( *sadr ) );
+ sadr->sin_family = AF_INET;
+ sadr->sin_addr.s_addr = INADDR_ANY;
+ return qtrue;
+ }
+ return NET_StringToSockaddr( s, sadr );
+}
+
static SOCKET UDP_OpenSocket( const char *interface, int port ) {
SOCKET newsocket;
struct sockaddr_in address;
@@ -689,15 +642,9 @@ static SOCKET UDP_OpenSocket( const char *interface, int port ) {
goto fail;
}
- if( !Q_stricmp( interface, "localhost" ) ) {
- memset( &address, 0, sizeof( address ) );
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = INADDR_ANY;
- } else {
- if( !NET_StringToSockaddr( interface, &address ) ) {
- Com_Printf( "Bad interface address: %s\n", interface );
- goto fail;
- }
+ if( !NET_StringToIface( interface, &address ) ) {
+ Com_Printf( "Bad interface address: %s\n", interface );
+ goto fail;
}
if( port != PORT_ANY ) {
@@ -736,15 +683,9 @@ static SOCKET TCP_OpenSocket( const char *interface, int port ) {
goto fail;
}
- if( !Q_stricmp( interface, "localhost" ) ) {
- memset( &address, 0, sizeof( address ) );
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = INADDR_ANY;
- } else {
- if( !NET_StringToSockaddr( interface, &address ) ) {
- Com_Printf( "Bad interface address: %s\n", interface );
- goto fail;
- }
+ if( !NET_StringToIface( interface, &address ) ) {
+ Com_Printf( "Bad interface address: %s\n", interface );
+ goto fail;
}
if( port != PORT_ANY ) {
address.sin_port = htons( ( u_short )port );
@@ -1077,10 +1018,6 @@ void NET_Sleep( int msec ) {
FD_ZERO( &fdset );
FD_SET( s, &fdset );
select( s + 1, &fdset, NULL, NULL, &timeout );
- /*msec = timeout.tv_sec * 1000 + timeout.tv_usec / 1000;
- if(msec){
- Com_Printf( "%d msec not slept\n",msec);
- }*/
}
//===================================================================
@@ -1096,18 +1033,15 @@ static void NET_DumpHostInfo( struct hostent *h ) {
Com_Printf( "Hostname: %s\n", h->h_name );
- list = (byte **)h->h_aliases;
- for( i=0 ; list[i] ; 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 : %d.%d.%d.%d\n",
- list[i][0] & 255,
- list[i][1] & 255,
- list[i][2] & 255,
- list[i][3] & 255 );
+ 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] );
}
}
@@ -1125,12 +1059,12 @@ static void NET_ShowIP_f( void ) {
netsrc_t sock;
if( gethostname( buffer, sizeof( buffer ) ) == -1 ) {
- Com_WPrintf( "Couldn't get machine hostname\n" );
+ Com_EPrintf( "%s: gethostname: %s\n", __func__, NET_ErrorString() );
return;
}
if( !( h = gethostbyname( buffer ) ) ) {
- Com_WPrintf( "Couldn't get machine hostname\n" );
+ Com_EPrintf( "%s: gethostbyname: %s\n", __func__, NET_ErrorString() );
return;
}
@@ -1171,7 +1105,7 @@ static void NET_Dns_f( void ) {
}
if( ( address = inet_addr( buffer ) ) != INADDR_NONE ) {
- h = gethostbyaddr( (const char *)&address, sizeof( address ), AF_INET );
+ h = gethostbyaddr( ( const char * )&address, sizeof( address ), AF_INET );
} else {
h = gethostbyname( buffer );
}
diff --git a/source/wsaerr.h b/source/wsaerr.h
new file mode 100644
index 0000000..5032a33
--- /dev/null
+++ b/source/wsaerr.h
@@ -0,0 +1,86 @@
+/*
+Copyright (C) 1997-2001 Id Software, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+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.
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#define MAPERR( x ) case x: return #x;
+
+ MAPERR( WSAEINTR )
+ MAPERR( WSAEBADF )
+ MAPERR( WSAEACCES )
+ MAPERR( WSAEFAULT )
+ MAPERR( WSAEINVAL )
+ MAPERR( WSAEMFILE )
+ MAPERR( WSAEWOULDBLOCK )
+ MAPERR( WSAEINPROGRESS )
+ MAPERR( WSAEALREADY )
+ MAPERR( WSAENOTSOCK )
+ MAPERR( WSAEDESTADDRREQ )
+ MAPERR( WSAEMSGSIZE )
+ MAPERR( WSAEPROTOTYPE )
+ MAPERR( WSAENOPROTOOPT )
+ MAPERR( WSAEPROTONOSUPPORT )
+ MAPERR( WSAESOCKTNOSUPPORT )
+ MAPERR( WSAEOPNOTSUPP )
+ MAPERR( WSAEPFNOSUPPORT )
+ MAPERR( WSAEAFNOSUPPORT )
+ MAPERR( WSAEADDRINUSE )
+ MAPERR( WSAEADDRNOTAVAIL )
+ MAPERR( WSAENETDOWN )
+ MAPERR( WSAENETUNREACH )
+ MAPERR( WSAENETRESET )
+ MAPERR( WSAECONNABORTED )
+ MAPERR( WSAECONNRESET )
+ MAPERR( WSAENOBUFS )
+ MAPERR( WSAEISCONN )
+ MAPERR( WSAENOTCONN )
+ MAPERR( WSAESHUTDOWN )
+ MAPERR( WSAETOOMANYREFS )
+ MAPERR( WSAETIMEDOUT )
+ MAPERR( WSAECONNREFUSED )
+ MAPERR( WSAELOOP )
+ MAPERR( WSAENAMETOOLONG )
+ MAPERR( WSAEHOSTDOWN )
+ MAPERR( WSAEHOSTUNREACH )
+ MAPERR( WSAENOTEMPTY )
+ MAPERR( WSAEPROCLIM )
+ MAPERR( WSAEUSERS )
+ MAPERR( WSAEDQUOT )
+ MAPERR( WSAESTALE )
+ MAPERR( WSAEREMOTE )
+ MAPERR( WSASYSNOTREADY )
+ MAPERR( WSAVERNOTSUPPORTED )
+ MAPERR( WSANOTINITIALISED )
+ MAPERR( WSAEDISCON )
+ MAPERR( WSAENOMORE )
+ MAPERR( WSAECANCELLED )
+ MAPERR( WSAEINVALIDPROCTABLE )
+ MAPERR( WSAEINVALIDPROVIDER )
+ MAPERR( WSAEPROVIDERFAILEDINIT )
+ MAPERR( WSASYSCALLFAILURE )
+ MAPERR( WSASERVICE_NOT_FOUND )
+ MAPERR( WSATYPE_NOT_FOUND )
+ MAPERR( WSA_E_NO_MORE )
+ MAPERR( WSA_E_CANCELLED )
+ MAPERR( WSAEREFUSED )
+ MAPERR( WSAHOST_NOT_FOUND )
+ MAPERR( WSATRY_AGAIN )
+ MAPERR( WSANO_RECOVERY )
+ MAPERR( WSANO_DATA )
+
+#undef MAPERR