about summary refs log tree commit diff
path: root/src/engine/e_system.c
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-04-05 14:50:43 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-04-05 14:50:43 +0000
commit34c3a1c1426e6443ba30b8e2852b73bf92757dff (patch)
treec804647d311bfcf2627c5a519a15888c6e396b93 /src/engine/e_system.c
parentf713ad20288800e8a74160ba390ddefb47841033 (diff)
downloadzcatch-34c3a1c1426e6443ba30b8e2852b73bf92757dff.tar.gz
zcatch-34c3a1c1426e6443ba30b8e2852b73bf92757dff.zip
new network code. not perfect. connectionless packets is missing so no server discovery is possible. reduced network traffic by A LOT
Diffstat (limited to 'src/engine/e_system.c')
-rw-r--r--src/engine/e_system.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/engine/e_system.c b/src/engine/e_system.c
index 9545369d..f87fd6f3 100644
--- a/src/engine/e_system.c
+++ b/src/engine/e_system.c
@@ -54,6 +54,8 @@ IOHANDLE io_stderr() { return (IOHANDLE)stderr; }
 static DBG_LOGGER loggers[16];
 static int num_loggers = 0;
 
+static NETSTATS network_stats = {0};
+
 void dbg_logger(DBG_LOGGER logger)
 {
 	loggers[num_loggers++] = logger;
@@ -557,6 +559,8 @@ int net_udp4_send(NETSOCKET sock, const NETADDR4 *addr, const void *data, int si
 	d = sendto((int)sock, (const char*)data, size, 0, &sa, sizeof(sa));
 	if(d < 0)
 		dbg_msg("net", "sendto error %d %x", d, d);
+	network_stats.sent_bytes += size;
+	network_stats.sent_packets++;
 	return d;
 }
 
@@ -569,6 +573,8 @@ int net_udp4_recv(NETSOCKET sock, NETADDR4 *addr, void *data, int maxsize)
 	if(bytes > 0)
 	{
 		sockaddr_to_netaddr4(&from, addr);
+		network_stats.recv_bytes += bytes;
+		network_stats.recv_packets++;
 		return bytes;
 	}
 	else if(bytes == 0)
@@ -940,6 +946,25 @@ const char *str_find_nocase(const char *haystack, const char *needle)
 	return 0;
 }
 
+void str_hex(char *dst, int dst_size, const void *data, int data_size)
+{
+	static const char hex[] = "0123456789ABCDEF";
+	int b;
+
+	for(b = 0; b < data_size && b < dst_size/4-4; b++)
+	{
+		dst[b*3] = hex[((const unsigned char *)data)[b]>>4];
+		dst[b*3+1] = hex[((const unsigned char *)data)[b]&0xf];
+		dst[b*3+2] = ' ';
+		dst[b*3+3] = 0;
+	}
+}
+
+void net_stats(NETSTATS *stats_inout)
+{
+	*stats_inout = network_stats;
+}
+
 #if defined(__cplusplus)
 }
 #endif