Vanetza
 
Loading...
Searching...
No Matches
data_request.hpp
1#ifndef DATA_REQUEST_HPP_3JYISVXB
2#define DATA_REQUEST_HPP_3JYISVXB
3
4#include <vanetza/common/its_aid.hpp>
5#include <vanetza/geonet/address.hpp>
6#include <vanetza/geonet/areas.hpp>
7#include <vanetza/geonet/interface.hpp>
8#include <vanetza/geonet/lifetime.hpp>
9#include <vanetza/geonet/mib.hpp>
10#include <vanetza/geonet/traffic_class.hpp>
11#include <vanetza/units/time.hpp>
12#include <boost/optional.hpp>
13#include <boost/variant.hpp>
14
15namespace vanetza
16{
17
18// forward declaration
19namespace btp { struct DataRequestB; }
20
21namespace geonet
22{
23
25{
26 DataRequest(const MIB& mib, ItsAid its_aid = 0) :
27 upper_protocol(UpperProtocol::BTP_A),
28 communication_profile(CommunicationProfile::Unspecified),
29 its_aid(its_aid),
30 maximum_lifetime(mib.itsGnDefaultPacketLifetime),
31 max_hop_limit(mib.itsGnDefaultHopLimit),
32 traffic_class(mib.itsGnDefaultTrafficClass)
33 {}
34
36 {
37 units::Duration interval;
38 units::Duration maximum;
39 };
40
41 UpperProtocol upper_protocol;
42 CommunicationProfile communication_profile;
43 ItsAid its_aid;
44 Lifetime maximum_lifetime;
45 boost::optional<Repetition> repetition;
46 unsigned max_hop_limit;
47 TrafficClass traffic_class;
48};
49
50/**
51 * \brief Decrement maximum repetition by one interval
52 * \param repetition Repetition data structure
53 */
54void decrement_by_one(DataRequest::Repetition& repetition);
55
56/**
57 * \brief Test if request has to be repeated at least once more
58 * \param request DataRequest
59 * \return true if there is at least one repetition left
60 */
61bool has_further_repetition(const DataRequest&);
62
63/**
64 * \brief Test if at least one repetition is outstanding
65 * \param repetition
66 * \return true if there is at least one repetition left
67 */
68bool has_further_repetition(const DataRequest::Repetition&);
69
71{
72 using DataRequest::DataRequest;
73 Address destination;
74};
75
77{
78 using DataRequest::DataRequest;
79 Area destination;
80};
81
83{
84 using DataRequestWithAddress::DataRequestWithAddress;
85};
86
88{
89 using DataRequestWithArea::DataRequestWithArea;
90};
91
93{
94 using DataRequestWithArea::DataRequestWithArea;
95};
96
98{
99 using DataRequest::DataRequest;
100};
101
103{
104 using DataRequest::DataRequest;
105};
106
107using DataRequestVariant =
108 boost::variant<
114 >;
115
116/**
117 * Get access to common base data request class of all variants
118 * \param variant DataRequestVariant object
119 * \return reference to underlying DataRequest
120 */
121DataRequest& access_request(DataRequestVariant&);
122
123/**
124 * Copy request parameters from BTP-B request
125 * \param btp BTP-B data request
126 * \param gn GeoNet destination request
127 */
128void copy_request_parameters(const btp::DataRequestB& btp, DataRequest& gn);
129void copy_request_parameters(const btp::DataRequestB& btp, DataRequestWithAddress& gn);
130void copy_request_parameters(const btp::DataRequestB& btp, DataRequestWithArea& gn);
131
132} // namespace geonet
133} // namespace vanetza
134
135#endif /* DATA_REQUEST_HPP_3JYISVXB */