Vanetza
 
Loading...
Searching...
No Matches
proxy_header.cpp
1#include "proxy_header.hpp"
2#include <vanetza/common/byte_order.hpp>
3#include <cassert>
4
5namespace vanetza
6{
7
8double get_signal_power(const ProxyHeader& header)
9{
10 double power = ntoh(header.signal_power);
11 power /= 256.0;
12 return power;
13}
14
15void set_signal_power(ProxyHeader& header, double dbm)
16{
17 auto power = static_cast<decltype(ProxyHeader::signal_power)>(dbm * 256.0);
18 header.signal_power = hton(power);
19}
20
21access::AccessCategory get_access_category(const ProxyHeader& header)
22{
23 return static_cast<access::AccessCategory>(header.access_category & 0x07);
24}
25
26void set_access_category(ProxyHeader& header, access::AccessCategory ac)
27{
28 header.access_category = static_cast<uint8_t>(ac);
29}
30
31boost::iterator_range<const uint8_t*> get_payload(const ProxyHeader& header, std::size_t size)
32{
33 const auto payload_offset = ntoh(header.payload_offset);
34 const auto payload_size = ntoh(header.payload_size);
35
36 assert(size >= payload_offset + payload_size);
37 assert(payload_offset >= sizeof(ProxyHeader));
38
39 const uint8_t* begin = reinterpret_cast<const uint8_t*>(&header);
40 const uint8_t* end = begin;
41
42 if (size >= payload_offset + payload_size) {
43 begin += payload_offset;
44 end = begin + payload_size;
45 }
46
47 return boost::make_iterator_range(begin, end);
48}
49
50void set_payload(ProxyHeader& header, std::size_t size)
51{
52 header.payload_offset = hton<decltype(header.payload_offset)>(sizeof(ProxyHeader));
53 header.payload_size = hton<decltype(header.payload_size)>(size);
54}
55
56} // namespace vanetza
57