Satellite-Gateway
HdlcdClientCreate.h
Go to the documentation of this file.
1 
24 #ifndef HDLCD_CLIENT_CREATE_H
25 #define HDLCD_CLIENT_CREATE_H
26 
27 #include "ConfigFrame.h"
28 #include <memory>
29 #include <string>
30 
32 public:
33  static HdlcdClientCreate Create(const std::string &a_RemoteAddress, uint16_t a_TcpPortNbr, uint16_t a_SerialPortNbr) {
34  HdlcdClientCreate l_HdlcdClientCreate;
35  l_HdlcdClientCreate.m_RemoteAddress = a_RemoteAddress;
36  l_HdlcdClientCreate.m_TcpPortNbr = a_TcpPortNbr;
37  l_HdlcdClientCreate.m_SerialPortNbr = a_SerialPortNbr;
38  return l_HdlcdClientCreate;
39  }
40 
41  static std::shared_ptr<HdlcdClientCreate> CreateDeserializedFrame() {
42  auto l_HdlcdClientCreate(std::shared_ptr<HdlcdClientCreate>(new HdlcdClientCreate));
43  l_HdlcdClientCreate->m_eDeserialize = DESERIALIZE_HEADER;
44  l_HdlcdClientCreate->m_BytesRemaining = 6; // Next: read the header including the frame type byte
45  return l_HdlcdClientCreate;
46  }
47 
48  // Getter
49  const std::string& GetRemoteAddress() const {
50  assert(m_eDeserialize == DESERIALIZE_FULL);
51  return m_RemoteAddress;
52  }
53 
54  uint16_t GetTcpPortNbr() const {
55  assert(m_eDeserialize == DESERIALIZE_FULL);
56  return m_TcpPortNbr;
57  }
58 
59  uint16_t GetSerialPortNbr() const {
60  assert(m_eDeserialize == DESERIALIZE_FULL);
61  return m_SerialPortNbr;
62  }
63 
64 private:
65  // Private CTOR
66  HdlcdClientCreate(): m_TcpPortNbr(0), m_SerialPortNbr(0), m_eDeserialize(DESERIALIZE_FULL) {
67  }
68 
69  // Methods
70  E_CONFIG_FRAME GetConfigFrameType() const { return CONFIG_FRAME_HDLCD_CLIENT_CREATE; }
71 
72  // Serializer
73  const std::vector<unsigned char> Serialize() const {
74  assert(m_eDeserialize == DESERIALIZE_FULL);
75  std::vector<unsigned char> l_Buffer;
76  l_Buffer.emplace_back(CONFIG_FRAME_HDLCD_CLIENT_CREATE);
77  l_Buffer.emplace_back((m_SerialPortNbr >> 8) & 0xFF);
78  l_Buffer.emplace_back((m_SerialPortNbr >> 0) & 0xFF);
79  l_Buffer.emplace_back((m_TcpPortNbr >> 8) & 0xFF);
80  l_Buffer.emplace_back((m_TcpPortNbr >> 0) & 0xFF);
81  l_Buffer.emplace_back((m_RemoteAddress.size()) & 0xFF);
82  l_Buffer.insert(l_Buffer.end(), m_RemoteAddress.data(), (m_RemoteAddress.data() + m_RemoteAddress.size()));
83  return l_Buffer;
84  }
85 
86  // Deserializer
87  bool Deserialize() {
88  // All requested bytes are available
89  switch (m_eDeserialize) {
90  case DESERIALIZE_HEADER: {
91  // Deserialize the body including the frame type byte
92  assert(m_Buffer.size() == 6);
94  m_SerialPortNbr = ntohs(*(reinterpret_cast<const uint16_t*>(&m_Buffer[1])));
95  m_TcpPortNbr = ntohs(*(reinterpret_cast<const uint16_t*>(&m_Buffer[3])));
97  m_Buffer.clear();
98  if (m_BytesRemaining) {
99  m_eDeserialize = DESERIALIZE_BODY;
100  } else {
101  m_eDeserialize = DESERIALIZE_FULL;
102  } // else
103 
104  break;
105  }
106  case DESERIALIZE_BODY: {
107  m_RemoteAddress.append(m_Buffer.begin(), m_Buffer.end());
108  m_eDeserialize = DESERIALIZE_FULL;
109  break;
110  }
111  case DESERIALIZE_ERROR:
112  case DESERIALIZE_FULL:
113  default:
114  assert(false);
115  } // switch
116 
117  // No error
118  return true;
119  }
120 
121  // Members
122  std::string m_RemoteAddress;
123  uint16_t m_TcpPortNbr;
124  uint16_t m_SerialPortNbr;
125  typedef enum {
126  DESERIALIZE_ERROR = 0,
127  DESERIALIZE_HEADER = 1,
128  DESERIALIZE_BODY = 2,
129  DESERIALIZE_FULL = 3
130  } E_DESERIALIZE;
131  E_DESERIALIZE m_eDeserialize;
132 };
133 
134 #endif // HDLCD_CLIENT_CREATE_H
uint16_t GetTcpPortNbr() const
E_CONFIG_FRAME
Definition: ConfigFrame.h:29
const std::string & GetRemoteAddress() const
std::vector< unsigned char > m_Buffer
The buffer containing partly received frames or higher-layer payload.
Definition: Frame.h:154
static std::shared_ptr< HdlcdClientCreate > CreateDeserializedFrame()
static HdlcdClientCreate Create(const std::string &a_RemoteAddress, uint16_t a_TcpPortNbr, uint16_t a_SerialPortNbr)
size_t m_BytesRemaining
The amount of bytes required to finalize frame assembly during reception.
Definition: Frame.h:155
uint16_t GetSerialPortNbr() const