Vanetza
 
Loading...
Searching...
No Matches
packet.cpp
1#include <vanetza/net/packet.hpp>
2
3namespace vanetza
4{
5
6std::unique_ptr<DownPacket> duplicate(const PacketVariant& packet)
7{
8 struct duplication_visitor : public boost::static_visitor<>
9 {
10 void operator()(const CohesivePacket& packet)
11 {
12 m_duplicate.reset(new ChunkPacket());
13 for (auto layer : osi_layers) {
14 const auto source = packet[layer];
15 auto& dest = m_duplicate->layer(layer);
16 dest = ByteBuffer(source.begin(), source.end());
17 }
18 }
19
20 void operator()(const ChunkPacket& packet)
21 {
22 m_duplicate = duplicate(packet);
23 }
24
25 std::unique_ptr<ChunkPacket> m_duplicate;
26 };
27
28 duplication_visitor visitor;
29 boost::apply_visitor(visitor, packet);
30 return std::move(visitor.m_duplicate);
31}
32
33std::unique_ptr<DownPacket> duplicate(const DownPacket& packet)
34{
35 return std::unique_ptr<DownPacket> { new DownPacket(packet) };
36}
37
38} // namespace vanetza