Vanetza
 
Loading...
Searching...
No Matches
payload.cpp
1#include <vanetza/security/v2/payload.hpp>
2#include <vanetza/security/v2/length_coding.hpp>
3
4namespace vanetza
5{
6namespace security
7{
8namespace v2
9{
10
11PayloadType get_type(const Payload& payload)
12{
13 return payload.type;
14}
15
16size_t get_size(const Payload& payload)
17{
18 size_t length = sizeof(PayloadType);
19 const size_t data = size(payload.data, OsiLayer::Network, max_osi_layer());
20 length += data;
21 length += length_coding_size(data);
22 return length;
23}
24
25size_t get_size(const ByteBuffer& buf)
26{
27 size_t size = buf.size();
28 size += length_coding_size(size);
29 return size;
30}
31
32void serialize(OutputArchive& ar, const Payload& payload)
33{
34 serialize(ar, payload.type);
35 serialize_length(ar, size(payload.data, OsiLayer::Network, max_osi_layer()));
36 serialize(ar, payload.data);
37}
38
39size_t deserialize(InputArchive& ar, Payload& payload)
40{
41 size_t size = sizeof(PayloadType);
42 PayloadType type;
43 deserialize(ar, type);
44 payload.type = type;
45
46 const auto data_length = deserialize_length(ar);
47 size += length_coding_size(data_length);
48 size += data_length;
49 ByteBuffer buf(data_length);
50 ar.load_binary(buf.data(), buf.size());
51 payload.data = CohesivePacket(std::move(buf), OsiLayer::Network);
52
53 return size;
54}
55
56} // namespace v2
57} // namespace security
58} // namespace vanetza