HDLC-Daemon
Frame.h
Go to the documentation of this file.
1 
39 #ifndef FRAME_H
40 #define FRAME_H
41 
42 #include <stddef.h>
43 #include <vector>
44 #include <assert.h>
45 
59 class Frame {
60 public:
66 
69  virtual ~Frame(){}
70 
79  virtual const std::vector<unsigned char> Serialize() const = 0;
80 
91  size_t BytesNeeded() const { return m_BytesRemaining; }
92 
107  bool ParseBytes(const unsigned char *a_ReadBuffer, size_t &a_ReadBufferOffset, size_t &a_BytesAvailable) {
108  // Checks
109  assert(a_ReadBuffer);
110  assert(a_BytesAvailable);
111  assert(m_BytesRemaining);
112 
113  // Parse the frame
114  bool l_bSuccess = true;
115  while ((m_BytesRemaining) && (a_BytesAvailable)) {
116  // Determine the amount of bytes to consume
117  size_t l_BytesToCopy = m_BytesRemaining;
118  if (a_BytesAvailable < l_BytesToCopy) {
119  l_BytesToCopy = a_BytesAvailable;
120  } // if
121 
122  // Consume bytes from the provided buffer
123  m_Buffer.insert(m_Buffer.end(), &a_ReadBuffer[a_ReadBufferOffset], (&a_ReadBuffer[a_ReadBufferOffset] + l_BytesToCopy));
124  a_ReadBufferOffset += l_BytesToCopy;
125  a_BytesAvailable -= l_BytesToCopy;
126  m_BytesRemaining -= l_BytesToCopy;
127  if (m_BytesRemaining == 0) {
128  // A subsequent chunk of data is ready
129  if (Deserialize() == false) {
130  // Failed to parse the received bytes
131  l_bSuccess = false;
132  break;
133  } // else
134  } // if
135  } // while
136 
137  return l_bSuccess;
138  }
139 
140 protected:
151  virtual bool Deserialize() = 0;
152 
153  // Members
154  std::vector<unsigned char> m_Buffer;
156 };
157 
158 #endif // FRAME_H
virtual bool Deserialize()=0
The purely virtual deserializer method.
virtual ~Frame()
The destructor of Frame objects.
Definition: Frame.h:69
bool ParseBytes(const unsigned char *a_ReadBuffer, size_t &a_ReadBufferOffset, size_t &a_BytesAvailable)
Deliver a chunk of received bytes in the phase of deserialization.
Definition: Frame.h:107
size_t BytesNeeded() const
Query the amount of outstanding data during reception for frame assembly.
Definition: Frame.h:91
Frame()
The constructor of Frame objects.
Definition: Frame.h:65
std::vector< unsigned char > m_Buffer
The buffer containing partly received frames or higher-layer payload.
Definition: Frame.h:154
virtual const std::vector< unsigned char > Serialize() const =0
The purely virtual serializer method.
size_t m_BytesRemaining
The amount of bytes required to finalize frame assembly during reception.
Definition: Frame.h:155
Class Frame.
Definition: Frame.h:59