1#ifndef PACKET_VISITOR_HPP_UYSI8HXZ
2#define PACKET_VISITOR_HPP_UYSI8HXZ
4#include <vanetza/asn1/asn1c_conversion.hpp>
5#include <vanetza/common/byte_buffer.hpp>
6#include <vanetza/net/chunk_packet.hpp>
7#include <vanetza/net/cohesive_packet.hpp>
8#include <vanetza/net/osi_layer.hpp>
9#include <vanetza/net/packet_variant.hpp>
10#include <boost/variant/static_visitor.hpp>
29class PacketVisitor :
public boost::static_visitor<std::shared_ptr<const T>>
32 std::shared_ptr<const T> operator()(
const ChunkPacket& packet)
35 auto impl =
dynamic_cast<const byte_buffer_impl*
>(packet[OsiLayer::Application].ptr());
37 m_wrapper = impl->wrapper();
38 }
else if (m_deserialize_chunk) {
39 deserialize(create_byte_view(packet, m_start_layer, OsiLayer::Application));
48 deserialize(create_byte_view(packet, m_start_layer, OsiLayer::Application));
52 std::shared_ptr<const T> get_shared_wrapper()
const {
return m_wrapper; }
60 m_deserialize_chunk = flag;
70 m_start_layer = start;
76 auto tmp = std::make_shared<T>();
77 bool decoded = tmp->decode(range.begin().raw(), range.size());
78 m_wrapper = decoded ? tmp :
nullptr;
81 std::shared_ptr<const T> m_wrapper;
82 bool m_deserialize_chunk =
true;
83 OsiLayer m_start_layer = OsiLayer::Session;
ChunckPacket is a packet consisting of several memory chunks.
void start_deserialization_at(OsiLayer start)
void allow_chunk_deserialization(bool flag)