rogue
Loading...
Searching...
No Matches
Header.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_PROTOCOLS_RSSI_HEADER_H__
18#define __ROGUE_PROTOCOLS_RSSI_HEADER_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <memory>
24#include <string>
25
27
28namespace rogue {
29namespace protocols {
30namespace rssi {
31
46class Header {
47 private:
48 // Set 16-bit network-order integer at byte offset.
49 inline void setUInt16(uint8_t* data, uint8_t byte, uint16_t value);
50
51 // Get 16-bit network-order integer at byte offset.
52 inline uint16_t getUInt16(uint8_t* data, uint8_t byte);
53
54 // Set 32-bit network-order integer at byte offset.
55 inline void setUInt32(uint8_t* data, uint8_t byte, uint32_t value);
56
57 // Get 32-bit network-order integer at byte offset.
58 inline uint32_t getUInt32(uint8_t* data, uint8_t byte);
59
60 // Compute RSSI checksum over indicated header size.
61 uint16_t compSum(uint8_t* data, uint8_t size);
62
63 // Underlying frame carrying RSSI header bytes.
64 std::shared_ptr<rogue::interfaces::stream::Frame> frame_;
65
66 // Last transmit/update timestamp.
67 struct timeval time_;
68
69 // Number of times update() has been called.
70 uint32_t count_;
71
72 public:
74 static const int32_t HeaderSize = 8;
75
77 static const uint32_t SynSize = 24;
78
92 static std::shared_ptr<rogue::protocols::rssi::Header> create(
93 std::shared_ptr<rogue::interfaces::stream::Frame> frame);
94
104 explicit Header(std::shared_ptr<rogue::interfaces::stream::Frame> frame);
105
107 ~Header();
108
113 std::shared_ptr<rogue::interfaces::stream::Frame> getFrame();
114
119 bool verify();
120
122 void update();
123
128 struct timeval& getTime();
129
134 uint32_t count();
135
137 void rstTime();
138
143 std::string dump();
144
146 bool syn;
147
149 bool ack;
150
152 bool rst;
153
155 bool nul;
156
158 bool busy;
159
161 uint8_t sequence;
162
164 uint8_t acknowledge;
165
167 uint8_t version;
168
170 bool chk;
171
174
177
180
183
185 uint16_t nullTimeout;
186
189
192
194 uint8_t timeoutUnit;
195
197 uint32_t connectionId;
198};
199
200// Convienence
201typedef std::shared_ptr<rogue::protocols::rssi::Header> HeaderPtr;
202
203} // namespace rssi
204} // namespace protocols
205}; // namespace rogue
206
207#endif
RSSI header container and codec.
Definition Header.h:46
bool syn
SYN flag (synchronization/header-extension present).
Definition Header.h:146
~Header()
Destroys the header wrapper.
Definition Header.cpp:103
bool chk
CHK capability flag (SYN headers only).
Definition Header.h:170
std::string dump()
Returns a formatted string of header contents.
Definition Header.cpp:223
uint8_t maxCumulativeAck
Maximum cumulative ACK count (SYN headers only).
Definition Header.h:191
uint32_t connectionId
Connection ID (SYN headers only).
Definition Header.h:197
uint8_t maxRetransmissions
Maximum retransmissions (SYN headers only).
Definition Header.h:188
void update()
Encodes current field values into the frame and updates checksum.
Definition Header.cpp:154
static std::shared_ptr< rogue::protocols::rssi::Header > create(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Creates a header wrapper for an existing frame.
Definition Header.cpp:72
void rstTime()
Resets transmit timestamp to the current time.
Definition Header.cpp:218
uint8_t acknowledge
Acknowledge number field.
Definition Header.h:164
bool verify()
Verifies header checksum and initializes cached fields.
Definition Header.cpp:111
uint32_t count()
Returns the transmit count.
Definition Header.cpp:213
uint16_t retransmissionTimeout
Retransmission timeout (SYN headers only).
Definition Header.h:179
bool nul
NUL/keepalive flag.
Definition Header.h:155
uint16_t maxSegmentSize
Maximum segment size (SYN headers only).
Definition Header.h:176
static const uint32_t SynSize
Encoded RSSI SYN header size in bytes.
Definition Header.h:77
uint8_t version
Protocol version (SYN headers only).
Definition Header.h:167
uint8_t timeoutUnit
Timeout unit field (SYN headers only).
Definition Header.h:194
static const int32_t HeaderSize
Encoded RSSI non-SYN header size in bytes.
Definition Header.h:74
uint16_t nullTimeout
NULL/keepalive timeout (SYN headers only).
Definition Header.h:185
uint16_t cumulativeAckTimeout
Cumulative ACK timeout (SYN headers only).
Definition Header.h:182
struct timeval & getTime()
Returns the last transmit timestamp.
Definition Header.cpp:208
std::shared_ptr< rogue::interfaces::stream::Frame > getFrame()
Returns the underlying frame.
Definition Header.cpp:106
uint8_t maxOutstandingSegments
Maximum outstanding segments (SYN headers only).
Definition Header.h:173
uint8_t sequence
Sequence number field.
Definition Header.h:161
std::shared_ptr< rogue::protocols::rssi::Header > HeaderPtr
Definition Header.h:201