Vanetza
 
Loading...
Searching...
No Matches
proxy_header.hpp
1#ifndef PROXY_HEADER_HPP_JWTV3BDT
2#define PROXY_HEADER_HPP_JWTV3BDT
3
4#include <boost/range/iterator_range.hpp>
6#include <cstdint>
7
8namespace vanetza
9{
10
11#ifndef _MSC_VER
12// GCC and Clang support packed attribute
13#define PACKED_STRUCT(name, block) struct name { block } __attribute__((__packed__));
14#else
15// MSVC variant
16#define PACKED_STRUCT(name, block) \
17__pragma(pack(push, 1)) \
18struct name { block }; \
19__pragma(pack(pop))
20#endif
21
22PACKED_STRUCT(ProxyHeader,
23 /** offset in bytes to payload's first byte, counting from packet start */
24 uint16_t payload_offset;
25
26 /** length of payload in bytes */
27 uint32_t payload_size;
28
29 /** signal power in dBm, fixed point format 8.8 = trunc(double * 256) */
30 int16_t signal_power;
31
32 /** access category (transmission only) */
33 uint8_t access_category;
34)
35
36static_assert(sizeof(ProxyHeader) == 9, "ProxyHeader has invalid size");
37
38double get_signal_power(const ProxyHeader&);
39void set_signal_power(ProxyHeader&, double dbm);
40access::AccessCategory get_access_category(const ProxyHeader&);
41void set_access_category(ProxyHeader&, access::AccessCategory);
42boost::iterator_range<const uint8_t*> get_payload(const ProxyHeader&, std::size_t);
43void set_payload(ProxyHeader&, std::size_t);
44
45} // namespace vanetza
46
47#endif /* PROXY_HEADER_HPP_JWTV3BDT */
48