Vanetza
Loading...
Searching...
No Matches
indication_context.hpp
1
#ifndef INDICATION_CONTEXT_HPP_UWOD2BSQ
2
#define INDICATION_CONTEXT_HPP_UWOD2BSQ
3
4
#include <vanetza/geonet/data_indication.hpp>
5
#include <vanetza/geonet/link_layer.hpp>
6
#include <vanetza/geonet/packet.hpp>
7
#include <vanetza/geonet/parser.hpp>
8
#include <vanetza/geonet/pdu.hpp>
9
#include <vanetza/geonet/variant_pdu.hpp>
10
#include <vanetza/security/secured_message.hpp>
11
#include <boost/optional/optional.hpp>
12
13
namespace
vanetza
14
{
15
namespace
geonet
16
{
17
18
/**
19
* IndicationContext is used for parsing incoming packets.
20
* For each indication (packet reception) a new context should be created.
21
*/
22
class
IndicationContext
23
{
24
public
:
25
using
UpPacketPtr = std::unique_ptr<UpPacket>;
26
using
SecuredMessage = security::SecuredMessage;
27
using
LinkLayer =
geonet::LinkLayer
;
28
29
// parser commands
30
virtual
const
BasicHeader
* parse_basic() = 0;
31
virtual
const
CommonHeader
* parse_common() = 0;
32
virtual
const
SecuredMessage* parse_secured() = 0;
33
virtual
boost::optional<HeaderConstRefVariant> parse_extended(HeaderType) = 0;
34
35
// access to data structures related to indication
36
virtual
const
VariantPdu
& pdu()
const
= 0;
37
virtual
VariantPdu
& pdu() = 0;
38
virtual
const
LinkLayer& link_layer()
const
= 0;
39
virtual
DataIndication
& service_primitive() = 0;
40
41
/**
42
* Finish usage of IndicationContext and release owned packet
43
* \return owned packet
44
*/
45
virtual
UpPacketPtr
finish
() = 0;
46
47
virtual
~IndicationContext
() =
default
;
48
};
49
50
51
/**
52
* IndicationContextBasic represents the first phase of packet reception,
53
* i.e. it is the context for unsecured headers
54
*/
55
class
IndicationContextBasic :
public
IndicationContext
56
{
57
public
:
58
IndicationContextBasic(
const
LinkLayer& ll) : m_link_layer(ll) {}
59
const
LinkLayer& link_layer()
const override
{
return
m_link_layer; }
60
DataIndication
& service_primitive()
override
{
return
m_service_primitive; }
61
VariantPdu
& pdu()
override
{
return
m_pdu; }
62
const
VariantPdu
& pdu()
const override
{
return
m_pdu; }
63
64
protected
:
65
LinkLayer m_link_layer;
66
DataIndication
m_service_primitive;
67
VariantPdu
m_pdu;
68
};
69
70
class
IndicationContextDeserialize :
public
IndicationContextBasic
71
{
72
public
:
73
IndicationContextDeserialize(UpPacketPtr,
CohesivePacket
&,
const
LinkLayer
&);
74
const
BasicHeader
* parse_basic()
override
;
75
const
CommonHeader
* parse_common()
override
;
76
const
SecuredMessage* parse_secured()
override
;
77
boost::optional<HeaderConstRefVariant> parse_extended(HeaderType)
override
;
78
UpPacketPtr
finish
()
override
;
79
80
private
:
81
UpPacketPtr m_packet;
82
CohesivePacket
& m_cohesive_packet;
83
Parser
m_parser;
84
};
85
86
class
IndicationContextCast :
public
IndicationContextBasic
87
{
88
public
:
89
IndicationContextCast(UpPacketPtr,
ChunkPacket
&,
const
LinkLayer
&);
90
const
BasicHeader
* parse_basic()
override
;
91
const
CommonHeader
* parse_common()
override
;
92
const
SecuredMessage* parse_secured()
override
;
93
boost::optional<HeaderConstRefVariant> parse_extended(HeaderType)
override
;
94
UpPacketPtr
finish
()
override
;
95
96
private
:
97
UpPacketPtr m_packet;
98
};
99
100
101
/**
102
* IndicationContextSecured is used for the (optional) second phase of packet reception,
103
* i.e. handling the payload contained in a secured message's payload
104
*/
105
class
IndicationContextSecured :
public
IndicationContext
106
{
107
public
:
108
IndicationContextSecured(
IndicationContextBasic
& parent) : m_parent(parent) {}
109
const
LinkLayer& link_layer()
const override
{
return
m_parent.link_layer(); }
110
DataIndication
& service_primitive()
override
{
return
m_parent.service_primitive(); }
111
VariantPdu
& pdu()
override
{
return
m_parent.pdu(); }
112
const
VariantPdu
& pdu()
const override
{
return
m_parent.pdu(); }
113
const
BasicHeader
* parse_basic()
override
{
return
nullptr
; }
114
const
SecuredMessage* parse_secured()
override
{
return
nullptr
; }
115
116
protected
:
117
IndicationContextBasic
& m_parent;
118
};
119
120
class
IndicationContextSecuredDeserialize :
public
IndicationContextSecured
121
{
122
public
:
123
IndicationContextSecuredDeserialize(
IndicationContextBasic
&,
CohesivePacket
&);
124
const
CommonHeader
* parse_common()
override
;
125
boost::optional<HeaderConstRefVariant> parse_extended(HeaderType)
override
;
126
UpPacketPtr
finish
()
override
;
127
128
private
:
129
CohesivePacket
& m_packet;
130
Parser
m_parser;
131
};
132
133
class
IndicationContextSecuredCast :
public
IndicationContextSecured
134
{
135
public
:
136
IndicationContextSecuredCast(
IndicationContextBasic
&,
ChunkPacket
&);
137
const
CommonHeader
* parse_common()
override
;
138
boost::optional<HeaderConstRefVariant> parse_extended(HeaderType)
override
;
139
UpPacketPtr
finish
()
override
;
140
141
private
:
142
UpPacketPtr m_packet;
143
};
144
145
}
// namespace geonet
146
}
// namespace vanetza
147
148
#endif
/* INDICATION_CONTEXT_HPP_UWOD2BSQ */
149
vanetza::ChunkPacket
ChunckPacket is a packet consisting of several memory chunks.
Definition
chunk_packet.hpp:19
vanetza::CohesivePacket
Definition
cohesive_packet.hpp:16
vanetza::geonet::IndicationContextBasic
Definition
indication_context.hpp:56
vanetza::geonet::IndicationContextCast::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:86
vanetza::geonet::IndicationContextDeserialize::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:47
vanetza::geonet::IndicationContextSecuredCast::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:171
vanetza::geonet::IndicationContextSecuredDeserialize::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:112
vanetza::geonet::IndicationContext
Definition
indication_context.hpp:23
vanetza::geonet::IndicationContext::finish
virtual UpPacketPtr finish()=0
vanetza::geonet::Parser
Definition
parser.hpp:23
vanetza::geonet::VariantPdu
Definition
variant_pdu.hpp:17
vanetza::geonet::BasicHeader
BasicHeader specified in ETSI EN 302 636-4-1 v1.2.1, section 8.6.
Definition
basic_header.hpp:27
vanetza::geonet::CommonHeader
Definition
common_header.hpp:28
vanetza::geonet::DataIndication
GN-DATA.indication.
Definition
data_indication.hpp:22
vanetza::geonet::LinkLayer
Definition
link_layer.hpp:12
vanetza
geonet
indication_context.hpp
Generated on
for Vanetza by
1.14.0