s-net-Tools
SnetServiceMessage.h
Go to the documentation of this file.
1 
37 #ifndef SNET_SERVICE_MESSAGE_H
38 #define SNET_SERVICE_MESSAGE_H
39 
40 #include "SnetAppMessage.h"
41 
43 public:
44  SnetServiceMessage(uint8_t a_SrcServiceId = 0, uint8_t a_DstServiceId = 0, uint8_t a_Token = 0, uint16_t a_SrcSSA = 0xFFFE, uint16_t a_DstSSA = 0xFFFE, bool a_OnAirARQ = true): SnetAppMessage(a_SrcServiceId, a_DstServiceId, a_Token, a_SrcSSA, a_DstSSA, a_OnAirARQ) {}
45 
46  // Setters and getters
47  void SetPayload(const std::vector<unsigned char> &a_Payload) { m_Payload = a_Payload; }
48  std::vector<unsigned char> GetPayload() const { return m_Payload; }
49 
50  // Query the size of the packet in bytes
51  size_t GetSize() const { return (SnetAppMessage::GetSize() + m_Payload.size()); }
52 
53  // Serializer and deserializer
54  std::vector<unsigned char> Serialize() const {
55  std::vector<unsigned char> l_Buffer(SnetAppMessage::Serialize());
56  l_Buffer.insert(l_Buffer.end(), m_Payload.begin(), m_Payload.end());
57  return l_Buffer;
58  }
59 
60  size_t Deserialize(const std::vector<unsigned char>& a_Buffer) {
61  size_t l_Offset = SnetAppMessage::Deserialize(a_Buffer);
62  if (l_Offset) {
63  m_Payload.assign((a_Buffer.begin() + l_Offset), a_Buffer.end());
64  l_Offset += m_Payload.size();
65  } // if
66 
67  return l_Offset;
68  }
69 
70  // Dissector
71  std::string Dissect() const {
72  std::stringstream l_Output;
73  l_Output << SnetAppMessage::Dissect() << ", with " << std::dec << std::setw(3) << m_Payload.size() << " bytes payload:";
74  for (auto it = m_Payload.begin(); it != m_Payload.end(); ++it) {
75  l_Output << " " << std::hex << std::setw(2) << std::setfill('0') << int(*it);
76  } // for
77 
78  return l_Output.str();
79  }
80 
81 private:
82  std::vector<unsigned char> m_Payload;
83 };
84 
85 #endif // SNET_SERVICE_MESSAGE_H
std::string Dissect() const
size_t Deserialize(const std::vector< unsigned char > &a_Buffer)
void SetPayload(const std::vector< unsigned char > &a_Payload)
Copyright (c) 2016, Florian Evers, florian-evers@gmx.de All rights reserved.
std::vector< unsigned char > GetPayload() const
size_t Deserialize(const std::vector< unsigned char > &a_Buffer)
size_t GetSize() const
std::vector< unsigned char > Serialize() const
std::string Dissect() const
SnetServiceMessage(uint8_t a_SrcServiceId=0, uint8_t a_DstServiceId=0, uint8_t a_Token=0, uint16_t a_SrcSSA=0xFFFE, uint16_t a_DstSSA=0xFFFE, bool a_OnAirARQ=true)
std::vector< unsigned char > Serialize() const
size_t GetSize() const