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 static const std::size_t data_length_limit = 4096;
47 const auto data_length = deserialize_length(ar);
48 if (data_length <= data_length_limit) {
49 size += length_coding_size(data_length);
50 size += data_length;
51 ByteBuffer buf(data_length);
52 ar.load_binary(buf.data(), buf.size());
53 payload.data = CohesivePacket(std::move(buf), OsiLayer::Network);
54 } else {
55 ar.fail(InputArchive::ErrorCode::ExcessiveLength);
56 }
57
58 return size;
59}
60
61} // namespace v2
62} // namespace security
63} // namespace vanetza
Payload specified in TS 103 097 v1.2.1, section 5.2.
Definition payload.hpp:28