s-net-Tools
SnetProbeReply.h
Go to the documentation of this file.
1 
22 #ifndef SNET_PROBE_REPLY_H
23 #define SNET_PROBE_REPLY_H
24 
25 #include <vector>
26 #include "SnetAppMessage.h"
27 
29 public:
30  SnetProbeReply(): SnetAppMessage(), m_RemoteSeed(0), m_LocalSeed(0), m_RemoteSeqNbr(0), m_LocalSeqNbr(0) {}
31 
32  // Getters
33  uint32_t GetRemoteSeed() const { return m_RemoteSeed; }
34  uint32_t GetLocalSeed() const { return m_LocalSeed; }
35  uint32_t GetRemoteSeqNbr() const { return m_RemoteSeqNbr; }
36  uint32_t GetLocalSeqNbr() const { return m_LocalSeqNbr; }
37 
38  // Serializer
39  std::vector<unsigned char> Serialize() const {
40  std::vector<unsigned char> l_Buffer(SnetAppMessage::Serialize());
41  l_Buffer.emplace_back((m_RemoteSeed & 0xFF000000) >> 24);
42  l_Buffer.emplace_back((m_RemoteSeed & 0x00FF0000) >> 16);
43  l_Buffer.emplace_back((m_RemoteSeed & 0x0000FF00) >> 8);
44  l_Buffer.emplace_back (m_RemoteSeed & 0x000000FF);
45  l_Buffer.emplace_back((m_LocalSeed & 0xFF000000) >> 24);
46  l_Buffer.emplace_back((m_LocalSeed & 0x00FF0000) >> 16);
47  l_Buffer.emplace_back((m_LocalSeed & 0x0000FF00) >> 8);
48  l_Buffer.emplace_back (m_LocalSeed & 0x000000FF);
49  l_Buffer.emplace_back((m_RemoteSeqNbr & 0xFF000000) >> 24);
50  l_Buffer.emplace_back((m_RemoteSeqNbr & 0x00FF0000) >> 16);
51  l_Buffer.emplace_back((m_RemoteSeqNbr & 0x0000FF00) >> 8);
52  l_Buffer.emplace_back (m_RemoteSeqNbr & 0x000000FF);
53  l_Buffer.emplace_back((m_LocalSeqNbr & 0xFF000000) >> 24);
54  l_Buffer.emplace_back((m_LocalSeqNbr & 0x00FF0000) >> 16);
55  l_Buffer.emplace_back((m_LocalSeqNbr & 0x0000FF00) >> 8);
56  l_Buffer.emplace_back (m_LocalSeqNbr & 0x000000FF);
57  return l_Buffer;
58  }
59 
60  // Deserializer
61  size_t Deserialize(const std::vector<unsigned char>& a_Buffer) {
62  size_t l_Offset = SnetAppMessage::Deserialize(a_Buffer);
63  if (l_Offset) {
64  // Checks
65  if ((a_Buffer.size() - l_Offset) != 16) {
66  // Invalid payload size
67  l_Offset = 0;
68  } else {
69  // Parsing
70  m_RemoteSeed = (uint32_t(a_Buffer[l_Offset + 0]) << 24);
71  m_RemoteSeed += (uint32_t(a_Buffer[l_Offset + 1]) << 16);
72  m_RemoteSeed += (uint32_t(a_Buffer[l_Offset + 2]) << 8);
73  m_RemoteSeed += (uint32_t(a_Buffer[l_Offset + 3]));
74  m_LocalSeed = (uint32_t(a_Buffer[l_Offset + 4]) << 24);
75  m_LocalSeed += (uint32_t(a_Buffer[l_Offset + 5]) << 16);
76  m_LocalSeed += (uint32_t(a_Buffer[l_Offset + 6]) << 8);
77  m_LocalSeed += (uint32_t(a_Buffer[l_Offset + 7]));
78  m_RemoteSeqNbr = (uint32_t(a_Buffer[l_Offset + 8]) << 24);
79  m_RemoteSeqNbr += (uint32_t(a_Buffer[l_Offset + 9]) << 16);
80  m_RemoteSeqNbr += (uint32_t(a_Buffer[l_Offset + 10]) << 8);
81  m_RemoteSeqNbr += (uint32_t(a_Buffer[l_Offset + 11]));
82  m_LocalSeqNbr = (uint32_t(a_Buffer[l_Offset + 12]) << 24);
83  m_LocalSeqNbr += (uint32_t(a_Buffer[l_Offset + 13]) << 16);
84  m_LocalSeqNbr += (uint32_t(a_Buffer[l_Offset + 14]) << 8);
85  m_LocalSeqNbr += (uint32_t(a_Buffer[l_Offset + 15]));
86  l_Offset += 16;
87  } // else
88  } // if
89 
90  return l_Offset;
91  }
92 
93 private:
94  // Members
95  uint32_t m_RemoteSeed;
96  uint32_t m_LocalSeed;
97  uint32_t m_RemoteSeqNbr;
98  uint32_t m_LocalSeqNbr;
99 };
100 
101 #endif // SNET_PROBE_REPLY_H
uint32_t GetRemoteSeed() const
uint32_t GetRemoteSeqNbr() const
Copyright (c) 2016, Florian Evers, florian-evers@gmx.de All rights reserved.
size_t Deserialize(const std::vector< unsigned char > &a_Buffer)
size_t Deserialize(const std::vector< unsigned char > &a_Buffer)
uint32_t GetLocalSeqNbr() const
std::vector< unsigned char > Serialize() const
uint32_t GetLocalSeed() const
std::vector< unsigned char > Serialize() const