diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-06-12 10:51:48 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-06-12 10:51:48 +0000 |
| commit | f6c67c29cd10d41b877ee1319801edc01b625e72 (patch) | |
| tree | 6ca26c44ac0218a57d078a6f72034f2924b44104 /src/engine | |
| parent | 0d3b988c1aed8f6b91879a801253db81a251a532 (diff) | |
| download | zcatch-f6c67c29cd10d41b877ee1319801edc01b625e72.tar.gz zcatch-f6c67c29cd10d41b877ee1319801edc01b625e72.zip | |
large commit with loads of clean up. more is comming
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/client/ec_client.c | 2 | ||||
| -rw-r--r-- | src/engine/e_network.c | 37 | ||||
| -rw-r--r-- | src/engine/server/es_server.c | 3 |
3 files changed, 35 insertions, 7 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c index 6d3a400b..8872d5f4 100644 --- a/src/engine/client/ec_client.c +++ b/src/engine/client/ec_client.c @@ -770,7 +770,7 @@ static void client_process_packet(NETCHUNK *packet) { int sys; int msg = msg_unpack_start(packet->data, packet->data_size, &sys); - + if(sys) { /* system message */ diff --git a/src/engine/e_network.c b/src/engine/e_network.c index 9ebeba61..51fcbd75 100644 --- a/src/engine/e_network.c +++ b/src/engine/e_network.c @@ -19,7 +19,6 @@ CURRENT: unsigned char flags_size; // 2bit flags, 6 bit size unsigned char size_seq; // 4bit size, 4bit seq (unsigned char seq;) // 8bit seq, if vital flag is set - */ enum @@ -216,6 +215,25 @@ struct NETCLIENT_t static IOHANDLE datalog = 0; static HUFFSTATE huffmanstate; +#define COMPRESSION 0 + +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, NETADDR4 *addr, NETPACKETCONSTRUCT *packet) { @@ -229,14 +247,14 @@ static void send_packet(NETSOCKET socket, NETADDR4 *addr, NETPACKETCONSTRUCT *pa io_write(datalog, &packet->chunk_data, packet->data_size); } - if(1) + if(COMPRESSION) { int compressed_size = (huffman_compress(&huffmanstate, packet->chunk_data, packet->data_size, &buffer[4], NET_MAX_PACKETSIZE-4)+7)/8; net_udp4_send(socket, addr, buffer, NET_PACKETHEADERSIZE+compressed_size); } else { - mem_copy(&buffer[4], packet->chunk_data, packet->data_size); + mem_copy(&buffer[3], packet->chunk_data, packet->data_size); net_udp4_send(socket, addr, buffer, NET_PACKETHEADERSIZE+packet->data_size); } } @@ -246,7 +264,10 @@ static int unpack_packet(unsigned char *buffer, int size, NETPACKETCONSTRUCT *pa { /* check the size */ if(size < NET_PACKETHEADERSIZE || size > NET_MAX_PACKETSIZE) + { + dbg_msg("", "packet too small"); return -1; + } /* read the packet */ packet->flags = buffer[0]>>4; @@ -254,12 +275,12 @@ static int unpack_packet(unsigned char *buffer, int size, NETPACKETCONSTRUCT *pa packet->num_chunks = buffer[2]; packet->data_size = size - NET_PACKETHEADERSIZE; - if(1) + if(COMPRESSION) { - huffman_decompress(&huffmanstate, &buffer[4], packet->data_size, packet->chunk_data, sizeof(packet->chunk_data)); + huffman_decompress(&huffmanstate, &buffer[3], packet->data_size, packet->chunk_data, sizeof(packet->chunk_data)); } else - mem_copy(packet->chunk_data, &buffer[4], packet->data_size); + mem_copy(packet->chunk_data, &buffer[3], packet->data_size); /* return success */ return 0; @@ -435,6 +456,7 @@ static void conn_send_control(NETCONNECTION *conn, int controlmsg, const void *e static void conn_resend(NETCONNECTION *conn) { + int resend_count = 0; int max = 10; RINGBUFFER_ITEM *item = conn->buffer.first; while(item) @@ -443,9 +465,12 @@ static void conn_resend(NETCONNECTION *conn) conn_queue_chunk(conn, resend->flags|NET_CHUNKFLAG_RESEND, resend->data_size, resend->data); item = item->next; max--; + resend_count++; if(!max) break; } + + dbg_msg("conn", "resent %d packets", resend_count); } static int conn_connect(NETCONNECTION *conn, NETADDR4 *addr) diff --git a/src/engine/server/es_server.c b/src/engine/server/es_server.c index 0d2200c3..ac1a79a1 100644 --- a/src/engine/server/es_server.c +++ b/src/engine/server/es_server.c @@ -226,6 +226,9 @@ void server_setclientname(int client_id, const char *name) if(client_id < 0 || client_id > MAX_CLIENTS || clients[client_id].state < SRVCLIENT_STATE_READY) return; + if(!name) + return; + str_copy(nametry, name, MAX_NAME_LENGTH); if(server_try_setclientname(client_id, nametry)) { |