1#ifndef EXTENDED_PDU_HPP_TL2WFH9W
2#define EXTENDED_PDU_HPP_TL2WFH9W
4#include <vanetza/geonet/basic_header.hpp>
5#include <vanetza/geonet/common_header.hpp>
6#include <vanetza/geonet/pdu.hpp>
7#include <vanetza/geonet/serialization.hpp>
8#include <vanetza/common/byte_buffer.hpp>
9#include <vanetza/common/byte_buffer_sink.hpp>
10#include <vanetza/security/secured_message.hpp>
11#include <boost/iostreams/stream.hpp>
12#include <boost/optional/optional.hpp>
20template<
class HEADER>
class ExtendedPduConstRefs;
26 using SecuredMessage = security::SecuredMessage;
27 using ExtendedHeader = HEADER;
31 m_basic(pdu.m_basic), m_common(pdu.m_common), m_extended(pdu.m_extended),
32 m_secured(pdu.m_secured) {}
36 m_basic(request, mib), m_common(request, mib) {}
38 m_basic(basic), m_common(common), m_extended(extended) {}
40 const SecuredMessage& secured) :
41 m_basic(basic), m_common(common), m_extended(extended), m_secured(secured) {}
43 m_basic(pdu.basic()), m_common(pdu.common()), m_extended(pdu.extended()),
44 m_secured(pdu.secured() ? boost::make_optional(*pdu.secured()) : boost::none) {}
47 const BasicHeader& basic()
const override {
return m_basic; }
49 const CommonHeader& common()
const override {
return m_common; }
50 HeaderConstRefVariant extended_variant()
const override {
return m_extended; }
51 HEADER& extended() {
return m_extended; }
52 const HEADER& extended()
const {
return m_extended; }
53 SecuredMessage* secured()
override {
return m_secured.get_ptr(); }
54 const SecuredMessage* secured()
const override {
return m_secured.get_ptr(); }
55 void secured(
const SecuredMessage& smsg)
override
60 std::unique_ptr<Pdu> clone()
const override
62 return std::unique_ptr<ExtendedPdu> {
new ExtendedPdu(*
this) };
69 boost::optional<SecuredMessage> m_secured;
76 using SecuredMessage = security::SecuredMessage;
77 using ExtendedHeader = HEADER;
80 mr_basic(basic), mr_common(common), mr_extended(extended), mp_secured(
nullptr) {}
82 const SecuredMessage* secured) :
83 mr_basic(basic), mr_common(common), mr_extended(extended), mp_secured(secured) {}
85 const BasicHeader& basic()
const override {
return mr_basic; }
86 const CommonHeader& common()
const override {
return mr_common; }
87 HeaderConstRefVariant extended_variant()
const override {
return mr_extended; }
88 const HEADER& extended()
const {
return mr_extended; }
89 const SecuredMessage* secured()
const override {
return mp_secured; }
91 std::unique_ptr<Pdu> clone()
const override
93 return std::unique_ptr<ExtendedPdu<HEADER>> {
103 const HEADER& mr_extended;
104 const SecuredMessage* mp_secured;
113template<
class HEADER>
119 boost::iostreams::stream_buffer<byte_buffer_sink> stream(sink);
122 serialize(pdu.common(), ar);
123 serialize(pdu.extended(), ar);