Vanetza
 
Loading...
Searching...
No Matches
secured_pdu.hpp
1#ifndef SECURED_PDU_HPP_TVERYI91
2#define SECURED_PDU_HPP_TVERYI91
3
4#include <vanetza/common/byte_buffer_convertible.hpp>
5#include <vanetza/geonet/common_header.hpp>
6#include <vanetza/geonet/extended_pdu.hpp>
7#include <vanetza/geonet/header_variant.hpp>
8#include <vanetza/geonet/serialization.hpp>
9
10namespace vanetza
11{
12namespace geonet
13{
14
15/**
16 * Secured PDU consists of GeoNetworking headers belonging to a secured message's payload
17 */
19{
20public:
21 template<typename EXT>
22 SecuredPdu(const ExtendedPdu<EXT>& pdu) :
23 common(pdu.common()), extended(pdu.extended())
24 {
25 }
26
27 SecuredPdu(const Pdu&);
28
29 CommonHeader common;
30 HeaderVariant extended;
31};
32
33void serialize(const SecuredPdu&, OutputArchive&);
34
35/**
36 * Cast secured PDU from byte buffer convertible
37 * \param conv source convertible
38 * \return secured PDU pointer or nullptr if cast failed
39 */
40SecuredPdu* secured_pdu_cast(ByteBufferConvertible&);
41
42} // namespace geonet
43
44namespace convertible
45{
46
47template<>
48struct byte_buffer_impl<geonet::SecuredPdu> : public byte_buffer
49{
51 void convert(ByteBuffer&) const override;
52 std::size_t size() const override;
53 std::unique_ptr<byte_buffer> duplicate() const override;
54
56};
57
58} // namespace convertible
59
60} // namespace vanetza
61
62#endif /* SECURED_PDU_HPP_TVERYI91 */
63