Vanetza
 
Loading...
Searching...
No Matches
variant_pdu.hpp
1#ifndef VARIANT_PDU_HPP_PHYRXMBW
2#define VARIANT_PDU_HPP_PHYRXMBW
3
4#include <vanetza/geonet/basic_header.hpp>
5#include <vanetza/geonet/common_header.hpp>
6#include <vanetza/geonet/header_variant.hpp>
7#include <vanetza/geonet/pdu.hpp>
8#include <vanetza/security/secured_message.hpp>
9#include <boost/optional/optional.hpp>
10
11namespace vanetza
12{
13namespace geonet
14{
15
16class VariantPdu : public Pdu
17{
18public:
19 using SecuredMessage = security::SecuredMessage;
20
21 VariantPdu() = default;
22 VariantPdu(const VariantPdu&);
23 VariantPdu& operator=(const VariantPdu&);
24 VariantPdu(const Pdu&);
25 VariantPdu& operator=(const Pdu&);
26
27 BasicHeader& basic() override;
28 const BasicHeader& basic() const override;
29 CommonHeader& common() override;
30 const CommonHeader& common() const override;
31 HeaderVariant& extended_variant();
32 HeaderConstRefVariant extended_variant() const override;
33 SecuredMessage* secured() override;
34 const SecuredMessage* secured() const override;
35 void secured(const SecuredMessage&) override;
36 std::unique_ptr<Pdu> clone() const override;
37
38private:
39 BasicHeader m_basic;
40 CommonHeader m_common;
41 HeaderVariant m_extended;
42 boost::optional<SecuredMessage> m_secured;
43};
44
45} // namespace geonet
46} // namespace vanetza
47
48#endif /* VARIANT_PDU_HPP_PHYRXMBW */
49
BasicHeader specified in ETSI EN 302 636-4-1 v1.2.1, section 8.6.