about summary refs log tree commit diff
path: root/src/engine/e_network.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/e_network.c')
-rw-r--r--src/engine/e_network.c57
1 files changed, 10 insertions, 47 deletions
diff --git a/src/engine/e_network.c b/src/engine/e_network.c
index 1e320293..d3560d84 100644
--- a/src/engine/e_network.c
+++ b/src/engine/e_network.c
@@ -154,12 +154,8 @@ typedef struct
 	unsigned state;
 	
 	int token;
-	
 	int remote_closed;
 	
-	int connected;
-	int disconnected;
-	
 	RINGBUFFER buffer;
 	
 	int64 last_update_time;
@@ -213,27 +209,10 @@ struct NETCLIENT_t
 };
 
 static IOHANDLE datalog = 0;
-static HUFFSTATE huffmanstate;
+static HUFFMAN_STATE huffmanstate;
 
 #define COMPRESSION 1
 
-typedef struct pcap_hdr_s {
-        unsigned magic_number;   /* magic number */
-        short version_major;  /* major version number */
-        short version_minor;  /* minor version number */
-        int  thiszone;       /* GMT to local correction */
-        unsigned sigfigs;        /* accuracy of timestamps */
-        unsigned snaplen;        /* max length of captured packets, in octets */
-        unsigned network;        /* data link type */
-} pcap_hdr_t;
-
-typedef struct pcaprec_hdr_s {
-        unsigned ts_sec;         /* timestamp seconds */
-        unsigned ts_usec;        /* timestamp microseconds */
-        unsigned incl_len;       /* number of octets of packet saved in file */
-        unsigned orig_len;       /* actual length of packet */
-} pcaprec_hdr_t;
-
 /* packs the data tight and sends it */
 static void send_packet(NETSOCKET socket, NETADDR *addr, NETPACKETCONSTRUCT *packet)
 {
@@ -249,7 +228,7 @@ static void send_packet(NETSOCKET socket, NETADDR *addr, NETPACKETCONSTRUCT *pac
 	
 	if(COMPRESSION)
 	{
-		int compressed_size = (huffman_compress(&huffmanstate, packet->chunk_data, packet->data_size, &buffer[3], NET_MAX_PACKETSIZE-4)+7)/8;
+		int compressed_size = huffman_compress(&huffmanstate, packet->chunk_data, packet->data_size, &buffer[3], NET_MAX_PACKETSIZE-4);
 		net_udp_send(socket, addr, buffer, NET_PACKETHEADERSIZE+compressed_size);
 	}
 	else
@@ -276,9 +255,7 @@ static int unpack_packet(unsigned char *buffer, int size, NETPACKETCONSTRUCT *pa
 	packet->data_size = size - NET_PACKETHEADERSIZE;
 	
 	if(COMPRESSION)
-	{
 		huffman_decompress(&huffmanstate, &buffer[3], packet->data_size, packet->chunk_data, sizeof(packet->chunk_data));
-	}
 	else
 		mem_copy(packet->chunk_data, &buffer[3], packet->data_size);
 	
@@ -326,12 +303,7 @@ static void conn_reset(NETCONNECTION *conn)
 	conn->ack = 0;
 	conn->remote_closed = 0;
 	
-	if(conn->state == NET_CONNSTATE_ONLINE ||
-		conn->state == NET_CONNSTATE_ERROR)
-	{
-		conn->disconnected++;
-	}
-		
+	conn->state = NET_CONNSTATE_OFFLINE;
 	conn->state = NET_CONNSTATE_OFFLINE;
 	conn->last_send_time = 0;
 	conn->last_recv_time = 0;
@@ -340,6 +312,8 @@ static void conn_reset(NETCONNECTION *conn)
 	mem_zero(&conn->peeraddr, sizeof(conn->peeraddr));
 	
 	rb_clear(&conn->buffer);
+	
+	mem_zero(&conn->construct, sizeof(conn->construct));
 }
 
 
@@ -358,8 +332,6 @@ static void conn_init(NETCONNECTION *conn, NETSOCKET socket)
 	conn_reset(conn);
 	conn_reset_stats(conn);
 	conn->socket = socket;
-	conn->connected = 0;
-	conn->disconnected = 0;
 	rb_init(&conn->buffer);
 	mem_zero(conn->error_string, sizeof(conn->error_string));
 }
@@ -489,6 +461,9 @@ static int conn_connect(NETCONNECTION *conn, NETADDR *addr)
 
 static void conn_disconnect(NETCONNECTION *conn, const char *reason)
 {
+	if(conn->state == NET_CONNSTATE_OFFLINE)
+		return;
+
 	if(conn->remote_closed == 0)
 	{
 		if(reason)
@@ -518,8 +493,6 @@ static int conn_feed(NETCONNECTION *conn, NETPACKETCONSTRUCT *packet, NETADDR *a
 	{
 		int ctrlmsg = packet->chunk_data[0];
 		
-		dbg_msg("connection", "\tgot control message %d", ctrlmsg);
-
 		if(ctrlmsg == NET_CTRLMSG_CLOSE)
 		{
 			conn->state = NET_CONNSTATE_ERROR;
@@ -554,7 +527,6 @@ static int conn_feed(NETCONNECTION *conn, NETPACKETCONSTRUCT *packet, NETADDR *a
 					/* send response and init connection */
 					conn_reset(conn);
 					conn->state = NET_CONNSTATE_ONLINE;
-					conn->connected++;
 					conn->peeraddr = *addr;
 					conn->last_send_time = now;
 					conn->last_recv_time = now;
@@ -571,7 +543,6 @@ static int conn_feed(NETCONNECTION *conn, NETPACKETCONSTRUCT *packet, NETADDR *a
 				{
 					conn_send_control(conn, NET_CTRLMSG_ACCEPT, 0, 0);
 					conn->state = NET_CONNSTATE_ONLINE;
-					conn->connected++;
 					if(config.debug)
 						dbg_msg("connection", "got connect+accept, sending accept. connection online");
 				}
@@ -1088,7 +1059,7 @@ void netcommon_openlog(const char *filename)
 }
 
 
-static const int freq_table[256+1] = {
+static const unsigned freq_table[256+1] = {
 1<<30,4545,2657,431,1950,919,444,482,2244,617,838,542,715,1814,304,240,754,212,647,186,
 283,131,146,166,543,164,167,136,179,859,363,113,157,154,204,108,137,180,202,176,
 872,404,168,134,151,111,113,109,120,126,129,100,41,20,16,22,18,18,17,19,
@@ -1105,13 +1076,5 @@ static const int freq_table[256+1] = {
 
 void netcommon_init()
 {
-	int i;
-	huffman_init(&huffmanstate);
-	for(i = 0; i < 256; i++)
-	{
-		unsigned char sym = (unsigned char)i;
-		huffman_add_symbol(&huffmanstate, freq_table[i], 1, &sym);
-	}
-	
-	huffman_construct_tree(&huffmanstate);
+	huffman_init(&huffmanstate, freq_table);
 }