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/net | |
| 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/net')
| -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 |
4 files changed, 50 insertions, 25 deletions
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); |