]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/network/networkpacket.cpp
Chat protocol rewrite (#5117)
[dragonfireclient.git] / src / network / networkpacket.cpp
index 2b308f334e2f94211cd9e86d36bd833d9917724d..78c73d253183652e80f3f0a710c6de8b5470a37d 100644 (file)
@@ -23,13 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "util/serialize.h"
 
 NetworkPacket::NetworkPacket(u16 command, u32 datasize, u16 peer_id):
-m_datasize(datasize), m_read_offset(0), m_command(command), m_peer_id(peer_id)
+m_datasize(datasize), m_command(command), m_peer_id(peer_id)
 {
        m_data.resize(m_datasize);
 }
 
 NetworkPacket::NetworkPacket(u16 command, u32 datasize):
-m_datasize(datasize), m_read_offset(0), m_command(command), m_peer_id(0)
+m_datasize(datasize), m_command(command)
 {
        m_data.resize(m_datasize);
 }
@@ -63,7 +63,7 @@ void NetworkPacket::putRawPacket(u8 *data, u32 datasize, u16 peer_id)
        m_data = std::vector<u8>(&data[2], &data[2 + m_datasize]);
 }
 
-char* NetworkPacket::getString(u32 from_offset)
+const char* NetworkPacket::getString(u32 from_offset)
 {
        checkReadOffset(from_offset, 0);
 
@@ -77,7 +77,7 @@ void NetworkPacket::putRawString(const char* src, u32 len)
                m_data.resize(m_datasize);
        }
 
-       if (m_datasize == 0)
+       if (len == 0)
                return;
 
        memcpy(&m_data[m_read_offset], src, len);
@@ -105,7 +105,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst)
        return *this;
 }
 
-NetworkPacket& NetworkPacket::operator<<(std::string src)
+NetworkPacket& NetworkPacket::operator<<(const std::string &src)
 {
        u16 msgsize = src.size();
        if (msgsize > STRING_MAX_LEN) {
@@ -119,7 +119,7 @@ NetworkPacket& NetworkPacket::operator<<(std::string src)
        return *this;
 }
 
-void NetworkPacket::putLongString(std::string src)
+void NetworkPacket::putLongString(const std::string &src)
 {
        u32 msgsize = src.size();
        if (msgsize > LONG_STRING_MAX_LEN) {
@@ -155,7 +155,7 @@ NetworkPacket& NetworkPacket::operator>>(std::wstring& dst)
        return *this;
 }
 
-NetworkPacket& NetworkPacket::operator<<(std::wstring src)
+NetworkPacket& NetworkPacket::operator<<(const std::wstring &src)
 {
        u16 msgsize = src.size();
        if (msgsize > WIDE_STRING_MAX_LEN) {
@@ -275,6 +275,12 @@ NetworkPacket& NetworkPacket::operator<<(u64 src)
        return *this;
 }
 
+NetworkPacket& NetworkPacket::operator<<(std::time_t src)
+{
+       *this << (u64) src;
+       return *this;
+}
+
 NetworkPacket& NetworkPacket::operator<<(float src)
 {
        checkDataSize(4);
@@ -360,6 +366,16 @@ NetworkPacket& NetworkPacket::operator>>(u64& dst)
        return *this;
 }
 
+NetworkPacket& NetworkPacket::operator>>(std::time_t& dst)
+{
+       checkReadOffset(m_read_offset, 8);
+
+       dst = readU64(&m_data[m_read_offset]);
+
+       m_read_offset += 8;
+       return *this;
+}
+
 NetworkPacket& NetworkPacket::operator>>(float& dst)
 {
        checkReadOffset(m_read_offset, 4);