merge with master
[framework/osp/net.git] / src / wifi / FNetWifiWifiManager.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file        FNetWifiWifiManager.cpp
20  * @brief       This is the implementation file for the WifiManager Class.
21  * @version     1.0
22  *
23  * This file contains the implementation of the WifiManager Class.
24  */
25
26 #include <unique_ptr.h>
27 #include <FBaseSysLog.h>
28 #include <FNetWifiWifiBssInfo.h>
29 #include <FNetWifiWifiManager.h>
30 #include <FSec_AccessController.h>
31 #include "FSys_SystemInfoImpl.h"
32 #include "FNetWifi_WifiManagerImpl.h"
33
34 static const wchar_t* _WIFI_FEATURE_INFO_KEY = L"http://tizen.org/feature/network.wifi";
35
36 using namespace std;
37 using namespace Tizen::Base;
38 using namespace Tizen::Base::Runtime;
39 using namespace Tizen::Base::Collection;
40 using namespace Tizen::Security;
41 using namespace Tizen::System;
42
43 namespace Tizen { namespace Net { namespace Wifi {
44
45 WifiManager::WifiManager(void)
46         :__pWifiManagerImpl(null)
47 {
48 }
49
50 WifiManager::~WifiManager(void)
51 {
52         delete __pWifiManagerImpl;
53 }
54
55 result
56 WifiManager::Construct(IWifiManagerEventListener& listener)
57 {
58         result r = E_SUCCESS;
59
60         bool isWifiSupported = false;
61         r = _SystemInfoImpl::GetSysInfo(_WIFI_FEATURE_INFO_KEY, isWifiSupported);
62
63         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS && isWifiSupported == true, E_UNSUPPORTED_OPERATION, "Wi-Fi is not supported.");
64
65         SysAssertf(__pWifiManagerImpl == null,
66                                 "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
67
68         unique_ptr<_WifiManagerImpl> pWifiManagerImpl(new (std::nothrow) _WifiManagerImpl());
69         SysTryReturnResult(NID_NET_WIFI, pWifiManagerImpl, E_OUT_OF_MEMORY, "Memory allocation failed.");
70
71         r = pWifiManagerImpl->Construct(listener);
72
73         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
74         __pWifiManagerImpl = pWifiManagerImpl.release();
75
76         return r;
77 }
78
79 result
80 WifiManager::Activate(void) const
81 {
82         result r = E_SUCCESS;
83
84         r = _AccessController::CheckUserPrivilege(_PRV_WIFI_ADMIN);
85         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
86
87         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
88
89         r = __pWifiManagerImpl->Activate();
90         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
91
92         return r;
93 }
94
95 result
96 WifiManager::Deactivate(void) const
97 {
98         result r = E_SUCCESS;
99
100         r = _AccessController::CheckUserPrivilege(_PRV_WIFI_ADMIN);
101         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
102
103         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
104
105         r = __pWifiManagerImpl->Deactivate();
106         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
107
108         return r;
109 }
110
111 WifiPowerStatus
112 WifiManager::GetPowerStatus(void) const
113 {
114         WifiPowerStatus wifiPowerStatus = WIFI_POWER_STATUS_OFF;
115
116         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
117
118         wifiPowerStatus = __pWifiManagerImpl->GetPowerStatus();
119
120         return wifiPowerStatus;
121 }
122
123 String
124 WifiManager::GetMacAddress(void) const
125 {
126         String macAddress(L"");
127
128         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
129
130         macAddress = __pWifiManagerImpl->GetMacAddress();
131
132         return macAddress;
133 }
134
135 bool
136 WifiManager::IsActivated(void) const
137 {
138         bool isActivated = false;
139
140         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
141
142         isActivated = __pWifiManagerImpl->IsActivated();
143
144         return isActivated;
145 }
146
147 bool
148 WifiManager::IsConnected(void) const
149 {
150         bool isConnected = false;
151
152         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
153
154         isConnected = __pWifiManagerImpl->IsConnected();
155
156         return isConnected;
157 }
158
159 result
160 WifiManager::Scan(void)
161 {
162         result r = E_SUCCESS;
163
164         r = _AccessController::CheckUserPrivilege(_PRV_WIFI_READ);
165         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
166
167         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
168
169         r = __pWifiManagerImpl->Scan();
170         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
171
172         return r;
173 }
174
175 result
176 WifiManager::Connect(const WifiBssInfo& targetApInfo)
177 {
178         result r = E_SUCCESS;
179
180         r = _AccessController::CheckUserPrivilege(_PRV_WIFI_ADMIN);
181         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
182
183         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
184
185         r = __pWifiManagerImpl->Connect(targetApInfo);
186         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
187
188         return r;
189 }
190
191 result
192 WifiManager::SetWifiSystemScanMode(WifiSystemScanMode mode)
193 {
194         result r = E_SUCCESS;
195
196         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
197
198         // Privilege check will be done by Impl class
199         r = __pWifiManagerImpl->SetWifiSystemScanMode(mode);
200         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
201
202         return r;
203 }
204
205 result
206 WifiManager::AddSystemMonitoringEventListener(IWifiSystemMonitoringEventListener& listener)
207 {
208         result r = E_SUCCESS;
209
210         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
211
212         // Privilege check will be done by Impl class
213         r = __pWifiManagerImpl->AddSystemMonitoringEventListener(listener);
214         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
215
216         return r;
217 }
218
219 result
220 WifiManager::RemoveSystemMonitoringEventListener(IWifiSystemMonitoringEventListener& listener)
221 {
222         result r = E_SUCCESS;
223
224         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
225
226         // Privilege check will be done by Impl class
227         r = __pWifiManagerImpl->RemoveSystemMonitoringEventListener(listener);
228         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
229
230         return r;
231 }
232
233 WifiConnectionState
234 WifiManager::GetConnectionState(void) const
235 {
236         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
237
238         return __pWifiManagerImpl->GetConnectionState();
239 }
240
241 WifiBssInfo*
242 WifiManager::GetConnectionTargetInfoN(void) const
243 {
244         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
245
246         return __pWifiManagerImpl->GetConnectionTargetInfoN();
247 }
248
249 result
250 WifiManager::UpdateBssInfo(const WifiBssInfo& bssInfo)
251 {
252         result r = E_SUCCESS;
253
254         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
255
256         // Privilege check will be done by Impl class
257         r = __pWifiManagerImpl->UpdateBssInfo(bssInfo);
258         SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
259
260         return r;
261 }
262
263 Tizen::Base::Collection::IList*
264 WifiManager::GetSystemScanResultN(void) const
265 {
266         SysAssertf(__pWifiManagerImpl != null, "Not yet constructed. Construct() should be called before use.");
267
268         return __pWifiManagerImpl->GetSystemScanResultN();
269 }
270
271 } } } // Tizen::Net::Wifi