Vanetza
 
Loading...
Searching...
No Matches
data_confirm.hpp
1#ifndef DATA_CONFIRM_HPP_Z1WCMN8T
2#define DATA_CONFIRM_HPP_Z1WCMN8T
3
4#include <vanetza/geonet/mib.hpp>
5#include <vanetza/geonet/packet.hpp>
6#include <memory>
7
8namespace vanetza
9{
10namespace geonet
11{
12
13struct DataRequest;
14struct DataRequestWithArea;
15
17{
18 enum class ResultCode {
19 Accepted,
20 Rejected_Max_SDU_Size,
21 Rejected_Max_Lifetime,
22 Rejected_Min_Repetition_Interval,
23 Rejected_Unsupported_Traffic_Class,
24 Rejected_Max_Geo_Area_Size,
25 Rejected_Unspecified
26 };
27
28 DataConfirm() : result_code(ResultCode::Accepted) {}
29 DataConfirm(ResultCode code) : result_code(code) {}
30 bool accepted() const { return result_code == ResultCode::Accepted; }
31 bool rejected() const { return !accepted(); }
32 ResultCode result_code;
33};
34
35/**
36 * XOR result code with DataConfirm's result code.
37 * Replaces result code of DataConfirm only if new code is an error code.
38 * \param lhs Operate on this DataConfirm
39 * \param rhs XOR this ResultCode with lhs
40 * \return reference to modified DataConfirm
41 */
42DataConfirm& operator ^=(DataConfirm& lhs, DataConfirm::ResultCode rhs);
43
44DataConfirm::ResultCode validate_data_request(const DataRequest&, const MIB&);
45DataConfirm::ResultCode validate_data_request(const DataRequestWithArea&, const MIB&);
46DataConfirm::ResultCode validate_payload(const std::unique_ptr<DownPacket>&, const MIB&);
47
48} // namespace geonet
49} // namespace vanetza
50
51#endif /* DATA_CONFIRM_HPP_Z1WCMN8T */
52