forked from rdkcentral/rdkservices
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLocationService.h
138 lines (118 loc) · 4.61 KB
/
LocationService.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* If not stated otherwise in this file or this component's LICENSE file the
* following copyright and licenses apply:
*
* Copyright 2020 RDK Management
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef LOCATIONSYNC_LOCATIONSERVICE_H
#define LOCATIONSYNC_LOCATIONSERVICE_H
#include "Module.h"
namespace WPEFramework {
namespace Plugin {
struct IGeography;
class EXTERNAL LocationService
: public PluginHost::ISubSystem::ILocation,
public PluginHost::ISubSystem::IInternet,
public Web::WebLinkType<Core::SocketStream, Web::Response, Web::Request, Core::ProxyPoolType<Web::Response>&> {
private:
enum state {
IDLE,
ACTIVE,
IPV6_INPROGRESS,
IPV4_INPROGRESS,
LOADED,
FAILED
};
using Job = Core::ThreadPool::JobType<LocationService>;
private:
LocationService() = delete;
LocationService(const LocationService&) = delete;
LocationService& operator=(const LocationService&) = delete;
typedef Web::WebLinkType<Core::SocketStream, Web::Response, Web::Request, Core::ProxyPoolType<Web::Response>&> BaseClass;
public:
LocationService(Core::IDispatchType<void>* update);
virtual ~LocationService();
public:
BEGIN_INTERFACE_MAP(LocationService)
INTERFACE_ENTRY(PluginHost::ISubSystem::ILocation)
INTERFACE_ENTRY(PluginHost::ISubSystem::IInternet)
END_INTERFACE_MAP
// Retry TimeSpan is in Seconds.
static uint32_t IsSupported(const string& remoteNode);
uint32_t Probe(const string& remoteNode, const uint32_t retries, const uint32_t retryTimeSpan);
void Stop();
/*
* ------------------------------------------------------------------------------------------------------------
* ISubSystem::INetwork methods
* ------------------------------------------------------------------------------------------------------------
*/
virtual string PublicIPAddress() const
{
return (_publicIPAddress);
}
virtual network_type NetworkType() const
{
return (_publicIPAddress.empty() == true ? PluginHost::ISubSystem::IInternet::UNKNOWN : (Core::NodeId::IsIPV6Enabled() ? PluginHost::ISubSystem::IInternet::IPV6 : PluginHost::ISubSystem::IInternet::IPV4));
}
/*
* ------------------------------------------------------------------------------------------------------------
* ISubSystem::ILocation methods
* ------------------------------------------------------------------------------------------------------------
*/
virtual string TimeZone() const
{
return (_timeZone);
}
virtual string Country() const
{
return (_country);
}
virtual string Region() const
{
return (_region);
}
virtual string City() const
{
return (_city);
}
private:
// Notification of a Partial Request received, time to attach a body..
virtual void LinkBody(Core::ProxyType<Web::Response>& element) override;
virtual void Received(Core::ProxyType<Web::Response>& element) override;
virtual void Send(const Core::ProxyType<Web::Request>& element) override;
// Signal a state change, Opened, Closed or Accepted
virtual void StateChange() override;
friend Core::ThreadPool::JobType<LocationService&>;
void Dispatch();
private:
Core::CriticalSection _adminLock;
state _state;
string _remoteId;
Core::NodeId _sourceNode;
uint32_t _tryInterval;
uint32_t _retries;
Core::IDispatch* _callback;
string _publicIPAddress;
string _timeZone;
string _country;
string _region;
string _city;
Core::WorkerPool::JobType<LocationService&> _activity;
Core::ProxyType<IGeography> _infoCarrier;
Core::ProxyType<Web::Request> _request;
};
}
} // namespace WPEFramework:Plugin
#endif // LOCATIONSYNC_LOCATIONSERVICE_H