terom@31: #ifndef NETWORK_PACKET_HH terom@31: #define NETWORK_PACKET_HH terom@31: terom@31: #include "NetworkConfig.hh" terom@36: #include "Vector.hh" terom@36: #include "Error.hh" terom@36: terom@36: class NetworkPacketError : public Error { terom@36: public: terom@36: NetworkPacketError (const std::string &message) : Error(message) { } terom@36: }; terom@31: terom@31: class NetworkPacket { terom@31: private: terom@31: char buf[NETWORK_PACKET_SIZE]; terom@33: size_t buf_size, data_size, offset; terom@33: terom@33: void check_write_size (size_t item_size); terom@33: void check_read_size (size_t item_size); terom@31: terom@31: template T read_val (void); terom@31: template void write_val (const T &val); terom@31: terom@31: public: terom@31: NetworkPacket (void); terom@31: terom@31: char* get_buf (void) { return buf; } terom@33: const char* get_buf (void) const { return buf; } terom@33: size_t get_data_size (void) const { return data_size; } terom@33: size_t get_buf_size (void) const { return buf_size; } terom@32: terom@33: void set_data_size (size_t size) { offset = 0; data_size = size; } terom@40: terom@40: // raw terom@40: void write (const void *ptr, size_t len); terom@40: void read (void *ptr, size_t len); terom@31: terom@31: // type-reads, handle network-endianlness terom@36: uint32_t read_uint32 (void); terom@36: uint16_t read_uint16 (void); terom@36: uint8_t read_uint8 (void); terom@31: terom@36: int32_t read_int32 (void); terom@36: int16_t read_int16 (void); terom@36: int8_t read_int8 (void); terom@36: terom@36: float read_float32 (void); terom@36: terom@31: terom@31: void write_uint32 (uint32_t val); terom@31: void write_uint16 (uint16_t val); terom@31: void write_uint8 (uint8_t val); terom@31: terom@31: void write_int32 (int32_t val); terom@31: void write_int16 (int16_t val); terom@31: void write_int8 (int8_t val); terom@36: terom@36: void write_float32 (float val); terom@31: terom@40: // complex terom@40: Vector read_vector (void); terom@36: void write_vector (const Vector &vec); terom@33: void write_packet (const NetworkPacket &pkt); terom@31: }; terom@31: terom@31: #endif /* NETWORK_PACKET_HH */