# HG changeset patch # User terom # Date 1227223200 0 # Node ID 4b2867fb5c122083700a24d3a9c70db3938c8a94 # Parent cfb8b6e2a35f9a21a938f1a60db598031c7571ce and the basics work now diff -r cfb8b6e2a35f -r 4b2867fb5c12 src/proto2/NetworkPacket.cc --- a/src/proto2/NetworkPacket.cc Thu Nov 20 22:55:28 2008 +0000 +++ b/src/proto2/NetworkPacket.cc Thu Nov 20 23:20:00 2008 +0000 @@ -1,3 +1,5 @@ + +#include #include "NetworkPacket.hh" @@ -19,32 +21,42 @@ throw NetworkPacketError("not enough data to read"); } +void NetworkPacket::write (const void *ptr, size_t len) { + // check buffer overflow + check_write_size(len); + + // set value + memcpy(buf + offset, ptr, len); + + // update offset and size + offset += len; + data_size += len; +} + +void NetworkPacket::read (void *ptr, size_t len) { + // check buffer underflow + check_read_size(len); + + // set value + memcpy(ptr, buf + offset, len); + + // update offset + offset += len; +} + template T NetworkPacket::read_val (void) { T val; - // check size - check_read_size(sizeof(T)); - - // set value - val = *((T*) (buf + offset)); - - // update offset - offset += sizeof(T); + // read + read(&val, sizeof(T)); // return return val; } template void NetworkPacket::write_val (const T &val) { - // check max size - check_write_size(sizeof(T)); - - // set value - *((T*) (buf + offset)) = val; - - // update offset and size - offset += sizeof(T); - data_size += sizeof(T); + // write + write(&val, sizeof(T)); } uint32_t NetworkPacket::read_uint32 (void) { @@ -72,7 +84,9 @@ } float NetworkPacket::read_float32 (void) { - return (float) read_uint32(); + int32_t ival = read_int32(); + + return *((float *) &ival); } Vector NetworkPacket::read_vector (void) { @@ -107,7 +121,7 @@ } void NetworkPacket::write_float32 (float val) { - write_uint32((uint32_t) val); + write_int32(*((int32_t *) &val)); } void NetworkPacket::write_vector (const Vector &vec) { diff -r cfb8b6e2a35f -r 4b2867fb5c12 src/proto2/NetworkPacket.hh --- a/src/proto2/NetworkPacket.hh Thu Nov 20 22:55:28 2008 +0000 +++ b/src/proto2/NetworkPacket.hh Thu Nov 20 23:20:00 2008 +0000 @@ -30,6 +30,10 @@ size_t get_buf_size (void) const { return buf_size; } void set_data_size (size_t size) { offset = 0; data_size = size; } + + // raw + void write (const void *ptr, size_t len); + void read (void *ptr, size_t len); // type-reads, handle network-endianlness uint32_t read_uint32 (void); @@ -42,7 +46,6 @@ float read_float32 (void); - Vector read_vector (void); void write_uint32 (uint32_t val); void write_uint16 (uint16_t val); @@ -54,6 +57,8 @@ void write_float32 (float val); + // complex + Vector read_vector (void); void write_vector (const Vector &vec); void write_packet (const NetworkPacket &pkt); };