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
10SecuredMessageView::SecuredMessageView(const SecuredMessage& msg) :
11 m_variant(msg)
12{
13}
14
15struct ItsAidVisitor : boost::static_visitor<ItsAid>
16{
17 ItsAid operator()(const v2::SecuredMessage& msg) const
18 {
19 return get_its_aid(msg);
20 }
21
22 ItsAid operator()(const v3::SecuredMessage& msg) const
23 {
24 return msg.its_aid();
25 }
26};
27
28ItsAid get_its_aid(const SecuredMessage& msg)
29{
30 return boost::apply_visitor(ItsAidVisitor(), msg);
31}
32
33ItsAid get_its_aid(const SecuredMessageView& msg)
34{
35 return boost::apply_visitor(ItsAidVisitor(), msg);
36}
37
38std::size_t get_size(const SecuredMessage& msg)
39{
40 struct Visitor : boost::static_visitor<std::size_t>
41 {
42 std::size_t operator()(const v2::SecuredMessage& msg) const
43 {
44 return get_size(msg);
45 }
46
47 std::size_t operator()(const v3::SecuredMessage& msg) const
48 {
49 return msg.size();
50 }
51 };
52
53 return boost::apply_visitor(Visitor(), msg);
54}
55
56struct SerializeVisitor : boost::static_visitor<void>
57{
58 OutputArchive& m_archive;
59 SerializeVisitor(OutputArchive& ar) : m_archive(ar) {}
60
61 void operator()(const v2::SecuredMessage& msg)
62 {
63 serialize(m_archive, msg);
64 }
65
66 void operator()(const v3::SecuredMessage& msg)
67 {
68 serialize(m_archive, msg);
69 }
70};
71
72void serialize(OutputArchive& ar, const SecuredMessage& msg)
73{
74 SerializeVisitor visitor { ar };
75 boost::apply_visitor(visitor, msg);
76}
77
78void serialize(OutputArchive& ar, const SecuredMessageView& msg)
79{
80 SerializeVisitor visitor { ar };
81 boost::apply_visitor(visitor, msg);
82}
83
84std::size_t deserialize(InputArchive& ar, SecuredMessage& msg)
85{
86 struct Visitor : boost::static_visitor<std::size_t>
87 {
88 InputArchive& m_archive;
89 Visitor(InputArchive& ar) : m_archive(ar) {}
90
91 std::size_t operator()(v2::SecuredMessage& msg)
92 {
93 return deserialize(m_archive, msg);
94 }
95
96 std::size_t operator()(v3::SecuredMessage& msg)
97 {
98 return deserialize(m_archive, msg);
99 }
100 };
101
102 Visitor visitor(ar);
103 return boost::apply_visitor(visitor, msg);
104}
105
106struct PayloadCopyVisitor : boost::static_visitor<PacketVariant>
107{
108 PacketVariant operator()(const v2::SecuredMessage& msg) const
109 {
110 return msg.payload.data;
111 }
112
113 PacketVariant operator()(const v3::SecuredMessage& msg) const
114 {
115 return msg.payload();
116 }
117};
118
119PacketVariant get_payload_copy(const SecuredMessage& msg)
120{
121 return boost::apply_visitor(PayloadCopyVisitor {}, msg);
122}
123
124PacketVariant get_payload_copy(const SecuredMessageView& msg)
125{
126 return boost::apply_visitor(PayloadCopyVisitor {}, msg);
127}
128
129} // namespace security
130} // namespace vanetza