X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fprotocol.cpp;fp=source%2Fnet%2Fprotocol.cpp;h=358966f643152804ebc0e1b68a3c193179e2a4de;hp=c6112923c9692db7f4b646f11d68e0a8e6e753a0;hb=449a2f3417748761f94f3002b1c15819c4d83365;hpb=c2e9e03b191a6ffe44a83be32aadf2a325491c02 diff --git a/source/net/protocol.cpp b/source/net/protocol.cpp index c611292..358966f 100644 --- a/source/net/protocol.cpp +++ b/source/net/protocol.cpp @@ -44,6 +44,13 @@ const Protocol::PacketDefBase &Protocol::get_packet_by_id(unsigned id) const return *get_item(packet_id_defs, id); } +unsigned Protocol::get_max_packet_id() const +{ + if(packet_id_defs.empty()) + return 0; + return prev(packet_id_defs.end())->first; +} + size_t Protocol::dispatch(ReceiverBase &rcv, const char *buf, size_t size, unsigned base_id) const { PacketHeader header; @@ -55,13 +62,18 @@ size_t Protocol::dispatch(ReceiverBase &rcv, const char *buf, size_t size, unsig return ptr-buf; } -size_t Protocol::get_packet_size(const char *buf, size_t size) const +bool Protocol::get_packet_header(PacketHeader &header, const char *buf, size_t size) const { if(size<4) - return 0; - PacketHeader header; + return false; header_def.deserialize(header, buf, buf+size); - return header.length; + return true; +} + +size_t Protocol::get_packet_size(const char *buf, size_t size) const +{ + PacketHeader header; + return (get_packet_header(header, buf, size) ? header.length : 0); } uint64_t Protocol::get_hash() const