Satellite-Gateway
SnetPacket.h
Go to the documentation of this file.
1 
37 #ifndef SNET_PACKET_H
38 #define SNET_PACKET_H
39 
40 #include <iostream>
41 #include <vector>
42 #include <string>
43 #include <iomanip>
44 #include <sstream>
45 
46 class SnetPacket {
47 public:
48  SnetPacket(uint16_t a_SrcSSA = 0xFFFE, uint16_t a_DstSSA = 0xFFFE, bool a_OnAirARQ = true): m_SrcSSA(a_SrcSSA), m_DstSSA(a_DstSSA), m_OnAirARQ(a_OnAirARQ) {}
49  virtual ~SnetPacket(){}
50 
51  // Setters and getters
52  void SetSrcSSA(uint16_t a_SrcSSA = 0xFFFE) { m_SrcSSA = a_SrcSSA; }
53  uint16_t GetSrcSSA() const { return m_SrcSSA; }
54  void SetDstSSA(uint16_t a_DstSSA = 0xFFFE) { m_DstSSA = a_DstSSA; }
55  uint16_t GetDstSSA() const { return m_DstSSA; }
56  void SetOnAirARQ(bool a_OnAirARQ = true) { m_OnAirARQ = a_OnAirARQ; }
57  bool GetOnAirARQ() const { return m_OnAirARQ; }
58 
59  // Serializer
60  virtual std::vector<unsigned char> Serialize() const {
61  std::vector<unsigned char> l_Buffer;
62  l_Buffer.emplace_back(0x00);
63  if (m_OnAirARQ) {
64  l_Buffer.emplace_back(0x10);
65  } else {
66  l_Buffer.emplace_back(0x00);
67  } // else
68 
69  l_Buffer.emplace_back((m_SrcSSA >> 8) & 0xFF);
70  l_Buffer.emplace_back((m_SrcSSA >> 0) & 0xFF);
71  l_Buffer.emplace_back((m_DstSSA >> 8) & 0xFF);
72  l_Buffer.emplace_back((m_DstSSA >> 0) & 0xFF);
73  if (m_OnAirARQ) {
74  l_Buffer.emplace_back(0x80);
75  } // if
76 
77  return l_Buffer;
78  }
79 
80  // Deserializer
81  virtual size_t Deserialize(const std::vector<unsigned char>& a_Buffer) {
82  if (a_Buffer.size() < 6) { return 0; }
83  if (a_Buffer[0] != 0x00) { return 0; }
84  m_OnAirARQ = (a_Buffer[1] & 0x10);
85  m_SrcSSA = ((a_Buffer[2] << 8) + a_Buffer[3]);
86  m_DstSSA = ((a_Buffer[4] << 8) + a_Buffer[5]);
87  if (m_OnAirARQ) {
88  if (a_Buffer.size() >= 7) {
89  if (a_Buffer[6] == 0x80) {
90  // Ok
91  return 7;
92  } // if
93  } // if
94  } else {
95  // Ok
96  return 6;
97  } // else
98 
99  // Not ok
100  return 0;
101  }
102 
103  // Dissector
104  virtual std::string Dissect() const {
105  std::stringstream l_Output;
106  l_Output << "SrcSSA=0x" << std::hex << std::setw(4) << std::setfill('0') << m_SrcSSA
107  << ", DstSSA=0x" << std::hex << std::setw(4) << std::setfill('0') << m_DstSSA
108  << ", ARQ=" << std::dec << (int)m_OnAirARQ;
109  return l_Output.str();
110  }
111 
112 protected:
113  // Query the size of the packet in bytes
114  virtual size_t GetSize() const { if (m_OnAirARQ) { return 7; } else { return 6; } }
115 
116 private:
117  // Protocol members
118  uint16_t m_SrcSSA;
119  uint16_t m_DstSSA;
120  bool m_OnAirARQ;
121 };
122 
123 #endif // SNET_PACKET_H
virtual std::vector< unsigned char > Serialize() const
Definition: SnetPacket.h:60
virtual std::string Dissect() const
Definition: SnetPacket.h:104
void SetDstSSA(uint16_t a_DstSSA=0xFFFE)
Definition: SnetPacket.h:54
uint16_t GetSrcSSA() const
Definition: SnetPacket.h:53
virtual size_t GetSize() const
Definition: SnetPacket.h:114
bool GetOnAirARQ() const
Definition: SnetPacket.h:57
virtual ~SnetPacket()
Definition: SnetPacket.h:49
void SetOnAirARQ(bool a_OnAirARQ=true)
Definition: SnetPacket.h:56
virtual size_t Deserialize(const std::vector< unsigned char > &a_Buffer)
Definition: SnetPacket.h:81
void SetSrcSSA(uint16_t a_SrcSSA=0xFFFE)
Definition: SnetPacket.h:52
SnetPacket(uint16_t a_SrcSSA=0xFFFE, uint16_t a_DstSSA=0xFFFE, bool a_OnAirARQ=true)
Definition: SnetPacket.h:48
uint16_t GetDstSSA() const
Definition: SnetPacket.h:55