diff options
| author | Dusan Durech <dusan@debian.debian> | 2009-03-01 18:09:11 +0100 |
|---|---|---|
| committer | Dusan Durech <dusan@debian.debian> | 2009-03-01 18:09:11 +0100 |
| commit | b21832e8d922351169ab4d06e7993ed401fe0924 (patch) | |
| tree | 882f8d3deb61ea8a4586a06c9c5cb5f2e8206054 /src | |
| parent | 0fe84801e04022b1c92de363ec907fa6dd63bfd2 (diff) | |
API to UDP and TCP has been modified so that they can be used independet from protocols IPv4 and IPv6
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/downServer.c | 2 | ||||
| -rw-r--r-- | src/base/net_multiplayer.c | 2 | ||||
| -rw-r--r-- | src/base/server.c | 10 | ||||
| -rw-r--r-- | src/base/udp_server.c | 6 | ||||
| -rw-r--r-- | src/client/client.c | 8 | ||||
| -rw-r--r-- | src/client/client.h | 2 | ||||
| -rw-r--r-- | src/net/tcp.c | 25 | ||||
| -rw-r--r-- | src/net/tcp.h | 6 | ||||
| -rw-r--r-- | src/net/udp.c | 38 | ||||
| -rw-r--r-- | src/net/udp.h | 6 | ||||
| -rw-r--r-- | src/screen/screen_downArena.c | 6 |
11 files changed, 72 insertions, 39 deletions
diff --git a/src/base/downServer.c b/src/base/downServer.c index 3781ad9..46307cb 100644 --- a/src/base/downServer.c +++ b/src/base/downServer.c @@ -127,7 +127,7 @@ static void destroyClient(client_ds_t *client) int initDownServer(char *ip4, int port4) { - sock_server_tcp = bindTcpSocket(ip4, port4, PROTO_TCPv4); + sock_server_tcp = bindTcpSocket(ip4, port4); if( sock_server_tcp == NULL ) { diff --git a/src/base/net_multiplayer.c b/src/base/net_multiplayer.c index f59b3b2..198abe7 100644 --- a/src/base/net_multiplayer.c +++ b/src/base/net_multiplayer.c @@ -71,7 +71,7 @@ int initNetMuliplayer(int type, char *ip, int port, int proto) #ifndef PUBLIC_SERVER case NET_GAME_TYPE_CLIENT: - if (initClient(ip, port, proto) != 0) { + if (initClient(ip, port) != 0) { fprintf(stderr, _("Unable to inicialize network game as client!\n")); netGameType = NET_GAME_TYPE_NONE; return -1; diff --git a/src/base/server.c b/src/base/server.c index 2112927..6471b46 100644 --- a/src/base/server.c +++ b/src/base/server.c @@ -238,13 +238,21 @@ int initServer(char *ip4, int port4, char *ip6, int port6) setServerMaxClients(SERVER_MAX_CLIENTS); setServerTimer(); + //printf("%s %d %s %d\n", ip4, port4, ip6, port6); ret = initUdpServer(ip4, port4, ip6, port6); if (ret == 0) { return -1; } - initDownServer(ip4, port4); + if( ip4 != NULL ) + { + initDownServer(ip4, port4); + } + else if( ip6 != NULL ) + { + initDownServer(ip6, port6); + } return ret; } diff --git a/src/base/udp_server.c b/src/base/udp_server.c index a469a3a..0e211f3 100644 --- a/src/base/udp_server.c +++ b/src/base/udp_server.c @@ -93,7 +93,7 @@ int initUdpServer(char *ip4, int port4, char *ip6, int port6) ret = 0; if (ip4 != NULL) { - sock_server_udp = bindUdpSocket(ip4, port4, PROTO_UDPv4); + sock_server_udp = bindUdpSocket(ip4, port4); if (sock_server_udp != NULL) { ret++; @@ -104,7 +104,7 @@ int initUdpServer(char *ip4, int port4, char *ip6, int port6) } if (ip6 != NULL) { - sock_server_udp_second = bindUdpSocket(ip6, port6, PROTO_UDPv6); + sock_server_udp_second = bindUdpSocket(ip6, port6); if (sock_server_udp_second != NULL) { ret++; @@ -163,7 +163,7 @@ static void eventClientUdpSelect(sock_udp_t * sock_server) assert(sock_server != NULL); - sock_client = newSockUdp(sock_server->proto); + sock_client = newSockUdp(); isCreateNewClient = FALSE; memset(listRecvMsg, 0, STR_SIZE); diff --git a/src/client/client.c b/src/client/client.c index e92a238..74d6b0a 100644 --- a/src/client/client.c +++ b/src/client/client.c @@ -88,9 +88,9 @@ static proto_cmd_client_t *findCmdProto(char *msg) return NULL; } -static int initUdpClient(char *ip, int port, int proto) +static int initUdpClient(char *ip, int port) { - sock_server_udp = connectUdpSocket(ip, port, proto); + sock_server_udp = connectUdpSocket(ip, port); if (sock_server_udp == NULL) { return -1; @@ -101,7 +101,7 @@ static int initUdpClient(char *ip, int port, int proto) return 0; } -int initClient(char *ip, int port, int proto) +int initClient(char *ip, int port) { char name[STR_NAME_SIZE]; int ret; @@ -119,7 +119,7 @@ int initClient(char *ip, int port, int proto) clientRecvBuffer = newBuffer(CLIENT_BUFFER_LIMIT); clientSendBuffer = newBuffer(CLIENT_BUFFER_LIMIT); - ret = initUdpClient(ip, port, proto); + ret = initUdpClient(ip, port); if (ret < 0) { return -1; diff --git a/src/client/client.h b/src/client/client.h index 6795c92..8ff0d3d 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -11,7 +11,7 @@ # define CLIENT_BUFFER_LIMIT 4096 -extern int initClient(char *ip, int port, int proto); +extern int initClient(char *ip, int port); extern void sendServer(char *msg); extern void eventClient(); extern void quitClient(); diff --git a/src/net/tcp.c b/src/net/tcp.c index d8a40d8..c52e467 100644 --- a/src/net/tcp.c +++ b/src/net/tcp.c @@ -21,13 +21,12 @@ #include "tcp.h" -sock_tcp_t *newSockTcp(int proto) +sock_tcp_t *newSockTcp(void) { sock_tcp_t *new; new = malloc(sizeof(sock_tcp_t)); memset(new, 0, sizeof(sock_tcp_t)); - new->proto = proto; return new; } @@ -38,7 +37,16 @@ void destroySockTcp(sock_tcp_t * p) free(p); } -sock_tcp_t *bindTcpSocket(char *address, int port, int proto) +static int getProto(char *str) +{ + if( strstr(str, ".") != NULL )return PROTO_TCPv4; + if( strstr(str, ":") != NULL )return PROTO_TCPv6; + + assert( ! "Protocol not detected !" ); + return -1; +} + +sock_tcp_t *bindTcpSocket(char *address, int port) { sock_tcp_t *new; unsigned long param_setsock = 1; @@ -47,7 +55,8 @@ sock_tcp_t *bindTcpSocket(char *address, int port, int proto) assert(port > 0 && port < 65535); - new = newSockTcp(proto); + new = newSockTcp(); + new->proto = getProto(address); ret = -1; // no Warnings assert(new != NULL); @@ -110,7 +119,8 @@ sock_tcp_t *getTcpNewClient(sock_tcp_t * p) assert(p != NULL); assert(p->sock >= 0); - new = newSockTcp(p->proto); + new = newSockTcp(); + new->proto = p->proto; if (new->proto == PROTO_TCPv4) { client_len = sizeof(new->sockAddr); @@ -170,7 +180,7 @@ int getSockTcpPort(sock_tcp_t * p) return -1; } -sock_tcp_t *connectTcpSocket(char *ip, int port, int proto) +sock_tcp_t *connectTcpSocket(char *ip, int port) { sock_tcp_t *new; int len; @@ -179,7 +189,8 @@ sock_tcp_t *connectTcpSocket(char *ip, int port, int proto) assert(ip != NULL); assert(port > 0 && port < 65535); - new = newSockTcp(proto); + new = newSockTcp(); + new->proto = getProto(ip); ret = -1; // no Warnnings if (new->proto == PROTO_TCPv4) { diff --git a/src/net/tcp.h b/src/net/tcp.h index 88b2c4e..4a3b326 100644 --- a/src/net/tcp.h +++ b/src/net/tcp.h @@ -23,13 +23,13 @@ typedef struct struct_sock_tcp_t { # endif } sock_tcp_t; -extern sock_tcp_t *newSockTcp(int proto); +extern sock_tcp_t *newSockTcp(void); extern void destroySockTcp(sock_tcp_t * p); -extern sock_tcp_t *bindTcpSocket(char *addresss, int port, int proto); +extern sock_tcp_t *bindTcpSocket(char *addresss, int port); extern sock_tcp_t *getTcpNewClient(sock_tcp_t * p); extern void getSockTcpIp(sock_tcp_t * p, char *str_ip, int len); extern int getSockTcpPort(sock_tcp_t * p); -extern sock_tcp_t *connectTcpSocket(char *ip, int port, int proto); +extern sock_tcp_t *connectTcpSocket(char *ip, int port); extern int disableNagle(sock_tcp_t * p); extern int setTcpSockNonBlock(sock_tcp_t * p); extern int readTcpSocket(sock_tcp_t * p, void *address, int len); diff --git a/src/net/udp.c b/src/net/udp.c index 68e943f..6f5a701 100644 --- a/src/net/udp.c +++ b/src/net/udp.c @@ -26,13 +26,21 @@ #include "udp.h" -sock_udp_t *newSockUdp(int proto) +static int getProto(char *str) +{ + if( strstr(str, ".") != NULL )return PROTO_UDPv4; + if( strstr(str, ":") != NULL )return PROTO_UDPv6; + + assert( ! "Protocol not detected !" ); + return -1; +} + +sock_udp_t *newSockUdp(void) { sock_udp_t *new; new = malloc(sizeof(sock_udp_t)); memset(new, 0, sizeof(sock_udp_t)); - new->proto = proto; return new; } @@ -43,14 +51,15 @@ void destroySockUdp(sock_udp_t * p) free(p); } -sock_udp_t *bindUdpSocket(char *address, int port, int proto) +sock_udp_t *bindUdpSocket(char *address, int port) { sock_udp_t *new; int res = -1; // no warninng assert(port > 0 && port < 65535); - new = newSockUdp(proto); + new = newSockUdp(); + new->proto = getProto(address); assert(new != NULL); @@ -104,14 +113,15 @@ sock_udp_t *bindUdpSocket(char *address, int port, int proto) return new; } -sock_udp_t *connectUdpSocket(char *address, int port, int proto) +sock_udp_t *connectUdpSocket(char *address, int port) { sock_udp_t *new; assert(address != NULL); assert(port > 0 && port < 65536); - new = newSockUdp(proto); + new = newSockUdp(); + new->proto = getProto(address); assert(new != NULL); @@ -182,7 +192,7 @@ int readUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len) assert(dst != NULL); assert(address != NULL); - if (dst->proto == PROTO_UDPv4) { + if (src->proto == PROTO_UDPv4) { addrlen = sizeof(src->sockAddr); #ifndef __WIN32 @@ -197,7 +207,7 @@ int readUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len) } #ifdef SUPPORT_IPv6 - if (dst->proto == PROTO_UDPv6) { + if (src->proto == PROTO_UDPv6) { addrlen = sizeof(src->sockAddr6); size = recvfrom(src->sock, address, len, 0, @@ -207,6 +217,7 @@ int readUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len) #endif dst->sock = src->sock; + dst->proto = src->proto; if (size < 0) { char str_ip[STR_IP_SIZE]; @@ -215,6 +226,7 @@ int readUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len) fprintf(stderr, _("Unable to read form socket %d %s %d!\n"), size, str_ip, getSockUdpPort(dst)); + #ifdef __WIN32__ WSACleanup(); #endif @@ -233,14 +245,14 @@ int writeUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len) assert(dst != NULL); assert(address != NULL); - if (dst->proto == PROTO_UDPv4) { + if (src->proto == PROTO_UDPv4) { addrlen = sizeof(src->sockAddr); size = sendto(src->sock, address, len, 0, (struct sockaddr *) &dst->sockAddr, addrlen); } #ifdef SUPPORT_IPv6 - if (dst->proto == PROTO_UDPv6) { + if (src->proto == PROTO_UDPv6) { addrlen = sizeof(src->sockAddr6); size = sendto(src->sock, address, len, 0, @@ -253,8 +265,10 @@ int writeUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len) getSockUdpIp(dst, str_ip, STR_IP_SIZE); - fprintf(stderr, _("Unable to write on socket %d %s %d!\n"), size, - str_ip, getSockUdpPort(dst)); + fprintf(stderr, _("Unable to write on socket %d %s %d %d!\n"), size, + str_ip, getSockUdpPort(dst), dst->proto); + + //assert(0); #ifdef __WIN32__ WSACleanup(); #endif diff --git a/src/net/udp.h b/src/net/udp.h index 97541c6..c203323 100644 --- a/src/net/udp.h +++ b/src/net/udp.h @@ -28,10 +28,10 @@ typedef struct struct_sock_udp_t { struct sockaddr_in sockAddr; } sock_udp_t; -extern sock_udp_t *newSockUdp(int proto); +extern sock_udp_t *newSockUdp(void); extern void destroySockUdp(sock_udp_t * p); -extern sock_udp_t *bindUdpSocket(char *address, int port, int proto); -extern sock_udp_t *connectUdpSocket(char *address, int port, int proto); +extern sock_udp_t *bindUdpSocket(char *address, int port); +extern sock_udp_t *connectUdpSocket(char *address, int port); extern int setUdpSockNonBlock(sock_udp_t * p); extern int readUdpSocket(sock_udp_t * src, sock_udp_t * dst, void *address, int len); diff --git a/src/screen/screen_downArena.c b/src/screen/screen_downArena.c index 94b2387..d26621b 100644 --- a/src/screen/screen_downArena.c +++ b/src/screen/screen_downArena.c @@ -52,7 +52,7 @@ static int countSendMsg; static void setStatusString(char *s) { - //printf("status -> %s\n", s); + printf("status -> %s\n", s); destroyWidgetLabel(label_status); label_status = newWidgetLabel(s, WINDOW_SIZE_X / 2, 250, WIDGET_LABEL_CENTER); } @@ -62,7 +62,7 @@ static void connectToDownServer() char status[STR_SIZE]; char msg[STR_PROTO_SIZE]; - sock_server_tcp = connectTcpSocket(getSettingIP(), getSettingPort(), PROTO_TCPv4); + sock_server_tcp = connectTcpSocket(getSettingIP(), getSettingPort()); if( sock_server_tcp == NULL ) { @@ -130,7 +130,7 @@ void startScreenDownArena() strcpy(str_status, "none"); memset(arenaNetName, 0, STR_SIZE); - sock_server_udp = connectUdpSocket(getSettingIP(), getSettingPort(), PROTO_UDPv4); + sock_server_udp = connectUdpSocket(getSettingIP(), getSettingPort()); if (sock_server_udp == NULL) { |