Tizen 2.1 base
[framework/osp/net.git] / src / wifi / FNetWifi_WifiDirectDeviceInfoImpl.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    FNetWifiWifiDirectDeviceInfoImpl.cpp
20  * @brief   This is the implementation file for the _WifiDirectDeviceInfoImpl class.
21  *
22  * This header file contains implementation of the _WifiDirectDeviceInfoImpl class.
23  */
24
25 #include <FOspConfig.h>
26 #include <FNetWifiWifiDirectDeviceInfo.h>
27 #include <FNetIp4Address.h>
28 #include <FBaseSysLog.h>
29 #include "FNetWifi_WifiDirectDeviceInfoImpl.h"
30 #include "FNetWifi_WifiDirectUtility.h"
31
32 using namespace Tizen::Base;
33
34 namespace Tizen {       namespace Net { namespace Wifi
35 {
36
37 ////////////////////////////////////////////////////////////////////////////////
38 /// Lifecycle : Public
39 _WifiDirectDeviceInfoImpl::_WifiDirectDeviceInfoImpl(void)
40     : __localDeviceId(-1)
41     , __deviceName("")
42     , __macAddress("")
43     , __virtualMacAddress("")
44     , __ssid("")
45     , __pIpAddress(null)
46     , __deviceStatus(WIFI_DIRECT_DEVICE_DEACTIVATED)
47     , __groupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE)
48     , __deviceTypeCategory(WIFI_DIRECT_DEVICE_TYPE_CATEGORY_OTHERS)
49     , __isDisconnecting(false)
50 {
51
52 }
53
54 _WifiDirectDeviceInfoImpl::_WifiDirectDeviceInfoImpl(const _WifiDirectDeviceInfoImpl& value)
55     : __localDeviceId(value.__localDeviceId)
56     , __deviceName(value.__deviceName)
57     , __macAddress(value.__macAddress)
58     , __virtualMacAddress(value.__virtualMacAddress)
59     , __ssid(value.__ssid)
60     , __pIpAddress(null)
61     , __deviceStatus(value.__deviceStatus)
62     , __groupMemberType(value.__groupMemberType)
63     , __deviceTypeCategory(value.__deviceTypeCategory)
64     , __isDisconnecting(false)
65 {
66         __wpsConfigurationModeList.Construct(value.__wpsConfigurationModeList);
67
68         if (value.__pIpAddress != null)
69         {
70                 Ip4Address* pIp4Addr = null;
71                 pIp4Addr = dynamic_cast<Ip4Address*>(value.__pIpAddress);
72
73                 if (pIp4Addr != null)
74         {
75                         __pIpAddress = new (std::nothrow) Ip4Address(*pIp4Addr);
76         }
77         }
78 }
79
80 _WifiDirectDeviceInfoImpl::_WifiDirectDeviceInfoImpl(const String& deviceName, const String& macAddr)
81     :   __localDeviceId(-1)
82     , __deviceName(deviceName)
83     , __macAddress(macAddr)
84     , __virtualMacAddress("")
85     , __ssid("")
86     , __pIpAddress(null)
87     , __deviceStatus(WIFI_DIRECT_DEVICE_DEACTIVATED)
88     , __groupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE)
89     , __deviceTypeCategory(WIFI_DIRECT_DEVICE_TYPE_CATEGORY_OTHERS)
90     , __isDisconnecting(false)
91 {
92
93 }
94
95 _WifiDirectDeviceInfoImpl::~_WifiDirectDeviceInfoImpl(void)
96 {
97         if (__pIpAddress != null)
98         {
99                 delete __pIpAddress;
100                 __pIpAddress = null;
101         }
102 }
103
104 ////////////////////////////////////////////////////////////////////////////////
105 /// Operation : Public
106 _WifiDirectDeviceInfoImpl&
107 _WifiDirectDeviceInfoImpl::operator=(const _WifiDirectDeviceInfoImpl& rhs)
108 {
109         if (this != &rhs)
110         {
111                 __localDeviceId = rhs.__localDeviceId;
112                 __deviceName = rhs.__deviceName;
113                 __macAddress = rhs.__macAddress;
114                 __virtualMacAddress = rhs.__virtualMacAddress;
115                 __ssid = rhs.__ssid;
116                 __deviceStatus = rhs.__deviceStatus;
117                 __groupMemberType = rhs.__groupMemberType;
118                 __deviceTypeCategory = rhs.__deviceTypeCategory;
119                  __isDisconnecting = rhs.__isDisconnecting;
120                 __wpsConfigurationModeList.Construct(rhs.__wpsConfigurationModeList);
121
122                 IpAddress* pOrigIpAddr = null;
123         Ip4Address* pIp4Addr = null;
124
125         pIp4Addr = dynamic_cast<Ip4Address*>(rhs.__pIpAddress);
126
127         if (pIp4Addr != null)
128         {
129             pOrigIpAddr = __pIpAddress;
130             __pIpAddress = new (std::nothrow) Ip4Address(*pIp4Addr);
131
132             SysTryCatch(NID_NET_WIFI, __pIpAddress != null, __pIpAddress = pOrigIpAddr, E_OUT_OF_MEMORY,
133                                 "[E_OUT_OF_MEMORY] Memory allocation failed.");
134
135             delete pOrigIpAddr;
136         }
137         }
138 CATCH:
139         return *this;
140 }
141
142 WifiDirectDeviceId
143 _WifiDirectDeviceInfoImpl::GetDeviceId(void) const
144 {
145         return __localDeviceId;
146 }
147
148 String
149 _WifiDirectDeviceInfoImpl::GetDeviceName(void) const
150 {
151         return __deviceName;
152 }
153
154 String
155 _WifiDirectDeviceInfoImpl::GetMacAddress(void) const
156 {
157         return __macAddress;
158 }
159
160 const IpAddress*
161 _WifiDirectDeviceInfoImpl::GetIpAddress(void) const
162 {
163         return __pIpAddress;
164 }
165
166 Tizen::Base::String
167 _WifiDirectDeviceInfoImpl::GetSsid(void) const
168 {
169         return __ssid;
170 }
171
172 WifiDirectDeviceStatus
173 _WifiDirectDeviceInfoImpl::GetDeviceStatus(void) const
174 {
175         return __deviceStatus;
176 }
177
178 WifiDirectGroupMemberType
179 _WifiDirectDeviceInfoImpl::GetGroupMemberType(void) const
180 {
181         return __groupMemberType;
182 }
183
184 WifiDirectDeviceTypeCategory
185 _WifiDirectDeviceInfoImpl::GetDeviceTypeCategory(void) const
186 {
187         return __deviceTypeCategory;
188 }
189 const Tizen::Base::Collection::IListT<WifiWpsConfigurationMode>*
190 _WifiDirectDeviceInfoImpl::GetSupportedWpsConfigurationModeList(void) const
191 {
192         return &__wpsConfigurationModeList;
193 }
194
195 void
196 _WifiDirectDeviceInfoImpl::SetDeviceId(const WifiDirectDeviceId localDeviceId)
197 {
198         __localDeviceId = localDeviceId;
199 }
200
201 result
202 _WifiDirectDeviceInfoImpl::SetDeviceName(const String& deviceName)
203 {
204         int nameLength = deviceName.GetLength();
205
206         // need to check(device name's length)
207         SysTryReturnResult(NID_NET_WIFI, nameLength > 0 && nameLength <= MAX_DEVICE_NAME_LENGTH, E_INVALID_ARG,
208                                                 "The argument is invalid. The length of name is %d.", nameLength);
209
210         __deviceName = deviceName;
211
212         return E_SUCCESS;
213 }
214
215 result
216 _WifiDirectDeviceInfoImpl::SetMacAddress(const String& macAddress)
217 {
218         //need to check(mac address's range)
219         SysTryReturnResult(NID_NET_WIFI, _WifiDirectUtility::CheckMacAddress(macAddress), E_INVALID_ARG,
220                                                 "The argument is invalid.");
221
222         __macAddress = macAddress;
223
224         return E_SUCCESS;
225 }
226
227 result
228 _WifiDirectDeviceInfoImpl::SetIpAddress(const String& ipAddress)
229 {
230         if (__pIpAddress != null)
231         {
232                 delete __pIpAddress;
233         }
234
235         __pIpAddress = new (std::nothrow) Ip4Address(ipAddress);
236     SysTryReturnResult(NID_NET_WIFI, __pIpAddress != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
237
238         return E_SUCCESS;
239 }
240
241 result
242 _WifiDirectDeviceInfoImpl::SetSsid(const Tizen::Base::String& ssid)
243 {
244         //need to check arg(ssid)
245         result r = E_SUCCESS;
246
247         __ssid = ssid;
248
249         return r;
250 }
251
252 void
253 _WifiDirectDeviceInfoImpl::SetDeviceStatus(const WifiDirectDeviceStatus& deviceStatus)
254 {
255         __deviceStatus = deviceStatus;
256 }
257
258 void
259 _WifiDirectDeviceInfoImpl::SetGroupMemberType(const WifiDirectGroupMemberType& groupMemberType)
260 {
261         __groupMemberType = groupMemberType;
262 }
263
264 void
265 _WifiDirectDeviceInfoImpl::SetDeviceTypeCategory(const WifiDirectDeviceTypeCategory& deviceTypeCategory)
266 {
267         __deviceTypeCategory = deviceTypeCategory;
268 }
269
270 void
271 _WifiDirectDeviceInfoImpl::SetSupportedWpsConfigurationMode(
272                                                 const Tizen::Base::Collection::IListT<WifiWpsConfigurationMode>& wpsConfigurationModeList)
273 {
274         result r = E_SUCCESS;
275         r = __wpsConfigurationModeList.Construct(wpsConfigurationModeList);
276         SetLastResult(r);
277 }
278
279 void
280 _WifiDirectDeviceInfoImpl::SetSsidOfWifiDirectDeviceInfo(WifiDirectDeviceInfo& wifiDirectDeviceInfo, const String& ssid)
281 {
282     wifiDirectDeviceInfo.__pWifiDirectDeviceInfoImpl->SetSsid(ssid);
283 }
284
285 WifiDirectDeviceInfo*
286 _WifiDirectDeviceInfoImpl::GetWifiDirectDeviceInfoInstanceN(_WifiDirectDeviceInfoImpl& wifiDirectDeviceInfoImpl)
287 {
288         PrintDeviceInfo(wifiDirectDeviceInfoImpl);
289
290         WifiDirectDeviceInfo* pWifiDirectDeviceInfo = new (std::nothrow) WifiDirectDeviceInfo();
291
292     SysTryReturn(NID_NET_WIFI, pWifiDirectDeviceInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
293
294         *(pWifiDirectDeviceInfo->__pWifiDirectDeviceInfoImpl) = wifiDirectDeviceInfoImpl;
295
296         return pWifiDirectDeviceInfo;
297 }
298
299 void
300 _WifiDirectDeviceInfoImpl::PrintDeviceInfo(const _WifiDirectDeviceInfoImpl& wifiDirectDeviceInfo)
301 {
302         SysLog(NID_NET_WIFI, "WifiDirectDeviceId : (%d) ", wifiDirectDeviceInfo.GetDeviceId());
303         SysLog(NID_NET_WIFI, "WifiDirectDeviceName : (%ls) ", wifiDirectDeviceInfo.GetDeviceName().GetPointer());
304         SysLog(NID_NET_WIFI, "WifiDirectMacAddress : (%ls) ", wifiDirectDeviceInfo.GetMacAddress().GetPointer());
305         SysLog(NID_NET_WIFI, "WifiDirectVirtualMacAddress : (%ls) ", wifiDirectDeviceInfo.GetVirtualMacAddress().GetPointer());
306         SysLog(NID_NET_WIFI, "WifiDirectSsid : (%ls) ", wifiDirectDeviceInfo.GetSsid().GetPointer());
307         if (wifiDirectDeviceInfo.GetDeviceStatus() == WIFI_DIRECT_DEVICE_ACTIVATED)
308         {
309                 SysLog(NID_NET_WIFI, "WifiDirectDeviceStatus : Activated");
310         }
311         else if (wifiDirectDeviceInfo.GetDeviceStatus() == WIFI_DIRECT_DEVICE_DEACTIVATED)
312         {
313                 SysLog(NID_NET_WIFI, "WifiDirectDeviceStatus : Deactivated");
314         }
315
316         if (wifiDirectDeviceInfo.GetGroupMemberType() == WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER)
317         {
318                 SysLog(NID_NET_WIFI, "WifiDirectDeviceMemberType : OWNER");
319         }
320         else if (wifiDirectDeviceInfo.GetGroupMemberType() == WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT)
321         {
322                 SysLog(NID_NET_WIFI, "WifiDirectDeviceMemberType : Client");
323         }
324         else if (wifiDirectDeviceInfo.GetGroupMemberType() == WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE)
325         {
326                 SysLog(NID_NET_WIFI, "WifiDirectDeviceMemberType : NONE");
327         }
328
329         switch (wifiDirectDeviceInfo.GetDeviceTypeCategory())
330         {
331         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_COMPUTER:
332                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_COMPUTER");
333                 break;
334         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_INPUT_DEVICE:
335                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_INPUT_DEVICE");
336                 break;
337         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_PRINTER_SCANNER_FAX_COPIER:
338                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_PRINTER_SCANNER_FAX_COPIER");
339                 break;
340         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_CAMERA:
341                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_CAMERA");
342                 break;
343         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_STORAGE:
344                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_STORAGE");
345                 break;
346         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_NETWORK_INFRASTRUCTURE:
347                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_NETWORK_INFRASTRUCTURE");
348                 break;
349         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_DISPLAY:
350                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_DISPLAY");
351                 break;
352         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_MULTIMEDIA_DEVICE:
353                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_MULTIMEDIA_DEVICE");
354                 break;
355         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_GAMING_DEVICE:
356                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_GAMING_DEVICE");
357                 break;
358         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_TELEPHONE:
359                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_TELEPHONE");
360                 break;
361         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_AUDIO_DEVICE:
362                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_AUDIO_DEVICE");
363                 break;
364         case WIFI_DIRECT_DEVICE_TYPE_CATEGORY_OTHERS:
365                 SysLog(NID_NET_WIFI, "WifiDirectDeviceTypeCategory : WIFI_DIRECT_DEVICE_TYPE_CATEGORY_OTHERS");
366                 break;
367         }
368
369         if (wifiDirectDeviceInfo.GetIpAddress())
370         {
371                 SysLog(NID_NET_WIFI, "WifiDirectIpAddress : (%ls) ", wifiDirectDeviceInfo.GetIpAddress()->ToString().GetPointer());
372         }
373         else
374         {
375                 SysLog(NID_NET_WIFI, "WifiDirectIpAddress is null.");
376         }
377 }
378
379 Tizen::Base::String
380 _WifiDirectDeviceInfoImpl::GetVirtualMacAddress(void) const
381 {
382         return __virtualMacAddress;
383 }
384
385 result
386 _WifiDirectDeviceInfoImpl::SetVirtualMacAddress(const Tizen::Base::String& macAddress)
387 {
388         //need to check(mac address's range)
389         SysTryReturnResult(NID_NET_WIFI, _WifiDirectUtility::CheckMacAddress(macAddress), E_INVALID_ARG,
390                                                                 "The argument is invalid.");
391
392         __virtualMacAddress = macAddress;
393
394         return E_SUCCESS;
395 }
396
397 bool
398 _WifiDirectDeviceInfoImpl::Equals(const Tizen::Base::Object& obj) const
399 {
400     const _WifiDirectDeviceInfoImpl* pOther = dynamic_cast<const _WifiDirectDeviceInfoImpl*>(&obj);
401
402     if (pOther == null
403         || __localDeviceId != pOther->__localDeviceId
404         || !__deviceName.Equals(pOther->__deviceName)
405         || !__macAddress.Equals(pOther->__macAddress)
406         || !__virtualMacAddress.Equals(pOther->__virtualMacAddress)
407         || !__ssid.Equals(pOther->__ssid)
408         || __deviceStatus != pOther->__deviceStatus
409         || __groupMemberType != pOther->__groupMemberType
410         || __deviceTypeCategory != pOther->__deviceTypeCategory
411         || !__wpsConfigurationModeList.Equals(pOther->__wpsConfigurationModeList) )
412     {
413         return false;
414     }
415
416     if (__pIpAddress != null && pOther->__pIpAddress != null)
417     {
418         if( !__pIpAddress->Equals(*pOther->__pIpAddress) )
419         {
420             return false;
421         }
422     }
423     else if (__pIpAddress != null && pOther->__pIpAddress == null)
424     {
425         return false;
426     }
427     else if (__pIpAddress == null && pOther->__pIpAddress != null)
428     {
429         return false;
430     }
431
432     return true;
433 }
434
435 int
436 _WifiDirectDeviceInfoImpl::GetHashCode(void) const
437 {
438     return  __localDeviceId ^ __deviceName.GetHashCode() ^ __macAddress.GetHashCode() ^ __virtualMacAddress.GetHashCode() ^ __ssid.GetHashCode();
439 }
440
441 _WifiDirectDeviceInfoImpl*
442 _WifiDirectDeviceInfoImpl::GetInstance(WifiDirectDeviceInfo& wifiDirectDeviceInfo)
443 {
444     return wifiDirectDeviceInfo.__pWifiDirectDeviceInfoImpl;
445 }
446
447 const _WifiDirectDeviceInfoImpl*
448 _WifiDirectDeviceInfoImpl::GetInstance(const WifiDirectDeviceInfo& wifiDirectDeviceInfo)
449 {
450     return wifiDirectDeviceInfo.__pWifiDirectDeviceInfoImpl;
451 }
452
453 void
454 _WifiDirectDeviceInfoImpl::SetDisconnect(bool value)
455 {
456     __isDisconnecting = value;
457 }
458 bool
459 _WifiDirectDeviceInfoImpl::IsDisconnecting(void)
460 {
461     return __isDisconnecting;
462 }
463
464 } } }// Tizen::Net::Wifi
465
466 #ifdef __cplusplus
467 extern "C"
468 {
469 #endif
470
471 _OSP_EXPORT_ Tizen::Base::String
472 _WifiDirectDeviceInfoImpl_GetDeviceName(const Tizen::Net::Wifi::WifiDirectDeviceInfo& deviceInfo)
473 {
474         return deviceInfo.GetDeviceName();
475 }
476
477 _OSP_EXPORT_ const Tizen::Net::IpAddress*
478 _WifiDirectDeviceInfoImpl_GetIpAddress(const Tizen::Net::Wifi::WifiDirectDeviceInfo& deviceInfo)
479 {
480         return deviceInfo.GetIpAddress();
481 }
482
483 _OSP_EXPORT_ Tizen::Base::String
484 _WifiDirectDeviceInfoImpl_GetVirtualMacAddress(const Tizen::Net::Wifi::WifiDirectDeviceInfo& deviceInfo)
485 {
486         const Tizen::Net::Wifi::_WifiDirectDeviceInfoImpl* pWifiDirectDeviceInfoImpl = null;
487
488         pWifiDirectDeviceInfoImpl = Tizen::Net::Wifi::_WifiDirectDeviceInfoImpl::GetInstance(deviceInfo);
489         SysTryReturn(NID_NET_WIFI, pWifiDirectDeviceInfoImpl != null, Tizen::Base::String(L""), E_SYSTEM, 
490                         "[E_SYSTEM] A system error has occurred. Failed to get WifiDirectDeviceInfo instance.");
491
492         return  pWifiDirectDeviceInfoImpl->GetVirtualMacAddress();
493 }
494
495 #ifdef __cplusplus
496 }
497 #endif