1#include <vanetza/security/secured_message.hpp>
2#include <boost/variant/apply_visitor.hpp>
3#include <boost/variant/static_visitor.hpp>
10SecuredMessageView::SecuredMessageView(
const SecuredMessage& msg) :
15struct ItsAidVisitor : boost::static_visitor<ItsAid>
17 ItsAid operator()(
const v2::SecuredMessage& msg)
const
19 return get_its_aid(msg);
22 ItsAid operator()(
const v3::SecuredMessage& msg)
const
28ItsAid get_its_aid(
const SecuredMessage& msg)
30 return boost::apply_visitor(ItsAidVisitor(), msg);
33ItsAid get_its_aid(
const SecuredMessageView& msg)
35 return boost::apply_visitor(ItsAidVisitor(), msg);
38std::size_t get_size(
const SecuredMessage& msg)
40 struct Visitor : boost::static_visitor<std::size_t>
42 std::size_t operator()(
const v2::SecuredMessage& msg)
const
47 std::size_t operator()(
const v3::SecuredMessage& msg)
const
53 return boost::apply_visitor(Visitor(), msg);
56struct SerializeVisitor : boost::static_visitor<void>
58 OutputArchive& m_archive;
59 SerializeVisitor(OutputArchive& ar) : m_archive(ar) {}
61 void operator()(
const v2::SecuredMessage& msg)
63 serialize(m_archive, msg);
66 void operator()(
const v3::SecuredMessage& msg)
68 serialize(m_archive, msg);
72void serialize(OutputArchive& ar,
const SecuredMessage& msg)
74 SerializeVisitor visitor { ar };
75 boost::apply_visitor(visitor, msg);
78void serialize(OutputArchive& ar,
const SecuredMessageView& msg)
80 SerializeVisitor visitor { ar };
81 boost::apply_visitor(visitor, msg);
84std::size_t deserialize(InputArchive& ar, SecuredMessage& msg)
86 struct Visitor : boost::static_visitor<std::size_t>
88 InputArchive& m_archive;
89 Visitor(InputArchive& ar) : m_archive(ar) {}
91 std::size_t operator()(v2::SecuredMessage& msg)
93 return deserialize(m_archive, msg);
96 std::size_t operator()(v3::SecuredMessage& msg)
98 return deserialize(m_archive, msg);
103 return boost::apply_visitor(visitor, msg);
106struct PayloadCopyVisitor : boost::static_visitor<PacketVariant>
108 PacketVariant operator()(
const v2::SecuredMessage& msg)
const
110 return msg.payload.data;
113 PacketVariant operator()(
const v3::SecuredMessage& msg)
const
115 return msg.payload();
119PacketVariant get_payload_copy(
const SecuredMessage& msg)
121 return boost::apply_visitor(PayloadCopyVisitor {}, msg);
124PacketVariant get_payload_copy(
const SecuredMessageView& msg)
126 return boost::apply_visitor(PayloadCopyVisitor {}, msg);