Vanetza
 
Loading...
Searching...
No Matches
packet_variant.hpp
1#ifndef PACKET_VARIANT_HPP_LILZ0UWN
2#define PACKET_VARIANT_HPP_LILZ0UWN
3
4#include <vanetza/common/byte_view.hpp>
5#include <vanetza/common/serialization.hpp>
6#include <vanetza/net/chunk_packet.hpp>
7#include <vanetza/net/cohesive_packet.hpp>
8#include <boost/variant.hpp>
9
10namespace vanetza
11{
12
13using PacketVariant = boost::variant<ChunkPacket, CohesivePacket>;
14
15inline std::size_t
16size(const CohesivePacket& packet, OsiLayer from, OsiLayer to)
17{
18 return packet.size(from, to);
19}
20
21inline std::size_t
22size(const CohesivePacket& packet, OsiLayer layer)
23{
24 return packet.size(layer);
25}
26
27inline std::size_t
28size(const ChunkPacket& packet, OsiLayer from, OsiLayer to)
29{
30 return packet.size(from, to);
31}
32
33inline std::size_t
34size(const ChunkPacket& packet, OsiLayer layer)
35{
36 return packet[layer].size();
37}
38
39/**
40 * Create a view of a packet's bytes assigned to a certain layer
41 * \param packet
42 * \param layer
43 * \return a byte view, possibly empty
44 */
45byte_view_range create_byte_view(const ChunkPacket&, OsiLayer);
46byte_view_range create_byte_view(const CohesivePacket&, OsiLayer);
47
48/**
49 * Create a byte view for a sub-range of layers
50 * \param packet
51 * \param from first byte will be from this layer
52 * \param to last byte will be from this layer
53 * \return a byte view
54 */
55byte_view_range create_byte_view(const ChunkPacket& packet, OsiLayer from, OsiLayer to);
56byte_view_range create_byte_view(const CohesivePacket& packet, OsiLayer from, OsiLayer to);
57
58/**
59 * Serialize a whole packet from physical to application layer
60 * \param archive destination archive
61 * \param packet source packet
62 */
63void serialize(OutputArchive&, const ChunkPacket&);
64void serialize(OutputArchive&, const CohesivePacket&);
65
66} // namespace vanetza
67
68namespace boost
69{
70
71// PacketVariant is only a type alias, so we need this quirk for proper name lookup
72std::size_t size(const vanetza::PacketVariant&, vanetza::OsiLayer from, vanetza::OsiLayer to);
73std::size_t size(const vanetza::PacketVariant&, vanetza::OsiLayer);
74std::size_t size(const vanetza::PacketVariant&);
75vanetza::byte_view_range create_byte_view(const vanetza::PacketVariant&, vanetza::OsiLayer);
76vanetza::byte_view_range create_byte_view(const vanetza::PacketVariant&, vanetza::OsiLayer from, vanetza::OsiLayer to);
77void serialize(vanetza::OutputArchive&, const vanetza::PacketVariant&);
78
79} // namespace boost
80
81#endif /* PACKET_VARIANT_HPP_LILZ0UWN */
82