summaryrefslogtreecommitdiff
path: root/src/net/udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/udp.c')
-rw-r--r--src/net/udp.c166
1 files changed, 40 insertions, 126 deletions
diff --git a/src/net/udp.c b/src/net/udp.c
index b13fa1f..2cf8626 100644
--- a/src/net/udp.c
+++ b/src/net/udp.c
@@ -1,38 +1,38 @@
-
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#ifndef __WIN32__
-# include <sys/socket.h>
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <arpa/inet.h>
-# include <netdb.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
#else
-# include <windows.h>
-# include <wininet.h>
+#include <windows.h>
+#include <wininet.h>
#endif
#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
#include <assert.h>
#include <fcntl.h>
-
-#define BUFSIZE 1000
-
#include "main.h"
#include "net_multiplayer.h"
#include "udp.h"
#include "dns.h"
+#define BUFSIZE 1000
+
static int getProto(char *str)
{
- if( strstr(str, ".") != NULL )return PROTO_UDPv4;
- if( strstr(str, ":") != NULL )return PROTO_UDPv6;
+ if (strstr(str, ".") != NULL)
+ return PROTO_UDPv4;
+ if (strstr(str, ":") != NULL)
+ return PROTO_UDPv6;
- assert( ! "Protocol not detected !" );
+ assert(!_("[Error] Network protocol not detected"));
return -1;
}
@@ -55,7 +55,7 @@ void sock_udp_destroy(sock_udp_t *p)
sock_udp_t *sock_udp_bind(char *address, int port)
{
sock_udp_t *new;
- int res = -1; // no warninng
+ ret = -1; /* no warnings */
assert(port > 0 && port < 65535);
@@ -67,7 +67,6 @@ sock_udp_t *sock_udp_bind(char *address, int port)
if (new->proto == PROTO_UDPv4) {
new->sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
}
-
#ifdef SUPPORT_IPv6
if (new->proto == PROTO_UDPv6) {
new->sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
@@ -75,7 +74,7 @@ sock_udp_t *sock_udp_bind(char *address, int port)
#endif
if (new->sock < 0) {
- fprintf(stderr, _("Unable to create socket when binding!\n"));
+ fprintf(stderr, _("[Error] Unable to create UDP socket\n"));
sock_udp_destroy(new);
#ifdef __WIN32__
WSACleanup();
@@ -103,7 +102,7 @@ sock_udp_t *sock_udp_bind(char *address, int port)
#endif
if (res < 0) {
- fprintf(stderr, _("Unable to set socket %s %d!\n"), address, port);
+ fprintf(stderr, _("[Error] Unable to bind UDP socket to [%s]:%d\n"), address, port);
sock_udp_destroy(new);
#ifdef __WIN32__
WSACleanup();
@@ -129,7 +128,6 @@ sock_udp_t *sock_udp_connect(char *address, int port)
if (new->proto == PROTO_UDPv4) {
new->sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
}
-
#ifdef SUPPORT_IPv6
if (new->proto == PROTO_UDPv6) {
new->sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
@@ -137,7 +135,7 @@ sock_udp_t *sock_udp_connect(char *address, int port)
#endif
if (new->sock < 0) {
- fprintf(stderr, _("Unable to create socket when connecting!\n"));
+ fprintf(stderr, _("[Error] Unable to create UDP socket for connecting\n"));
sock_udp_destroy(new);
#ifdef __WIN32__
WSACleanup();
@@ -145,10 +143,11 @@ sock_udp_t *sock_udp_connect(char *address, int port)
return NULL;
}
- char *domain = gns_resolv (address);
+ char *domain = gns_resolv(address);
- if (domain)
+ if (domain) {
address = domain;
+ }
memset(&(new->sockAddr), 0, sizeof(new->sockAddr));
@@ -164,15 +163,16 @@ sock_udp_t *sock_udp_connect(char *address, int port)
inet_pton(AF_INET6, address, &(new->sockAddr6.sin6_addr));
}
#endif
- if (domain)
- free (domain);
+ if (domain) {
+ free(domain);
+ }
return new;
}
int sock_udp_set_non_block(sock_udp_t *p)
{
- /* Set to nonblocking socket mode */
+ /* set to nonblocking socket mode */
#ifndef __WIN32__
int oldFlag;
@@ -183,7 +183,7 @@ int sock_udp_set_non_block(sock_udp_t *p)
}
#else
unsigned long arg = 1;
- // Operation is FIONBIO. Parameter is pointer on non-zero number.
+ /* operation is FIONBIO; parameter is a pointer on non-zero number */
if (ioctlsocket(p->sock, FIONBIO, &arg) == SOCKET_ERROR) {
WSACleanup();
return -1;
@@ -195,7 +195,7 @@ int sock_udp_set_non_block(sock_udp_t *p)
int sock_udp_read(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
{
int addrlen;
- int size = -1; // no warninng
+ int size = -1; /* no warnings */
assert(src != NULL);
assert(dst != NULL);
@@ -205,23 +205,16 @@ int sock_udp_read(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
addrlen = sizeof(src->sockAddr);
#ifndef __WIN32
- size = recvfrom(src->sock, address, len, 0,
- (struct sockaddr *) &dst->sockAddr,
- (socklen_t *) & addrlen);
+ size = recvfrom(src->sock, address, len, 0, (struct sockaddr *) &dst->sockAddr, (socklen_t *) &addrlen);
#else
- size =
- recvfrom(src->sock, address, len, 0,
- (struct sockaddr *) &dst->sockAddr, (int *) &addrlen);
+ size = recvfrom(src->sock, address, len, 0, (struct sockaddr *) &dst->sockAddr, (int *) &addrlen);
#endif
}
-
#ifdef SUPPORT_IPv6
if (src->proto == PROTO_UDPv6) {
addrlen = sizeof(src->sockAddr6);
- size = recvfrom(src->sock, address, len, 0,
- (struct sockaddr *) &dst->sockAddr6,
- (socklen_t *) & addrlen);
+ size = recvfrom(src->sock, address, len, 0, (struct sockaddr *) &dst->sockAddr6, (socklen_t *) &addrlen);
}
#endif
@@ -233,8 +226,7 @@ int sock_udp_read(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
sock_udp_get_ip(dst, str_ip, STR_IP_SIZE);
- fprintf(stderr, _("Unable to read form socket %d %s %d!\n"), size,
- str_ip, sock_udp_get_port(dst));
+ fprintf(stderr, _("[Error] Unable to read from UDP socket [%s]:%d (read %d bytes)\n"), str_ip, sock_udp_get_port(dst), size);
#ifdef __WIN32__
WSACleanup();
@@ -248,7 +240,7 @@ int sock_udp_read(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
int sock_udp_write(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
{
int addrlen;
- int size = -1; // no warninng
+ int size = -1; /* no warnings */
assert(src != NULL);
assert(dst != NULL);
@@ -257,15 +249,13 @@ int sock_udp_write(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
if (src->proto == PROTO_UDPv4) {
addrlen = sizeof(src->sockAddr);
- size = sendto(src->sock, address, len, 0,
- (struct sockaddr *) &dst->sockAddr, addrlen);
+ size = sendto(src->sock, address, len, 0, (struct sockaddr *) &dst->sockAddr, addrlen);
}
#ifdef SUPPORT_IPv6
if (src->proto == PROTO_UDPv6) {
addrlen = sizeof(src->sockAddr6);
- size = sendto(src->sock, address, len, 0,
- (struct sockaddr *) &dst->sockAddr6, addrlen);
+ size = sendto(src->sock, address, len, 0, (struct sockaddr *) &dst->sockAddr6, addrlen);
}
#endif
@@ -274,10 +264,8 @@ int sock_udp_write(sock_udp_t *src, sock_udp_t *dst, void *address, int len)
sock_udp_get_ip(dst, str_ip, STR_IP_SIZE);
- fprintf(stderr, _("Unable to write on socket %d %s %d %d!\n"), size,
- str_ip, sock_udp_get_port(dst), dst->proto);
+ fprintf(stderr, _("[Error] Unable to write to socket [%s]:%d with protocol %d (written %d bytes)\n"), str_ip, sock_udp_get_port(dst), dst->proto, size);
- //assert(0);
#ifdef __WIN32__
WSACleanup();
#endif
@@ -298,7 +286,6 @@ void sock_udp_get_ip(sock_udp_t *p, char *str_ip, int len)
inet_ntop(AF_INET, &(p->sockAddr.sin_addr), str_ip, len);
#else
strcpy(str_ip, inet_ntoa(p->sockAddr.sin_addr));
- //printf("strcpy(str_ip, inet_ntoa(p->sockAddr.sin_addr));\n");
#endif
}
#ifdef SUPPORT_IPv6
@@ -321,12 +308,11 @@ int sock_udp_get_port(sock_udp_t *p)
}
#endif
- assert(!_("Bad IP proto!"));
+ assert(!_("[Error] Bad IP protocol"));
return -1;
}
-
void sock_udp_close(sock_udp_t *p)
{
assert(p != NULL);
@@ -335,79 +321,7 @@ void sock_udp_close(sock_udp_t *p)
close(p->sock);
#else
closesocket(p->sock);
- //WSACleanup(); //kdyz ukoncime socket dobre neni treba cleanup
+ /*WSACleanup(); -- when the socket is closed correctly, it is not needed to do a cleanup */
#endif
sock_udp_destroy(p);
}
-
-#if 0
-
-static int myWait(sock_udp_t *p)
-{
- fd_set readfds;
- fd_set errorfds;
- struct timeval tv;
- int max_fd;
-
- tv.tv_sec = 1;
- tv.tv_usec = 0;
-
- FD_ZERO(&readfds);
- FD_ZERO(&errorfds);
- max_fd = p->sock;
-
- FD_SET(p->sock, &readfds);
- FD_SET(p->sock, &errorfds);
-
- select(max_fd + 1, &readfds, (fd_set *) 0, &errorfds, &tv);
-
- if (FD_ISSET(p->sock, &readfds)) {
- FD_CLR(p->sock, &readfds);
- return 1;
- }
-
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- sock_udp_t *sock;
- char buf[BUFSIZE];
- int ret;
-
- if (strcmp(argv[1], "s") == 0) {
- sock_udp_t *cli;
-
- //sock = sock_udp_bind("::1", atoi(argv[2]), PROTO_UDPv6 );
- sock = sock_udp_bind("127.0.0.1", atoi(argv[2]), PROTO_UDPv4);
-
- //cli = sock_udp_new(PROTO_UDPv6);
- cli = sock_udp_new(PROTO_UDPv4);
-
- while (1) {
- while (myWait(sock) == 0);
-
- memset(buf, 0, BUFSIZE);
- ret = sock_udp_read(sock, cli, buf, BUFSIZE);
- sock_udp_write(sock, cli, buf, ret);
- }
- }
-
- if (strcmp(argv[1], "c") == 0) {
- //sock = sock_udp_connect("::1", atoi(argv[2]), PROTO_UDPv6);
- sock = sock_udp_connect("127.0.0.1", atoi(argv[2]), PROTO_UDPv4);
-
- strcpy(buf, "Hello world !\n");
- sock_udp_write(sock, sock, buf, strlen(buf));
-
- memset(buf, 0, BUFSIZE);
- sock_udp_read(sock, sock, buf, BUFSIZE);
-
- printf("buf = %s", buf);
- //while(1)sleep(1);
- sock_udp_close(sock);
- }
-
- return 0;
-}
-#endif