Vanetza
 
Loading...
Searching...
No Matches
secured_message.cpp
1#include <vanetza/security/secured_message.hpp>
2#include <boost/variant/apply_visitor.hpp>
3#include <boost/variant/static_visitor.hpp>
4
5namespace vanetza
6{
7namespace security
8{
9
10ItsAid get_its_aid(const SecuredMessage& msg)
11{
12 struct Visitor : boost::static_visitor<ItsAid>
13 {
14 ItsAid operator()(const v2::SecuredMessage& msg) const
15 {
16 return get_its_aid(msg);
17 }
18
19 ItsAid operator()(const v3::SecuredMessage& msg) const
20 {
21 return msg.its_aid();
22 }
23 };
24
25 return boost::apply_visitor(Visitor(), msg);
26}
27
28std::size_t get_size(const SecuredMessage& msg)
29{
30 struct Visitor : boost::static_visitor<std::size_t>
31 {
32 std::size_t operator()(const v2::SecuredMessage& msg) const
33 {
34 return get_size(msg);
35 }
36
37 std::size_t operator()(const v3::SecuredMessage& msg) const
38 {
39 return msg.size();
40 }
41 };
42
43 return boost::apply_visitor(Visitor(), msg);
44}
45
46void serialize(OutputArchive& ar, const SecuredMessage& msg)
47{
48 struct Visitor : boost::static_visitor<void>
49 {
50 OutputArchive& m_archive;
51 Visitor(OutputArchive& ar) : m_archive(ar) {}
52
53 void operator()(const v2::SecuredMessage& msg)
54 {
55 serialize(m_archive, msg);
56 }
57
58 void operator()(const v3::SecuredMessage& msg)
59 {
60 serialize(m_archive, msg);
61 }
62 };
63
64 Visitor visitor(ar);
65 boost::apply_visitor(visitor, msg);
66}
67
68std::size_t deserialize(InputArchive& ar, SecuredMessage& msg)
69{
70 struct Visitor : boost::static_visitor<std::size_t>
71 {
72 InputArchive& m_archive;
73 Visitor(InputArchive& ar) : m_archive(ar) {}
74
75 std::size_t operator()(v2::SecuredMessage& msg)
76 {
77 return deserialize(m_archive, msg);
78 }
79
80 std::size_t operator()(v3::SecuredMessage& msg)
81 {
82 return deserialize(m_archive, msg);
83 }
84 };
85
86 Visitor visitor(ar);
87 return boost::apply_visitor(visitor, msg);
88}
89
90PacketVariant get_payload_copy(const SecuredMessage& msg)
91{
92 struct Visitor : boost::static_visitor<PacketVariant>
93 {
94 PacketVariant operator()(const v2::SecuredMessage& msg) const
95 {
96 return msg.payload.data;
97 }
98
99 PacketVariant operator()(const v3::SecuredMessage& msg) const
100 {
101 return msg.payload();
102 }
103 };
104
105 return boost::apply_visitor(Visitor {}, msg);
106}
107
108} // namespace security
109} // namespace vanetza