Vanetza
Loading...
Searching...
No Matches
location_checker.cpp
1#include <vanetza/security/v3/asn1_types.hpp>
2#include <vanetza/security/v3/distance.hpp>
3#include <vanetza/security/v3/geometry.hpp>
4#include <vanetza/security/v3/location_checker.hpp>
5
6namespace vanetza
7{
8namespace security
9{
10namespace v3
11{
12
13bool AllowLocationChecker::valid_at_location(const asn1::EtsiTs103097Certificate& cert, const PositionFix& location) const
14{
15 return true;
16}
17
18bool DenyLocationChecker::valid_at_location(const asn1::EtsiTs103097Certificate& cert, const PositionFix& location) const
19{
20 return false;
21}
22
23bool DefaultLocationChecker::valid_at_location(const asn1::EtsiTs103097Certificate& cert, const PositionFix& location) const
24{
25 const asn1::GeographicRegion* region = cert.toBeSigned.region;
26 if (region) {
27 switch (region->present) {
28 case Vanetza_Security_GeographicRegion_PR_circularRegion:
29 return is_inside(location, region->choice.circularRegion);
30 case Vanetza_Security_GeographicRegion_PR_rectangularRegion:
31 return is_inside(location, region->choice.rectangularRegion);
32 case Vanetza_Security_GeographicRegion_PR_polygonalRegion:
33 return is_inside(location, region->choice.polygonalRegion);
34 return false;
35 case Vanetza_Security_GeographicRegion_PR_identifiedRegion:
36 // not supported yet
37 return false;
38 default:
39 // unknown region restriction
40 return false;
41 }
42 } else {
43 // no region restriction applies
44 return true;
45 }
46 return true;
47}
48
49} // namespace v3
50} // namespace security
51} // namespace vanetza