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 */
vanetza::ChunkPacket
ChunckPacket is a packet consisting of several memory chunks.
Definition
chunk_packet.hpp:19
vanetza::ChunkPacket::merge
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
Definition
chunk_packet.cpp:77
vanetza::ChunkPacket::size
std::size_t size() const
Definition
chunk_packet.cpp:44
vanetza::ChunkPacket::layer
ByteBufferConvertible & layer(OsiLayer ol)
Definition
chunk_packet.cpp:28
vanetza::CohesivePacket
Definition
cohesive_packet.hpp:16
vanetza::CohesivePacket::set_boundary
void set_boundary(OsiLayer, unsigned bytes)
Definition
cohesive_packet.cpp:51
vanetza::CohesivePacket::trim
void trim(OsiLayer from, unsigned bytes)
Definition
cohesive_packet.cpp:58
vanetza::geonet::IndicationContextBasic
Definition
indication_context.hpp:56
vanetza::geonet::IndicationContextCast
Definition
indication_context.hpp:87
vanetza::geonet::IndicationContextCast::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:86
vanetza::geonet::IndicationContextDeserialize
Definition
indication_context.hpp:71
vanetza::geonet::IndicationContextDeserialize::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:47
vanetza::geonet::IndicationContextSecuredCast
Definition
indication_context.hpp:134
vanetza::geonet::IndicationContextSecuredCast::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:171
vanetza::geonet::IndicationContextSecuredDeserialize
Definition
indication_context.hpp:121
vanetza::geonet::IndicationContextSecuredDeserialize::finish
UpPacketPtr finish() override
Definition
indication_context.cpp:112
vanetza::geonet::IndicationContextSecured
Definition
indication_context.hpp:106
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::Pdu
Definition
pdu.hpp:34
vanetza::geonet::SecuredPdu
Definition
secured_pdu.hpp:19
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.16.1