#ifndef PDU_HPP_PQEC9PDO #define PDU_HPP_PQEC9PDO #include #include #include #include #include namespace vanetza { namespace geonet { struct BasicHeader; struct CommonHeader; class Pdu; class ConstAccessiblePdu { public: using SecuredMessage = security::SecuredMessage; virtual const BasicHeader& basic() const = 0; virtual const CommonHeader& common() const = 0; virtual const SecuredMessage* secured() const = 0; virtual HeaderConstRefVariant extended_variant() const = 0; virtual std::unique_ptr clone() const = 0; virtual ~ConstAccessiblePdu() = default; }; class Pdu : public ConstAccessiblePdu { public: using ConstAccessiblePdu::basic; using ConstAccessiblePdu::common; using ConstAccessiblePdu::secured; virtual BasicHeader& basic() = 0; virtual CommonHeader& common() = 0; virtual SecuredMessage* secured() = 0; virtual void secured(const SecuredMessage&) = 0; }; void serialize(const ConstAccessiblePdu&, OutputArchive&); inline void serialize(const Pdu& pdu, OutputArchive& ar) { serialize(static_cast(pdu), ar); } std::size_t get_length(const ConstAccessiblePdu&); } // namespace geonet } // namespace vanetza #endif /* PDU_HPP_PQEC9PDO */