diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-08-17 07:05:16 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-08-17 07:05:16 +0000 |
| commit | 16912026dbdd7dc9e238492d9d83e37270ae4f06 (patch) | |
| tree | 5250ca25f847735b55cd293e9b632339503bae4a /src/base | |
| parent | d1282138cd8a61442843c26b54c3f9259f4bf098 (diff) | |
| download | zcatch-16912026dbdd7dc9e238492d9d83e37270ae4f06.tar.gz zcatch-16912026dbdd7dc9e238492d9d83e37270ae4f06.zip | |
added cl_layershot. fixed some bugs in the network
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/system.c | 25 | ||||
| -rw-r--r-- | src/base/system.h | 2 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/base/system.c b/src/base/system.c index 1ac5f296..bb23a5e5 100644 --- a/src/base/system.c +++ b/src/base/system.c @@ -479,6 +479,7 @@ static void sockaddr_to_netaddr(const struct sockaddr *src, NETADDR *dst) { /* TODO: IPv6 support */ unsigned int ip = htonl(((struct sockaddr_in*)src)->sin_addr.s_addr); + mem_zero(dst, sizeof(NETADDR)); dst->type = NETTYPE_IPV4; dst->port = htons(((struct sockaddr_in*)src)->sin_port); dst->ip[0] = (unsigned char)((ip>>24)&0xFF); @@ -492,6 +493,21 @@ int net_addr_comp(const NETADDR *a, const NETADDR *b) return mem_comp(a, b, sizeof(NETADDR)); } +void net_addr_str(const NETADDR *addr, char *string, int max_length) +{ + if(addr->type == NETTYPE_IPV4) + str_format(string, max_length, "%d.%d.%d.%d:%d", addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3], addr->port); + else if(addr->type == NETTYPE_IPV6) + { + str_format(string, max_length, "[%x:%x:%x:%x:%x:%x:%x:%x]:%d", + (addr->ip[0]<<8)|addr->ip[1], (addr->ip[2]<<8)|addr->ip[3], (addr->ip[4]<<8)|addr->ip[5], (addr->ip[6]<<8)|addr->ip[7], + (addr->ip[8]<<8)|addr->ip[9], (addr->ip[10]<<8)|addr->ip[11], (addr->ip[12]<<8)|addr->ip[13], (addr->ip[14]<<8)|addr->ip[15], + addr->port); + } + else + str_format(string, max_length, "unknown type %d", addr->type); +} + int net_host_lookup(const char *hostname, NETADDR *addr, int types) { /* TODO: IPv6 support */ @@ -554,7 +570,16 @@ int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size netaddr_to_sockaddr(addr, &sa); d = sendto((int)sock, (const char*)data, size, 0, &sa, sizeof(sa)); if(d < 0) + { + char addrstr[256]; + net_addr_str(addr, addrstr, sizeof(addrstr)); + dbg_msg("net", "sendto error %d %x", d, d); + dbg_msg("net", "\tsock = %d %x", sock, sock); + dbg_msg("net", "\tsize = %d %x", size, size); + dbg_msg("net", "\taddr = %s", addrstr); + + } network_stats.sent_bytes += size; network_stats.sent_packets++; return d; diff --git a/src/base/system.h b/src/base/system.h index 4449907c..abb20b42 100644 --- a/src/base/system.h +++ b/src/base/system.h @@ -478,7 +478,7 @@ int net_addr_comp(const NETADDR *a, const NETADDR *b); - The string will always be zero terminated */ -int net_addr_str(const NETADDR *addr, char *string, int max_length); +void net_addr_str(const NETADDR *addr, char *string, int max_length); /* Group: Network UDP */ |