Vanetza
 
Loading...
Searching...
No Matches
data_confirm.cpp
1#include "data_confirm.hpp"
2#include "data_request.hpp"
3
4namespace vanetza
5{
6namespace geonet
7{
8
9DataConfirm& operator ^=(DataConfirm& lhs, DataConfirm::ResultCode rhs)
10{
11 if (rhs != DataConfirm::ResultCode::Accepted) {
12 lhs.result_code = rhs;
13 }
14 return lhs;
15}
16
17DataConfirm::ResultCode validate_data_request(const DataRequest& req, const MIB& mib)
18{
19 DataConfirm::ResultCode result = DataConfirm::ResultCode::Rejected_Unspecified;
20
21 // TODO: traffic class validation
22 if (req.maximum_lifetime > mib.itsGnMaxPacketLifetime) {
23 result = DataConfirm::ResultCode::Rejected_Max_Lifetime;
24 } else if (req.repetition && req.repetition->interval < mib.itsGnMinPacketRepetitionInterval) {
25 result = DataConfirm::ResultCode::Rejected_Min_Repetition_Interval;
26 } else {
27 result = DataConfirm::ResultCode::Accepted;
28 }
29
30 return result;
31}
32
33DataConfirm::ResultCode validate_data_request(const DataRequestWithArea& req, const MIB& mib)
34{
35 if (area_size(req.destination) > mib.itsGnMaxGeoAreaSize) {
36 return DataConfirm::ResultCode::Rejected_Max_Geo_Area_Size;
37 } else {
38 return validate_data_request(static_cast<const DataRequest&>(req), mib);
39 }
40}
41
42DataConfirm::ResultCode validate_payload(const std::unique_ptr<DownPacket>& payload, const MIB& mib)
43{
44 DataConfirm::ResultCode result = DataConfirm::ResultCode::Rejected_Unspecified;
45
46 if (!payload) {
47 // leave code to unspecified
48 } else if (payload->size() > mib.itsGnMaxSduSize) {
49 result = DataConfirm::ResultCode::Rejected_Max_SDU_Size;
50 } else {
51 result = DataConfirm::ResultCode::Accepted;
52 }
53
54 return result;
55}
56
57} // namespace geonet
58} // namespace vanetza
59