2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @file FNetWifi_WifiDirectSystemAdapter.cpp
20 * @brief This is the implementation file for _WifiDirectSystemAdapter class
24 #include <wifi-direct.h>
25 #include <FBaseColArrayList.h>
26 #include <FBaseColLinkedList.h>
27 #include <FTextEncoding.h>
28 #include <FBaseUtilStringUtil.h>
29 #include <FNetWifiWifiDirectGroupMember.h>
30 #include <FNetWifiWifiDirectGroupInfo.h>
31 #include <FNetWifiWifiDirectDeviceInfo.h>
32 #include <FNetIp4Address.h>
33 #include <FBaseSysLog.h>
34 #include <FBase_StringConverter.h>
35 #include <FBaseColAllElementsDeleter.h>
36 #include "FNetWifi_WifiDirectSystemAdapter.h"
37 #include "FNetWifi_WifiDirectEvent.h"
38 #include "FNetWifi_WifiDirectEventArg.h"
39 #include "FNetWifi_WifiDirectUtility.h"
40 #include "FNetWifi_WifiDirectDeviceImpl.h"
41 #include "FNetWifi_WifiDirectDeviceInfoImpl.h"
42 #include "FNetWifi_WifiDirectGroupInfoImpl.h"
43 #include "FNetWifi_WifiIpcProxy.h"
44 #include "FNetWifi_WifiDirectUtility.h"
46 #ifdef _WifiDirectConvertErrorResult
47 #undef _WifiDirectConvertErrorResult
49 #define _WifiDirectConvertErrorResult(condition, r, value) \
58 using namespace Tizen::Base;
59 using namespace Tizen::Base::Utility;
60 using namespace Tizen::Base::Collection;
61 using namespace Tizen::Text;
62 using namespace Tizen::Net;
64 namespace Tizen { namespace Net { namespace Wifi {
66 static const int MAX_DEVICE_INFO_COUNT = 32;
67 static const int WIFI_DIRECT_DISCOVERY_TIMEOUT = 10;
69 _WifiDirectSystemAdapter* _WifiDirectSystemAdapter::__pWifiDirectSystemAdapter = null;
72 _WifiDirectSystemAdapter::InitSingleton(void)
74 unique_ptr<_WifiDirectSystemAdapter> pInst(new (std::nothrow) _WifiDirectSystemAdapter());
75 SysTryReturnVoidResult(NID_NET_WIFI, pInst != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
78 r = pInst->Construct();
79 SysTryReturnVoidResult(NID_NET_WIFI, r == true, r, "Error occured in construct.");
81 __pWifiDirectSystemAdapter = pInst.release();
82 std::atexit(DestroySingleton);
86 _WifiDirectSystemAdapter::DestroySingleton(void)
88 delete __pWifiDirectSystemAdapter;
91 _WifiDirectSystemAdapter*
92 _WifiDirectSystemAdapter::GetInstance(void)
94 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
96 if (!__pWifiDirectSystemAdapter)
99 pthread_once(&onceBlock, InitSingleton);
101 result r = GetLastResult();
104 onceBlock = PTHREAD_ONCE_INIT;
108 return __pWifiDirectSystemAdapter;
111 /////////////////////////////////////////////////////
114 Tizen::Base::Collection::IList*
115 _WifiDirectSystemAdapter::GetAllDeviceInfoN(void)
117 result r = E_SUCCESS;
119 unique_ptr<ArrayList> pList(new (std::nothrow) ArrayList());
120 SysTryReturn(NID_NET_WIFI, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
122 r = pList->Construct();
123 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
125 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo(GetLocalDeviceInfoN());
126 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
128 r = pList->Add(*pDeviceInfo);
129 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
130 pDeviceInfo.release();
132 return pList.release();
135 /////////////////////////////////////////////////////
139 _WifiDirectSystemAdapter::Activate(void)
142 int err = WIFI_DIRECT_ERROR_NONE;
144 err = wifi_direct_activate();
145 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NOT_PERMITTED, r, E_INVALID_OPERATION);
146 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
147 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
149 __currentState = WIFI_DIRECT_SYSTEM_ACTIVATING;
155 _WifiDirectSystemAdapter::Deactivate(void)
158 int err = WIFI_DIRECT_ERROR_NONE;
160 err = wifi_direct_deactivate();
161 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NOT_PERMITTED, r, E_INVALID_OPERATION);
162 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
163 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
165 __currentState = WIFI_DIRECT_SYSTEM_DEACTIVATING;
171 _WifiDirectSystemAdapter::GetGroupSettingInfoN(void) const
173 result r = E_SUCCESS;
174 int err = WIFI_DIRECT_ERROR_NONE;
176 unique_ptr<WifiDirectGroupInfo> pGroupInfo(new (std::nothrow) WifiDirectGroupInfo());
177 SysTryReturn(NID_NET_WIFI, pGroupInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
179 _WifiDirectGroupInfoImpl* pGroupInfoImpl = _WifiDirectGroupInfoImpl::GetInstance(*pGroupInfo);
180 wifi_direct_state_e status = WIFI_DIRECT_STATE_DEACTIVATED;
181 err = wifi_direct_get_state(&status);
182 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
183 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
186 char* pMacAddress = null;
187 err = wifi_direct_get_mac_address(&pMacAddress);
188 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
189 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_OUT_OF_MEMORY, r, E_OUT_OF_MEMORY);
191 SysTryReturn(NID_NET_WIFI, pMacAddress != null && r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
193 String mac = _WifiDirectUtility::ConvertMacCharToString(pMacAddress);
195 pGroupInfoImpl->SetBssId(mac);
197 if (status != WIFI_DIRECT_STATE_DEACTIVATED
198 && status != WIFI_DIRECT_STATE_DEACTIVATING
199 && status != WIFI_DIRECT_STATE_ACTIVATING)
202 if (status == WIFI_DIRECT_STATE_CONNECTED)
205 err = wifi_direct_get_ssid(&pSsid);
209 SysLog(NID_NET_WIFI, "The ssid is null.");
213 pGroupInfoImpl->SetSsid(String(pSsid));
219 bool isAutonomousGroup = false;
220 err = wifi_direct_is_autonomous_group(&isAutonomousGroup);
221 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
222 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
224 pGroupInfoImpl->SetAutonomousGroupOwnerMode(isAutonomousGroup);
227 int groupOwnerIntent = 0;
228 err = wifi_direct_get_group_owner_intent(&groupOwnerIntent);
229 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
230 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
232 pGroupInfoImpl->SetGroupOwnerIntent(groupOwnerIntent);
236 err = wifi_direct_get_operating_channel(&channel);
237 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
238 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
240 WifiRadioChannel operatingChannel = _WifiDirectUtility::ConvertChannel(channel);
241 pGroupInfoImpl->SetOperatingChannel(operatingChannel);
246 err = wifi_direct_get_max_clients(&maxClients);
247 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
248 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
250 pGroupInfoImpl->SetMaxNumberOfClients(maxClients);
252 return pGroupInfo.release();
255 WifiDirectDeviceInfo*
256 _WifiDirectSystemAdapter::GetLocalDeviceInfoN(void) const
258 SysTryReturn(NID_NET_WIFI, __pWifiServiceProxy != null, null, E_SYSTEM, "[E_SYSTEM] IPC instance has not been constructed yet.");
262 result r = E_SUCCESS;
263 int err = WIFI_DIRECT_ERROR_NONE;
265 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo(new (std::nothrow) WifiDirectDeviceInfo());
266 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
268 _WifiDirectDeviceInfoImpl* pDeviceInfoImpl = _WifiDirectDeviceInfoImpl::GetInstance(*pDeviceInfo);
271 pDeviceInfoImpl->SetDeviceId(DEFAULT_DEVICE_ID);
275 r = __pWifiServiceProxy->GetWifiDirectLocalDeviceName(deviceName);
276 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
278 pDeviceInfoImpl->SetDeviceName(deviceName);
280 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, E_SYSTEM, "[%s] The length of device name is invalid.", GetErrorMessage(r));
282 // device status / group member type
283 wifi_direct_state_e status = WIFI_DIRECT_STATE_DEACTIVATED;
284 err = wifi_direct_get_state(&status);
285 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
286 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
288 if (status == WIFI_DIRECT_STATE_DEACTIVATED)
290 pDeviceInfoImpl->SetDeviceStatus(WIFI_DIRECT_DEVICE_DEACTIVATED);
294 pDeviceInfoImpl->SetDeviceStatus(WIFI_DIRECT_DEVICE_ACTIVATED);
296 bool isOwner = false;
297 err = wifi_direct_is_group_owner(&isOwner);
298 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
299 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
303 case WIFI_DIRECT_STATE_DISCONNECTING:
304 case WIFI_DIRECT_STATE_CONNECTED:
307 pDeviceInfoImpl->SetGroupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER);
311 pDeviceInfoImpl->SetGroupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT);
314 case WIFI_DIRECT_STATE_ACTIVATED:
317 pDeviceInfoImpl->SetGroupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER);
321 pDeviceInfoImpl->SetGroupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE);
325 pDeviceInfoImpl->SetGroupMemberType(WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE);
329 if (status == WIFI_DIRECT_STATE_CONNECTED)
333 err = wifi_direct_get_ssid(&pSsid);
337 SysLog(NID_NET_WIFI, "The ssid is null.");
341 pDeviceInfoImpl->SetSsid(String(pSsid));
347 // device type category
348 wifi_direct_primary_device_type_e typeCategory = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_OTHER;
349 err = wifi_direct_get_primary_device_type(&typeCategory);
350 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
351 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
353 WifiDirectDeviceTypeCategory deviceTypeCategory = _WifiDirectUtility::ConvertDeviceTypeCategory(typeCategory);
354 pDeviceInfoImpl->SetDeviceTypeCategory(deviceTypeCategory);
357 char* pMacAddress = null;
358 err = wifi_direct_get_mac_address(&pMacAddress);
359 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
360 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_OUT_OF_MEMORY, r, E_OUT_OF_MEMORY);
361 SysTryReturn(NID_NET_WIFI, pMacAddress != null && r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
363 String mac = _WifiDirectUtility::ConvertMacCharToString(pMacAddress);
364 pDeviceInfoImpl->SetMacAddress(mac);
367 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, E_SYSTEM, "[%s] The MAC address is invalid.", GetErrorMessage(r));
370 if (pDeviceInfoImpl->GetGroupMemberType() != WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE)
373 err = wifi_direct_get_ip_address(&pIp);
374 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
375 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_OUT_OF_MEMORY, r, E_OUT_OF_MEMORY);
376 SysTryReturn(NID_NET_WIFI, pIp != null && r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
378 r = pDeviceInfoImpl->SetIpAddress(String(pIp));
379 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
383 // supported WPS configuration mode
384 if (status != WIFI_DIRECT_STATE_DEACTIVATED
385 && status != WIFI_DIRECT_STATE_DEACTIVATING
386 && status != WIFI_DIRECT_STATE_ACTIVATING)
388 ArrayListT<WifiWpsConfigurationMode> wpsModeList;
389 r = wpsModeList.Construct();
390 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, E_SYSTEM, "[%s] Construction of ArrayListT has failed.", GetErrorMessage(r));
392 err = wifi_direct_foreach_supported_wps_types(OnWifiDirectSupportedWpsMode, &wpsModeList);
393 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
394 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
396 pDeviceInfoImpl->SetSupportedWpsConfigurationMode(wpsModeList);
398 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, E_SYSTEM, "[%s] Setting of wps configuration mode has failed.", GetErrorMessage(r));
400 wpsModeList.RemoveAll();
403 return pDeviceInfo.release();
406 WifiWpsConfigurationMode
407 _WifiDirectSystemAdapter::GetWpsConfigurationModePreference(void) const
410 int err = WIFI_DIRECT_ERROR_NONE;
412 wifi_direct_wps_type_e wpsType;
413 WifiWpsConfigurationMode wpsMode = WIFI_WPS_CONFIG_MODE_NONE;
415 err = wifi_direct_get_wps_type(&wpsType);
416 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
417 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, WIFI_WPS_CONFIG_MODE_NONE, r, "[%s] Propagating.", GetErrorMessage(r));
421 case WIFI_DIRECT_WPS_TYPE_PBC:
422 wpsMode = WIFI_WPS_CONFIG_MODE_PBC;
424 case WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY:
425 wpsMode = WIFI_WPS_CONFIG_MODE_PIN_DISPLAY;
427 case WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD:
428 wpsMode = WIFI_WPS_CONFIG_MODE_PIN_KEYPAD;
431 SysLog(NID_NET_WIFI, "The WPS type is unknown.");
439 _WifiDirectSystemAdapter::SetLocalDeviceName(const String &name)
441 SysTryReturnResult(NID_NET_WIFI, __pWifiServiceProxy != null, E_SYSTEM, "IPC instance has not been constructed yet.");
443 result r = __pWifiServiceProxy->SetWifiDirectLocalDeviceName(name);
444 SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Setting the Wi-Fi Direct local device name through OSP Connectivity daemon has failed.", GetErrorMessage(r));
450 _WifiDirectSystemAdapter::SetWpsConfigurationModePreference(WifiWpsConfigurationMode mode)
453 int err = WIFI_DIRECT_ERROR_NONE;
455 wifi_direct_wps_type_e wpsType = WIFI_DIRECT_WPS_TYPE_NONE;
459 case WIFI_WPS_CONFIG_MODE_PBC:
460 wpsType = WIFI_DIRECT_WPS_TYPE_PBC;
462 case WIFI_WPS_CONFIG_MODE_PIN_DISPLAY:
463 wpsType = WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY;
465 case WIFI_WPS_CONFIG_MODE_PIN_KEYPAD:
466 wpsType = WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD;
469 SysLog(NID_NET_WIFI, "The WPS type is unknown.");
473 err = wifi_direct_set_wps_type(wpsType);
474 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
475 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
481 _WifiDirectSystemAdapter::CreateGroup(const WifiDirectGroupInfo *pWifiDirectGroupInfo,
482 const WifiDirectDeviceInfo *pWifiDirectRemoteDeviceInfo)
484 result r = E_SUCCESS;
485 int err = WIFI_DIRECT_ERROR_NONE;
487 SysTryReturnResult(NID_NET_WIFI, !(pWifiDirectGroupInfo != null
488 && pWifiDirectGroupInfo->GetAutonomousGroupOwnerMode()
489 && pWifiDirectRemoteDeviceInfo), E_INVALID_OPERATION,
490 "The operation don't allow to create an autonomous group with a specified remote device.");
491 __remoteMacAddress.Clear();
492 __remoteDeviceName.Clear();
494 // autonomous group owner mode
495 if (pWifiDirectGroupInfo != null
496 && pWifiDirectGroupInfo->GetAutonomousGroupOwnerMode())
498 r = SetGroupSettingInfo(*pWifiDirectGroupInfo);
499 SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
501 err = wifi_direct_create_group();
502 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
503 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "Propagating.", GetErrorMessage(r));
505 __currentState = WIFI_DIRECT_SYSTEM_AUTONOMOUS_GROUP_CREATING;
509 if (pWifiDirectGroupInfo != null)
511 r = SetGroupSettingInfo(*pWifiDirectGroupInfo);
512 SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
515 if (pWifiDirectRemoteDeviceInfo != null)
517 unique_ptr<char []> pMacAddress(_WifiDirectUtility::ConvertMacStringToCharN(pWifiDirectRemoteDeviceInfo->GetMacAddress()));
518 SysTryReturnResult(NID_NET_WIFI, pMacAddress != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
520 err = wifi_direct_connect(pMacAddress.get());
521 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
525 SysLog(NID_NET_WIFI, "[%s] Propagating.", GetErrorMessage(r));
526 result ret = StartListenMode();
527 SysLogException(NID_NET_WIFI, ret, "[%s] Propagating.", GetErrorMessage(ret));
533 if (IsDiscoverable())
535 r = StopListenModeToScan();
536 SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, E_SYSTEM, "A system error occurs.");
540 r = StartDiscovery();
541 SysLogException(NID_NET_WIFI, r, "[%s] Propagating.", GetErrorMessage(r));
545 r = StartListenMode();
546 SysLogException(NID_NET_WIFI, r, "[%s] Propagating.", GetErrorMessage(r));
551 __currentState = WIFI_DIRECT_SYSTEM_GROUP_CREATING;
558 _WifiDirectSystemAdapter::CancelGroupCreation(void)
561 int err = WIFI_DIRECT_ERROR_NONE;
563 if (__currentState == WIFI_DIRECT_SYSTEM_GROUP_CREATING || __currentState == WIFI_DIRECT_SYSTEM_AUTONOMOUS_GROUP_CREATING)
565 switch(__currentScanState)
567 case WIFI_DIRECT_SYSTEM_SCAN_LISTEN_CANCELING_TO_SCAN:
568 case WIFI_DIRECT_SYSTEM_SCAN_SCANNING:
569 __currentState = WIFI_DIRECT_SYSTEM_CONNECT_CANCELLING;
570 r = CancelDiscovery();
573 err = wifi_direct_disconnect_all();
574 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
578 SysLog(NID_NET_WIFI, "[%s] Propagating.", GetErrorMessage(r));
580 result ret = StartListenMode();
581 SysLogException(NID_NET_WIFI, ret, "[%s] Propagating.", GetErrorMessage(ret));
585 __currentState = WIFI_DIRECT_SYSTEM_GROUP_CANCELING;
591 r = E_INVALID_OPERATION;
598 _WifiDirectSystemAdapter::Scan(void)
600 result r = E_SUCCESS;
602 switch(__currentScanState)
604 case WIFI_DIRECT_SYSTEM_SCAN_IDLE:
605 r = StartDiscovery();
606 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
608 case WIFI_DIRECT_SYSTEM_SCAN_LISTEN:
609 r = StopListenModeToScan();
610 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
612 case WIFI_DIRECT_SYSTEM_SCAN_LISTEN_CANCELING_TO_SCAN:
613 case WIFI_DIRECT_SYSTEM_SCAN_SCANNING:
616 case WIFI_DIRECT_SYSTEM_SCAN_CANCELLING:
617 r = E_INVALID_OPERATION;
625 _WifiDirectSystemAdapter::CancelScan(void)
627 result r = E_SUCCESS;
629 switch(__currentScanState)
632 case WIFI_DIRECT_SYSTEM_SCAN_LISTEN_CANCELING_TO_SCAN:
633 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_CANCELLING;
635 case WIFI_DIRECT_SYSTEM_SCAN_CANCELLING:
638 case WIFI_DIRECT_SYSTEM_SCAN_SCANNING:
639 r = CancelDiscovery();
642 r = E_INVALID_OPERATION;
650 _WifiDirectSystemAdapter::Associate(const WifiDirectDeviceInfo &wifiDirectGroupOwnerDeviceInfo)
653 int err = WIFI_DIRECT_ERROR_NONE;
655 unique_ptr<char[]> pMacAddress(_WifiDirectUtility::ConvertMacStringToCharN(wifiDirectGroupOwnerDeviceInfo.GetMacAddress()));
656 SysTryReturnResult(NID_NET_WIFI, pMacAddress != null, E_OUT_OF_MEMORY, "Failed to convert MacAddress");
658 err = wifi_direct_connect(pMacAddress.get());
659 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
660 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
662 __currentState = WIFI_DIRECT_SYSTEM_ASSOCIATING;
668 _WifiDirectSystemAdapter::IsDiscoverable(void) const
670 bool isDiscoverable = false;
671 int err = WIFI_DIRECT_ERROR_NONE;
673 err = wifi_direct_is_discoverable(&isDiscoverable);
675 if (err != WIFI_DIRECT_ERROR_NONE)
677 SysLog(NID_NET_WIFI, "Getting discoverable state has failed.");
681 return isDiscoverable;
685 _WifiDirectSystemAdapter::IsActivated(void) const
687 if (__currentState != WIFI_DIRECT_SYSTEM_DEACTIVATED &&
688 __currentState != WIFI_DIRECT_SYSTEM_ACTIVATING )
697 _WifiDirectSystemAdapter::Connect(const WifiDirectDeviceInfo& peerDeviceInfo)
701 switch(__currentState)
703 case WIFI_DIRECT_SYSTEM_AUTONOMOUS_GROUP_CREATING:
704 case WIFI_DIRECT_SYSTEM_GROUP_CREATING:
705 case WIFI_DIRECT_SYSTEM_CONNECTING:
708 case WIFI_DIRECT_SYSTEM_ACTIVATED:
709 case WIFI_DIRECT_SYSTEM_OWNER:
711 unique_ptr<char[]> pMacAddress(_WifiDirectUtility::ConvertMacStringToCharN(peerDeviceInfo.GetMacAddress()));
712 SysTryReturnResult(NID_NET_WIFI, pMacAddress != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
714 int err = wifi_direct_connect(pMacAddress.get());
715 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
719 __currentState = WIFI_DIRECT_SYSTEM_CONNECTING;
724 r = E_INVALID_OPERATION;
730 SysLog(NID_NET_WIFI, "[%s] Propagating.", GetErrorMessage(r));
731 result ret = StartListenMode();
732 SysLogException(NID_NET_WIFI, ret, "[%s] Propagating.", GetErrorMessage(ret));
739 _WifiDirectSystemAdapter::CancelConnect(void)
742 int err = WIFI_DIRECT_ERROR_NONE;
744 switch(__currentState)
746 case WIFI_DIRECT_SYSTEM_GROUP_CREATING:
747 case WIFI_DIRECT_SYSTEM_CONNECTING:
748 err = wifi_direct_disconnect_all();
749 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
753 __currentState = WIFI_DIRECT_SYSTEM_CONNECT_CANCELLING;
757 SysLog(NID_NET_WIFI, "[%s] Propagating.", GetErrorMessage(r));
758 result ret = StartListenMode();
759 SysLogException(NID_NET_WIFI, ret, "[%s] Propagating.", GetErrorMessage(ret));
762 case WIFI_DIRECT_SYSTEM_GROUP_CANCELING:
763 case WIFI_DIRECT_SYSTEM_CONNECT_CANCELLING:
767 r = E_INVALID_OPERATION;
771 SysLog(NID_NET_WIFI, "[%s] The current state is %ls", GetErrorMessage(r), GetStringOfAllCurrentState().GetPointer());
776 _WifiDirectSystemAdapter::CreateAutonomousGroup(void)
780 if (__currentState == WIFI_DIRECT_SYSTEM_ACTIVATED)
782 int err = wifi_direct_create_group();
783 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
787 __currentState = WIFI_DIRECT_SYSTEM_AUTONOMOUS_GROUP_CREATING;
791 SysLog(NID_NET_WIFI, "[%s] Propagating.", GetErrorMessage(r));
792 result ret = StartListenMode();
793 SysLogException(NID_NET_WIFI, ret, "[%s] Propagating.", GetErrorMessage(ret));
798 r = E_INVALID_OPERATION;
799 SysLog(NID_NET_WIFI, "[%s] The current state is %ls.", GetErrorMessage(r), GetStringOfAllCurrentState().GetPointer());
806 _WifiDirectSystemAdapter::SetGroupSettingInfo(const WifiDirectGroupInfo& groupSettingInfo)
808 result r = E_SUCCESS;
809 int err = WIFI_DIRECT_ERROR_NONE;
811 // Sets group owner intent
812 err = wifi_direct_set_group_owner_intent(groupSettingInfo.GetGroupOwnerIntent());
813 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_INVALID_OPERATION);
814 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
817 err = wifi_direct_set_max_clients(groupSettingInfo.GetMaxNumberOfClients());
818 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_INVALID_OPERATION);
819 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
825 _WifiDirectSystemAdapter::LeaveGroup(void)
828 int err = WIFI_DIRECT_ERROR_NONE;
830 if (__currentState == WIFI_DIRECT_SYSTEM_OWNER)
832 err = wifi_direct_destroy_group();
833 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
834 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
836 __currentState = WIFI_DIRECT_SYSTEM_LEAVING;
838 else if ( __currentState == WIFI_DIRECT_SYSTEM_CLIENT)
840 err = wifi_direct_disconnect_all();
841 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
842 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
844 __currentState = WIFI_DIRECT_SYSTEM_LEAVING;
846 else if (__currentState == WIFI_DIRECT_SYSTEM_LEAVING)
852 r = E_INVALID_OPERATION;
858 WifiDirectDeviceInfo*
859 _WifiDirectSystemAdapter::GetGroupOwnerInfoN(void) const
863 WifiDirectDeviceInfo* pGroupOwnerInfo = null;
865 if (__currentState == WIFI_DIRECT_SYSTEM_OWNER)
867 pGroupOwnerInfo = GetLocalDeviceInfoN();
869 else if (__currentState == WIFI_DIRECT_SYSTEM_CLIENT)
871 pGroupOwnerInfo = GetConnectedPeerDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER);
874 int err = wifi_direct_get_ssid(&pSsid);
875 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
880 SysLog(NID_NET_WIFI, "The ssid is null");
884 _WifiDirectDeviceInfoImpl::SetSsidOfWifiDirectDeviceInfo(*pGroupOwnerInfo, String(pSsid));
890 SetLastResult(E_INVALID_OPERATION);
893 return pGroupOwnerInfo;
897 _WifiDirectSystemAdapter::GetGroupClientInfoListN(void) const
901 LinkedList* pClientInfoList = null;
903 pClientInfoList = new (std::nothrow) LinkedList(SingleObjectDeleter);
904 SysTryReturn(NID_NET_WIFI, pClientInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
906 if (__currentState == WIFI_DIRECT_SYSTEM_OWNER)
908 int err = wifi_direct_foreach_connected_peers(OnWifiDirectEachConnectedClient, pClientInfoList);
909 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
910 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
914 SetLastResult(E_INVALID_OPERATION);
917 return pClientInfoList;
921 _WifiDirectSystemAdapter::GetOperatingChannel(void) const
924 int err = WIFI_DIRECT_ERROR_NONE;
926 err = wifi_direct_get_operating_channel(&channel);
928 if (err != WIFI_DIRECT_ERROR_NONE)
930 SysLog(NID_NET_WIFI, "Getting operating channel has failed.");
931 return WIFI_RADIO_CHANNEL_UNKNOWN;
934 WifiRadioChannel operatingChannel = _WifiDirectUtility::ConvertChannel(channel);
936 return operatingChannel;
940 _WifiDirectSystemAdapter::DestroyGroup(void)
943 int err = WIFI_DIRECT_ERROR_NONE;
945 if (__currentState == WIFI_DIRECT_SYSTEM_OWNER)
947 err = wifi_direct_destroy_group();
948 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
949 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
951 __currentState = WIFI_DIRECT_SYSTEM_DESTROYING;
953 else if (__currentState == WIFI_DIRECT_SYSTEM_DESTROYING)
959 r = E_INVALID_OPERATION;
966 _WifiDirectSystemAdapter::Disconnect(const WifiDirectDeviceInfo& remoteDeviceInfo)
970 switch(__currentState)
972 case WIFI_DIRECT_SYSTEM_DISCONNECTING:
975 case WIFI_DIRECT_SYSTEM_OWNER:
976 case WIFI_DIRECT_SYSTEM_CLIENT:
978 unique_ptr<char[]> pMacAddress(_WifiDirectUtility::ConvertMacStringToCharN(remoteDeviceInfo.GetMacAddress()));
979 SysTryReturnResult(NID_NET_WIFI, pMacAddress != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to convert mac address.");
980 int err = WIFI_DIRECT_ERROR_NONE;
982 err = wifi_direct_disconnect(pMacAddress.get());
983 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
984 SysTryReturnResult(NID_NET_WIFI, r == E_SUCCESS, r, "Propagating.");
986 if (__currentState == WIFI_DIRECT_SYSTEM_OWNER)
988 WifiDirectDeviceInfo* pDeviceInfo = GetPeerInfo(remoteDeviceInfo.GetMacAddress());
989 SysTryLog(NID_NET_WIFI, pDeviceInfo != null, "The client info was not found.");
991 if (pDeviceInfo != null)
993 _WifiDirectDeviceInfoImpl::GetInstance(*pDeviceInfo)->SetDisconnect(true);
997 __currentState = WIFI_DIRECT_SYSTEM_DISCONNECTING;
1002 r = E_INVALID_OPERATION;
1010 _WifiDirectSystemAdapter::GetAllGroupMemberInfoImplListN(void)
1012 int err = WIFI_DIRECT_ERROR_NONE;
1013 result r = E_SUCCESS;
1015 unique_ptr<ArrayList, AllElementsDeleter> pDeviceInfoList(new (std::nothrow) ArrayList());
1016 SysTryReturn(NID_NET_WIFI, pDeviceInfoList, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1018 r = pDeviceInfoList->Construct();
1019 r = TransExceptionsExclusive(r, E_SYSTEM, E_OUT_OF_MEMORY);
1020 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Constructing ArrayList has failed.", GetErrorMessage(r));
1022 if(__currentState == WIFI_DIRECT_SYSTEM_OWNER)
1024 WifiDirectDeviceInfo* pDeviceInfo = GetLocalDeviceInfoN();
1025 r = GetLastResult();
1026 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, null, r, "[%s] Getting LocalDeviceInfo has failed.", GetErrorMessage(r));
1028 r = pDeviceInfoList->Add(*pDeviceInfo);
1029 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, E_SYSTEM, "[%s] Adding object in ArrayList has failed.", GetErrorMessage(r));
1032 err = wifi_direct_foreach_connected_peers(OnWifiDirectEachConnectedClient, pDeviceInfoList.get());
1033 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1034 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1036 return pDeviceInfoList.release();
1039 /////////////////////////////////////////////////////
1043 _WifiDirectSystemAdapter::Disassociate(void)
1045 result r = E_SYSTEM;
1047 if(__currentState == WIFI_DIRECT_SYSTEM_CLIENT)
1049 int err = wifi_direct_disconnect_all();
1050 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1051 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1053 __currentState = WIFI_DIRECT_SYSTEM_DISCONNECTING;
1057 r = E_INVALID_OPERATION;
1064 ///////////////////////////////////////////////////////////////
1067 WifiDirectGroupMemberType
1068 _WifiDirectSystemAdapter::GetCurrentMemberType(void) const
1070 WifiDirectGroupMemberType memberType = WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE;
1072 switch(__currentState)
1074 case WIFI_DIRECT_SYSTEM_OWNER:
1075 memberType = WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER;
1077 case WIFI_DIRECT_SYSTEM_CLIENT:
1078 memberType = WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT;
1080 case WIFI_DIRECT_SYSTEM_DISCONNECTING:
1081 case WIFI_DIRECT_SYSTEM_DESTROYING:
1083 bool isGroupOwner = false;
1084 int err = wifi_direct_is_group_owner(&isGroupOwner);
1085 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_is_group_owner()", err);
1087 if (isGroupOwner == true)
1089 memberType = WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER;
1093 memberType = WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT;
1098 memberType = WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE;
1106 _WifiDirectSystemAdapter::Construct(void)
1108 result r = E_SUCCESS;
1109 int err = WIFI_DIRECT_ERROR_NONE;
1111 unique_ptr<_WifiDirectEvent,_WifiDirectEventDeleter> pWifiDirectEvent(new (std::nothrow) _WifiDirectEvent());
1112 SysTryReturn(NID_NET_WIFI, pWifiDirectEvent != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1114 r = pWifiDirectEvent->Construct();
1115 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1117 __pWifiServiceProxy = _WifiIpcProxy::GetInstance();
1118 if (__pWifiServiceProxy != null)
1120 r = __pWifiServiceProxy->InitializeWifiDirect();
1121 SysLog(NID_NET_WIFI, "Initializing WifiDirect service of osp-connectivity-service %s.",
1122 (r == E_SUCCESS) ? "is successful" : "fails");
1126 SysLog(NID_NET_WIFI, "Creating an IPC instance to connect with the Connectivity service daemon has failed.");
1129 err = wifi_direct_initialize();
1130 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1131 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
1133 err = wifi_direct_set_device_state_changed_cb(OnWifiDirectPowerChanged, null);
1134 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1135 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1137 err = wifi_direct_set_discovery_state_changed_cb(OnWifiDirectScanCompleted, null);
1138 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1139 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1141 err = wifi_direct_set_connection_state_changed_cb(OnWifiDirectConnectionChanged, null);
1142 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1143 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1145 err = wifi_direct_set_client_ip_address_assigned_cb(OnWifiDirectClientIpAssigned, null);
1146 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1147 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1149 r = InitializeCurrentState();
1150 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1152 r = __connectedPeerList.Construct();
1153 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , E_SYSTEM, "[%s] Construction of ArrayList has failed.", GetErrorMessage(r));
1155 __pWifiDirectEvent = move(pWifiDirectEvent);
1160 err = wifi_direct_deinitialize();
1161 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_deinitialize()", err);
1166 _WifiDirectSystemAdapter::AddListener(const _WifiDirectDeviceImpl& listner)
1168 __pWifiDirectEvent->AddListener(listner, true);
1171 _WifiDirectSystemAdapter::RemoveListener(const _WifiDirectDeviceImpl& listner)
1173 __pWifiDirectEvent->RemoveListener(listner);
1177 _WifiDirectSystemAdapter::AddPeerInfo(WifiDirectDeviceInfo* pPeerInfo)
1179 WifiDirectDeviceInfo* pPeerInfoTemp = new WifiDirectDeviceInfo(*pPeerInfo);
1180 return __connectedPeerList.Add(*pPeerInfoTemp);
1183 _WifiDirectSystemAdapter::RemovePeerInfo(WifiDirectDeviceInfo* pPeerInfo)
1185 return __connectedPeerList.Remove(*pPeerInfo, true);
1187 WifiDirectDeviceInfo*
1188 _WifiDirectSystemAdapter::GetPeerInfo(const String& macAddress)
1190 WifiDirectDeviceInfo* pDeviceInfo = null;
1191 for(int i = 0; i < __connectedPeerList.GetCount(); i++)
1193 pDeviceInfo = dynamic_cast<WifiDirectDeviceInfo*>(__connectedPeerList.GetAt(i));
1195 if (pDeviceInfo != null && pDeviceInfo->GetMacAddress() == macAddress)
1203 _WifiDirectSystemAdapter::_WifiDirectSystemAdapter(void)
1204 : __remoteMacAddress()
1205 , __remoteDeviceName()
1206 , __pScanResult(null)
1207 , __currentState(WIFI_DIRECT_SYSTEM_DEACTIVATED)
1208 , __currentScanState(WIFI_DIRECT_SYSTEM_SCAN_IDLE)
1209 , __connectedPeerList(SingleObjectDeleter)
1210 , __discoveredPeerList(SingleObjectDeleter)
1212 , __pWifiServiceProxy(null)
1217 _WifiDirectSystemAdapter::~_WifiDirectSystemAdapter(void)
1219 int err = WIFI_DIRECT_ERROR_NONE;
1221 err = wifi_direct_deinitialize();
1222 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_deinitialize()", err);
1225 // Callback function
1227 _WifiDirectSystemAdapter::OnWifiDirectPowerChanged(int errorCode, wifi_direct_device_state_e deviceState, void* pUserData)
1229 SysLog(NID_NET_WIFI, "Enter, [deviceState:0x%x] [ErrorCode:0x%x]", deviceState, errorCode);
1230 SysLog(NID_NET_WIFI, "%ls", __pWifiDirectSystemAdapter->GetStringOfAllCurrentState().GetPointer());
1232 int err = WIFI_DIRECT_ERROR_NONE;
1233 result r = E_SYSTEM;
1234 _WifiDirectEventArg* pEventArg = null;
1235 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1239 case WIFI_DIRECT_DEVICE_STATE_ACTIVATED:
1240 SysLog(NID_NET_WIFI, "deviceState : WIFI_DIRECT_DEVICE_STATE_ACTIVATED");
1241 //Don't fire event here, we will fire event after Listen Mode has started
1242 //pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ACTIVATED, DEFAULT_DEVICE_ID, r);
1243 //SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1247 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_ACTIVATING)
1249 result res = __pWifiDirectSystemAdapter->StartListenMode();
1253 SysLogException(NID_NET_WIFI, res, "[%s] Propagating.", GetErrorMessage(res));
1255 err = wifi_direct_deactivate();
1256 r = _WifiDirectUtility::ConvertErrorCode(err);
1257 SysLog(NID_NET_WIFI, "[%s] Propagating.", GetErrorMessage(r));
1262 else if(__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_DEACTIVATED)
1264 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_ACTIVATED;
1265 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ACTIVATED, DEFAULT_DEVICE_ID, r);
1266 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1271 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_DEACTIVATED;
1274 case WIFI_DIRECT_DEVICE_STATE_DEACTIVATED:
1275 SysLog(NID_NET_WIFI, "deviceState : WIFI_DIRECT_DEVICE_STATE_DEACTIVATED");
1276 if (__pWifiDirectSystemAdapter->__currentState != WIFI_DIRECT_SYSTEM_ACTIVATING)
1278 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_DEACTIVATED, DEFAULT_DEVICE_ID, r);
1279 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1283 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_DEACTIVATED;
1284 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1288 SysLogException(NID_NET_WIFI, r, "[%s] Propagating.", GetErrorMessage(r));
1290 result res = __pWifiDirectSystemAdapter->InitializeCurrentState();
1291 SysLogException(NID_NET_WIFI, res, "[%s] Propagating.", GetErrorMessage(res));
1298 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_DEACTIVATED;
1299 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1300 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ACTIVATED, DEFAULT_DEVICE_ID, E_SYSTEM);
1301 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1308 if (pEventArg != null)
1310 __pWifiDirectSystemAdapter->__pWifiDirectEvent->FireAsync(*pEventArg);
1315 _WifiDirectSystemAdapter::OnWifiDirectConnectionChanged(int errorCode, wifi_direct_connection_state_e connectionState,
1316 const char* pMacAddress, void* pUserData)
1318 SysLog(NID_NET_WIFI, "Enter, [connectionState:0x%x] [ErrorCode:0x%x]", connectionState, errorCode);
1319 SysLog(NID_NET_WIFI, "%ls", __pWifiDirectSystemAdapter->GetStringOfAllCurrentState().GetPointer());
1321 result r = E_SUCCESS;
1322 String peerMacAddress = _WifiDirectUtility::ConvertMacCharToString(pMacAddress);
1324 bool isOwner = false;
1325 wifi_direct_is_group_owner(&isOwner);
1327 switch(connectionState)
1329 // OnWifiDirectGroupCreatedN() with autonomous group owner mode
1330 case WIFI_DIRECT_GROUP_CREATED:
1331 SysLog(NID_NET_WIFI, "connectionState : WIFI_DIRECT_GROUP_CREATED");
1332 if (errorCode == WIFI_DIRECT_ERROR_NONE)
1334 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1335 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_OWNER)
1337 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1338 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1339 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1340 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT, r, E_REMOTE_DEVICE_NOT_FOUND);
1341 __pWifiDirectSystemAdapter->OnWifiDirectGroupCreated(L"", r);
1343 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1344 __pWifiDirectSystemAdapter->OnWifiDirectAutonomousGroupCreated(r);
1348 case WIFI_DIRECT_CONNECTION_RSP:
1349 SysLog(NID_NET_WIFI, "connectionState : WIFI_DIRECT_CONNECTION_RSP");
1350 switch(__pWifiDirectSystemAdapter->__currentState)
1352 case WIFI_DIRECT_SYSTEM_GROUP_CREATING:
1353 case WIFI_DIRECT_SYSTEM_CONNECTING:
1354 if (r == E_SUCCESS && isOwner == false)
1356 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1357 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1358 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1359 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1360 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT, r, E_REMOTE_DEVICE_NOT_FOUND);
1361 __pWifiDirectSystemAdapter->OnWifiDirectGroupCreated(peerMacAddress, r);
1363 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1364 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1365 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1366 __pWifiDirectSystemAdapter->OnWifiDirectConnected(peerMacAddress, r);
1368 else if(r != E_SUCCESS)
1370 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1371 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1372 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1373 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1374 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT, r, E_REMOTE_DEVICE_NOT_FOUND);
1375 __pWifiDirectSystemAdapter->OnWifiDirectGroupCreated(peerMacAddress, r);
1377 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1378 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1379 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1380 __pWifiDirectSystemAdapter->OnWifiDirectConnected(peerMacAddress, r);
1383 case WIFI_DIRECT_SYSTEM_ASSOCIATING:
1384 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1385 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1386 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1387 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1388 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT, r, E_REMOTE_DEVICE_NOT_FOUND);
1389 __pWifiDirectSystemAdapter->OnWifiDirectAssociationCompleted(peerMacAddress, r);
1391 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1392 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1393 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1394 __pWifiDirectSystemAdapter->OnWifiDirectConnected(peerMacAddress, r);
1396 case WIFI_DIRECT_SYSTEM_ACTIVATED:
1397 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1398 if (r == E_SUCCESS && isOwner == false)
1400 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1401 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1402 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1403 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT, r, E_REMOTE_DEVICE_NOT_FOUND);
1404 __pWifiDirectSystemAdapter->OnWifiDirectAssociationCompleted(peerMacAddress, r);
1406 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1407 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_AUTH_FAILED, r, E_AUTHENTICATION);
1408 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1409 __pWifiDirectSystemAdapter->OnWifiDirectConnected(peerMacAddress, r);
1413 SysLog(NID_NET_WIFI, "Unknown case - current state : %s", __pWifiDirectSystemAdapter->GetStringOfDeviceState());
1417 case WIFI_DIRECT_DISASSOCIATION_IND:
1418 SysLog(NID_NET_WIFI, "connectionState : WIFI_DIRECT_DISASSOCIATION_IND");
1419 __pWifiDirectSystemAdapter->OnWifiDirectClientDisassociated(peerMacAddress);
1420 __pWifiDirectSystemAdapter->OnWifiDirectDisconnected(peerMacAddress, E_SUCCESS);
1422 case WIFI_DIRECT_DISCONNECTION_RSP:
1423 SysLog(NID_NET_WIFI, "event type : WIFI_DIRECT_DISCONNECTION_RSP");
1424 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_DISCONNECTING)
1426 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1427 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1428 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1429 __pWifiDirectSystemAdapter->OnWifiDirectAssociationTerminated(WIFI_DIRECT_ASSOCIATION_TERMINATION_REASON_SELF_INITIATED, r);
1431 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1432 __pWifiDirectSystemAdapter->OnWifiDirectDisconnected(peerMacAddress, r);
1434 else if(__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_LEAVING)
1436 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1437 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1438 __pWifiDirectSystemAdapter->OnWifiDirectGroupLeft(r);
1440 else if(__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_CONNECT_CANCELLING)
1442 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1443 __pWifiDirectSystemAdapter->OnWifiDirectGroupCreated(peerMacAddress, E_OPERATION_CANCELED);
1444 __pWifiDirectSystemAdapter->OnWifiDirectConnected(peerMacAddress, E_OPERATION_CANCELED);
1447 case WIFI_DIRECT_DISCONNECTION_IND:
1448 SysLog(NID_NET_WIFI, "connectionState : WIFI_DIRECT_DISCONNECTION_IND");
1449 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1450 __pWifiDirectSystemAdapter->OnWifiDirectAssociationTerminated(WIFI_DIRECT_ASSOCIATION_TERMINATION_REASON_DISCONNECTED, E_SUCCESS);
1452 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1453 __pWifiDirectSystemAdapter->OnWifiDirectDisconnected(peerMacAddress, r);
1455 case WIFI_DIRECT_GROUP_DESTROYED:
1456 SysLog(NID_NET_WIFI, "connectionState : WIFI_DIRECT_GROUP_DESTROYED");
1457 switch(__pWifiDirectSystemAdapter->__currentState)
1459 case WIFI_DIRECT_SYSTEM_GROUP_CANCELING:
1460 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1461 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1462 __pWifiDirectSystemAdapter->OnWifiDirectGroupDestroyed(r);
1464 case WIFI_DIRECT_SYSTEM_OWNER:
1467 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1468 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1469 __pWifiDirectSystemAdapter->OnWifiDirectGroupDestroyed(r);
1471 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1472 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1473 __pWifiDirectSystemAdapter->OnWifiDirectGroupLeft(r);
1476 case WIFI_DIRECT_SYSTEM_DESTROYING:
1477 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1478 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1479 __pWifiDirectSystemAdapter->OnWifiDirectGroupDestroyed(r);
1481 case WIFI_DIRECT_SYSTEM_CLIENT:
1482 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1483 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1484 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1485 __pWifiDirectSystemAdapter->OnWifiDirectAssociationTerminated(WIFI_DIRECT_ASSOCIATION_TERMINATION_REASON_DISCONNECTED, r);
1487 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1488 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1489 __pWifiDirectSystemAdapter->OnWifiDirectGroupLeft(r);
1491 case WIFI_DIRECT_SYSTEM_LEAVING:
1492 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1493 _WifiDirectConvertErrorResult(errorCode != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1494 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_CONNECTION_FAILED, r, E_NOT_RESPONDING);
1495 __pWifiDirectSystemAdapter->OnWifiDirectGroupLeft(r);
1498 SysLog(NID_NET_WIFI, "Unknown case - current state : %s", __pWifiDirectSystemAdapter->GetStringOfDeviceState());
1503 SysLog(NID_NET_WIFI, "Unknown case %d", connectionState);
1509 _WifiDirectSystemAdapter::OnWifiDirectClientIpAssigned(const char *mac_address, const char *ip_address,
1510 const char *interface_address, void *user_data)
1512 SysLog(NID_NET_WIFI, "%ls", __pWifiDirectSystemAdapter->GetStringOfAllCurrentState().GetPointer());
1513 SysLog(NID_NET_WIFI, "mac address : %s, interface address : %s, ipaddress : %s", mac_address, interface_address, ip_address);
1515 switch(__pWifiDirectSystemAdapter->__currentState)
1517 case WIFI_DIRECT_SYSTEM_GROUP_CREATING:
1518 case WIFI_DIRECT_SYSTEM_CONNECTING:
1519 (void)__pWifiDirectSystemAdapter->InitializeCurrentState();
1520 __pWifiDirectSystemAdapter->OnWifiDirectGroupCreated(mac_address, E_SUCCESS);
1521 __pWifiDirectSystemAdapter->OnWifiDirectConnected(mac_address, E_SUCCESS);
1523 case WIFI_DIRECT_SYSTEM_OWNER:
1524 __pWifiDirectSystemAdapter->OnWifiDirectClientAssociated(mac_address);
1525 __pWifiDirectSystemAdapter->OnWifiDirectConnected(mac_address, E_SUCCESS);
1528 SysLog(NID_NET_WIFI, "unnecessary case %d", __pWifiDirectSystemAdapter->__currentState);
1534 _WifiDirectSystemAdapter::OnWifiDirectScanCompleted(int errorCode, wifi_direct_discovery_state_e discoveryState, void* pUserData)
1536 SysLog(NID_NET_WIFI, "Enter, [discoveryState:0x%x] [ErrorCode:0x%x]", discoveryState, errorCode);
1537 SysLog(NID_NET_WIFI, "%ls", __pWifiDirectSystemAdapter->GetStringOfAllCurrentState().GetPointer());
1539 _WifiDirectEventArg* pEventArg = null;
1540 result r = E_SYSTEM;
1541 _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1543 ArrayList foundPeerList(SingleObjectDeleter);
1545 switch(discoveryState)
1547 case WIFI_DIRECT_ONLY_LISTEN_STARTED:
1548 SysLog(NID_NET_WIFI, "discoveryState : WIFI_DIRECT_ONLY_LISTEN_STARTED");
1549 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1550 if(__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_ACTIVATING)
1552 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_ACTIVATED;
1553 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ACTIVATED, DEFAULT_DEVICE_ID, r);
1554 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1557 case WIFI_DIRECT_DISCOVERY_STARTED:
1558 SysLog(NID_NET_WIFI, "discoveryState : WIFI_DIRECT_DISCOVERY_STARTED");
1559 __pWifiDirectSystemAdapter->__discoveredPeerList.RemoveAll();
1561 case WIFI_DIRECT_DISCOVERY_FOUND:
1562 SysLog(NID_NET_WIFI, "discoveryState : WIFI_DIRECT_DISCOVERY_FOUND");
1563 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_GROUP_CREATING)
1565 int err = wifi_direct_foreach_discovered_peers(OnWifiDirectFindSameDeviceName, null);
1566 r = _WifiDirectUtility::ConvertErrorCode(err);
1567 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1569 else if (__pWifiDirectSystemAdapter->__currentScanState == WIFI_DIRECT_SYSTEM_SCAN_SCANNING)
1571 int err = wifi_direct_foreach_discovered_peers(OnWifiDirectPeerFound, &foundPeerList);
1572 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_foreach_discovered_peers()", err);
1573 r = _WifiDirectUtility::ConvertErrorCode(err);
1574 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1578 case WIFI_DIRECT_DISCOVERY_FINISHED:
1579 SysLog(NID_NET_WIFI, "discoveryState: WIFI_DIRECT_DISCOVERY_FINISHED");
1581 switch(__pWifiDirectSystemAdapter->__currentScanState)
1583 case WIFI_DIRECT_SYSTEM_SCAN_IDLE:
1585 case WIFI_DIRECT_SYSTEM_SCAN_LISTEN:
1587 case WIFI_DIRECT_SYSTEM_SCAN_CANCELLING:
1588 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1590 r = __pWifiDirectSystemAdapter->StartListenMode();
1591 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1593 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_CONNECT_CANCELLING)
1596 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED, DEFAULT_DEVICE_ID,
1597 WifiDirectGroupInfo(), WifiDirectDeviceInfo(), WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE, E_OPERATION_CANCELED);
1601 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_SCAN_COMPLETED, DEFAULT_DEVICE_ID,
1602 (Tizen::Net::NetConnection*)null, E_OPERATION_CANCELED);
1606 case WIFI_DIRECT_SYSTEM_SCAN_LISTEN_CANCELING_TO_SCAN:
1607 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_CONNECT_CANCELLING)
1609 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1611 r = __pWifiDirectSystemAdapter->StartListenMode();
1612 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1614 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED, DEFAULT_DEVICE_ID,
1615 WifiDirectGroupInfo(), WifiDirectDeviceInfo(), WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE, E_OPERATION_CANCELED);
1619 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1620 r = __pWifiDirectSystemAdapter->StartDiscovery();
1621 SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1624 case WIFI_DIRECT_SYSTEM_SCAN_SCANNING:
1625 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1627 if (__pWifiDirectSystemAdapter->__currentState == WIFI_DIRECT_SYSTEM_GROUP_CREATING)
1629 bool isFind = false;
1630 int err = wifi_direct_foreach_discovered_peers(OnWifiDirectFindSameDeviceName, &isFind);
1631 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_foreach_discovered_peers() : %ls", err, isFind ? L"Find" : L"Not Find");
1633 if (isFind == false)
1635 pEventArg = new _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED, DEFAULT_DEVICE_ID,
1636 WifiDirectGroupInfo(), WifiDirectDeviceInfo(), WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE,
1637 E_REMOTE_DEVICE_NOT_FOUND);
1639 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_ACTIVATED;
1644 __pWifiDirectSystemAdapter->__currentScanState = WIFI_DIRECT_SYSTEM_SCAN_IDLE;
1646 result res = E_SUCCESS;
1648 ArrayList* pDeviceInfoList = new (std::nothrow) ArrayList();
1649 SysTryReturnVoidResult(NID_NET_WIFI, pDeviceInfoList != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1650 res = pDeviceInfoList->Construct();
1651 if(res != E_SUCCESS)
1653 delete pDeviceInfoList;
1654 SysLog(NID_NET_WIFI, "Failed to construct list");
1658 int err = wifi_direct_foreach_discovered_peers(OnWifiDirectEachDiscoveredPeer, pDeviceInfoList);
1659 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_foreach_discovered_peers()", err);
1660 if( err != WIFI_DIRECT_ERROR_NONE
1661 && err != WIFI_DIRECT_ERROR_OPERATION_FAILED) // when can't find any remote device.
1663 pDeviceInfoList->RemoveAll(true);
1664 delete pDeviceInfoList;
1665 SysLog(NID_NET_WIFI, "Error on wifi_direct_foreach_discovered_peers");
1669 res = __pWifiDirectSystemAdapter->StartListenMode();
1670 SysTryCatch(NID_NET_WIFI, res == E_SUCCESS, , res, "[%s] Propagating.", GetErrorMessage(res));
1672 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_SCAN_COMPLETED, DEFAULT_DEVICE_ID,
1673 pDeviceInfoList, r);
1677 SysLogException(NID_NET_WIFI, E_SYSTEM, "[E_SYSTEM] Not an allowed type : %d", __pWifiDirectSystemAdapter->__currentScanState);
1681 } // end of switch(discoveryState)
1683 if (pEventArg != null)
1685 __pWifiDirectSystemAdapter->__pWifiDirectEvent->FireAsync(*pEventArg);
1689 SysLog(NID_NET_WIFI, "Exit, %ls",__pWifiDirectSystemAdapter->GetStringOfAllCurrentState().GetPointer());
1694 _WifiDirectSystemAdapter::OnWifiDirectEachDiscoveredPeer(wifi_direct_discovered_peer_info_s* peer, void* pUserData)
1696 ArrayList* pList = static_cast< ArrayList* >(pUserData);
1697 SysTryReturn(NID_NET_WIFI, pList != null, false, E_SYSTEM, "[E_SYSTEM] Failed to acquire list of peers");
1699 WifiDirectDeviceInfo* pDeviceInfo = _WifiDirectUtility::ConvertDiscoveryEntry2DeviceInfoN(*peer);
1700 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1702 pList->Add(*pDeviceInfo);
1708 _WifiDirectSystemAdapter::OnWifiDirectPeerFound(wifi_direct_discovered_peer_info_s* peer, void* pUserData)
1710 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo(_WifiDirectUtility::ConvertDiscoveryEntry2DeviceInfoN(*peer));
1711 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1715 result r = __pWifiDirectSystemAdapter->__discoveredPeerList.IndexOf(*pDeviceInfo, index);
1717 if (r == E_OBJ_NOT_FOUND || r == E_OUT_OF_RANGE)
1719 _WifiDirectEventArg* pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_SCAN_FOUND, DEFAULT_DEVICE_ID,
1721 SysTryReturn(NID_NET_WIFI, pEventArg != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1723 __pWifiDirectSystemAdapter->__pWifiDirectEvent->FireAsync(*pEventArg);
1725 __pWifiDirectSystemAdapter->__discoveredPeerList.Add(pDeviceInfo.release());
1732 _WifiDirectSystemAdapter::OnWifiDirectEachConnectedClient(wifi_direct_connected_peer_info_s* pPeer, void* pUserData)
1734 IList* pList = static_cast<IList*>(pUserData);
1735 SysTryReturn(NID_NET_WIFI, pList != null, false, E_SYSTEM, "[E_SYSTEM] Failed to acquire list of peers");
1737 WifiDirectDeviceInfo * pDeviceInfo= _WifiDirectUtility::ConvertPeerInfoToDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT, *pPeer);
1738 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1740 pList->Add(*pDeviceInfo);
1746 _WifiDirectSystemAdapter::OnWifiDirectConnectedOwner(wifi_direct_connected_peer_info_s* pPeer, void* pUserData)
1748 IList* pList = static_cast<IList*>(pUserData);
1749 SysTryReturn(NID_NET_WIFI, pList != null, false, E_SYSTEM, "[E_SYSTEM] Failed to acquire list of peers");
1751 WifiDirectDeviceInfo * pDeviceInfo= _WifiDirectUtility::ConvertPeerInfoToDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER, *pPeer);
1752 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1754 pList->Add(*pDeviceInfo);
1760 _WifiDirectSystemAdapter::OnWifiDirectFindSameDeviceName(wifi_direct_discovered_peer_info_s* pPeer, void* pUserData)
1762 String convertDevicename(pPeer->device_name);
1764 result r = __pWifiDirectSystemAdapter->__pWifiServiceProxy->GetWifiDirectLocalDeviceName(deviceName);
1765 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1767 if (deviceName.CompareTo(convertDevicename) == 0 )
1769 if(pUserData != null)
1771 *(static_cast< bool* >(pUserData)) = true;
1774 int err = wifi_direct_connect(pPeer->mac_address);
1775 result r = _WifiDirectUtility::ConvertErrorCode(err);
1779 _WifiDirectEventArg* pEventArg = new _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED,
1780 DEFAULT_DEVICE_ID, WifiDirectGroupInfo(), WifiDirectDeviceInfo(), WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE, E_SYSTEM);
1782 __pWifiDirectSystemAdapter->__currentState = WIFI_DIRECT_SYSTEM_ACTIVATED;
1783 __pWifiDirectSystemAdapter->__pWifiDirectEvent->FireAsync(*pEventArg);
1793 _WifiDirectSystemAdapter::OnWifiDirectSupportedWpsMode(wifi_direct_wps_type_e type, void* pUserData)
1795 ArrayListT<WifiWpsConfigurationMode>* pList = static_cast< ArrayListT<WifiWpsConfigurationMode>* >(pUserData);
1796 SysTryReturn(NID_NET_WIFI, pList != null, false, E_SYSTEM, "[E_SYSTEM] Failed to acquire list of peers");
1798 WifiWpsConfigurationMode wpsMode = _WifiDirectUtility::ConvertSupportedWpsMode(type);
1800 pList->Add(wpsMode);
1806 _WifiDirectSystemAdapter::InitializeCurrentState(void)
1808 result r = E_SUCCESS;
1809 int err = WIFI_DIRECT_ERROR_NONE;
1811 wifi_direct_state_e status = WIFI_DIRECT_STATE_DEACTIVATED;
1813 err = wifi_direct_get_state(&status);
1814 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1815 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1817 bool isOwner = false;
1818 if (status != WIFI_DIRECT_STATE_DEACTIVATED
1819 && status != WIFI_DIRECT_STATE_DEACTIVATING
1820 && status != WIFI_DIRECT_STATE_ACTIVATING)
1822 err = wifi_direct_is_group_owner(&isOwner);
1823 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_is_group_owner()", err);
1825 _WifiDirectConvertErrorResult(err != WIFI_DIRECT_ERROR_NONE, r, E_SYSTEM);
1826 SysTryReturn(NID_NET_WIFI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1831 case WIFI_DIRECT_STATE_DEACTIVATED:
1832 __currentState = WIFI_DIRECT_SYSTEM_DEACTIVATED;
1834 case WIFI_DIRECT_STATE_DEACTIVATING:
1835 __currentState = WIFI_DIRECT_SYSTEM_DEACTIVATING;
1837 case WIFI_DIRECT_STATE_ACTIVATING:
1838 __currentState = WIFI_DIRECT_SYSTEM_ACTIVATING;
1840 case WIFI_DIRECT_STATE_DISCOVERING:
1842 if (isOwner == true)
1844 __currentState = WIFI_DIRECT_SYSTEM_OWNER;
1848 __currentState = WIFI_DIRECT_SYSTEM_ACTIVATED;
1851 bool isListenMode = false;
1852 wifi_direct_is_listening_only(&isListenMode);
1853 if (isListenMode == true)
1855 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_LISTEN;
1859 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_SCANNING;
1863 case WIFI_DIRECT_STATE_ACTIVATED:
1864 __currentState = WIFI_DIRECT_SYSTEM_ACTIVATED;
1865 r = StartListenMode();
1866 SysLogException(NID_NET_WIFI, r, "[%s] Propagating.", GetErrorMessage(r));
1868 case WIFI_DIRECT_STATE_CONNECTED:
1869 if (isOwner == true)
1871 __currentState = WIFI_DIRECT_SYSTEM_OWNER;
1875 __currentState = WIFI_DIRECT_SYSTEM_CLIENT;
1877 // ToDo: Getting peer list
1879 case WIFI_DIRECT_STATE_CONNECTING:
1880 __currentState = WIFI_DIRECT_SYSTEM_CONNECTING;
1882 case WIFI_DIRECT_STATE_DISCONNECTING:
1883 if (isOwner == true)
1885 __currentState = WIFI_DIRECT_SYSTEM_DESTROYING;
1889 __currentState = WIFI_DIRECT_SYSTEM_DISCONNECTING;
1893 SysLog(NID_NET_WIFI, "Unknown case : %d", status);
1902 _WifiDirectSystemAdapter::StartListenMode(void)
1904 result r = E_SYSTEM;
1905 int err = wifi_direct_start_discovery(true, 0);
1906 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1907 SysTryReturnResult(NID_NET_WIFI, err == WIFI_DIRECT_ERROR_NONE, E_SYSTEM, "Staring discovery has failed.", GetErrorMessage(r));
1911 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_LISTEN;
1918 _WifiDirectSystemAdapter::StopListenModeToScan(void)
1920 result r = E_SYSTEM;
1921 int err = wifi_direct_cancel_discovery();
1922 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1923 SysTryReturnResult(NID_NET_WIFI, err == WIFI_DIRECT_ERROR_NONE, E_SYSTEM, "Cancelling discovery has failed.", GetErrorMessage(r));
1927 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_LISTEN_CANCELING_TO_SCAN;
1934 _WifiDirectSystemAdapter::StartDiscovery(void)
1936 result r = E_SYSTEM;
1937 int err = wifi_direct_start_discovery(false, WIFI_DIRECT_DISCOVERY_TIMEOUT);
1938 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1939 SysTryReturnResult(NID_NET_WIFI, err == WIFI_DIRECT_ERROR_NONE, E_SYSTEM, "Staring discovery has failed.", GetErrorMessage(r));
1943 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_SCANNING;
1950 _WifiDirectSystemAdapter::CancelDiscovery(void)
1952 result r = E_SYSTEM;
1953 int err = wifi_direct_cancel_discovery();
1954 _WifiDirectConvertErrorResult(err == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
1955 SysTryReturnResult(NID_NET_WIFI, err == WIFI_DIRECT_ERROR_NONE, E_SYSTEM, "Cancelling discovery has failed.", GetErrorMessage(r));
1959 __currentScanState = WIFI_DIRECT_SYSTEM_SCAN_CANCELLING;
1966 _WifiDirectSystemAdapter::GetStringOfDeviceState(void) const
1968 const char* pStateStr[] = { "DEACTIVATED",
1972 "AUTONOMOUS_GROUP_CREATING",
1976 "CONNECT_CANCELLING",
1984 return pStateStr[__currentState];
1988 _WifiDirectSystemAdapter::GetStringOfScanState(void) const
1990 const char* pStateStr[] = { "SCAN_IDLE",
1992 "SCAN_LISTEN_CANCELING_TO_SCAN",
1994 "SCAN_CANCELLING" };
1996 return pStateStr[__currentScanState];
2000 _WifiDirectSystemAdapter::GetStringOfAllCurrentState(void) const
2002 String currentState;
2004 (void)currentState.Append("DeviceState : ");
2005 (void)currentState.Append(GetStringOfDeviceState());
2006 (void)currentState.Append(" | ");
2007 (void)currentState.Append("ScanState : ");
2008 (void)currentState.Append(GetStringOfScanState());
2010 return currentState;
2013 WifiDirectDeviceInfo*
2014 _WifiDirectSystemAdapter::GetConnectedPeerDeviceInfoN(WifiDirectGroupMemberType peerMemberType, const Tizen::Base::String* pPeerMacAddress /* = null */) const
2016 unique_ptr<ArrayList,AllElementsDeleter> pDeviceInfoList(new (std::nothrow) ArrayList());
2017 SysTryReturn(NID_NET_WIFI, pDeviceInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2019 WifiDirectDeviceInfo* pDeviceInfo = null;
2020 int err = WIFI_DIRECT_ERROR_NONE;
2022 if (peerMemberType == WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER)
2024 err = wifi_direct_foreach_connected_peers(OnWifiDirectConnectedOwner, pDeviceInfoList.get());
2025 SysTryReturn(NID_NET_WIFI, err == WIFI_DIRECT_ERROR_NONE, null, E_SYSTEM, "Getting the information of connected device has failed.");
2027 if (pDeviceInfoList->GetCount() != 0)
2029 pDeviceInfo = dynamic_cast<WifiDirectDeviceInfo*>(pDeviceInfoList->GetAt(0));
2030 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, null, E_SYSTEM, "Failed to get a owner owner information.");
2035 err = wifi_direct_foreach_connected_peers(OnWifiDirectEachConnectedClient, pDeviceInfoList.get());
2036 SysTryReturn(NID_NET_WIFI, err == WIFI_DIRECT_ERROR_NONE, null, E_SYSTEM, "Getting the information of connected device has failed.");
2038 for (int i = 0; i < pDeviceInfoList->GetCount(); i++)
2040 pDeviceInfo = dynamic_cast<WifiDirectDeviceInfo*>(pDeviceInfoList->GetAt(i));
2041 SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, null, E_SYSTEM, "Failed to get a group client information.");
2043 if(pDeviceInfo->GetMacAddress() == *pPeerMacAddress)
2050 return new (std::nothrow) WifiDirectDeviceInfo(*pDeviceInfo);
2054 _WifiDirectSystemAdapter::OnWifiDirectGroupCreated(const String& peerMacAddress, result r)
2056 _WifiDirectEventArg* pEventArg = null;
2058 unique_ptr<WifiDirectGroupInfo> pGroupInfo;
2059 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo;
2063 pEventArg = new _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED, DEFAULT_DEVICE_ID,
2064 WifiDirectGroupInfo(), WifiDirectDeviceInfo(), WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE, r);
2068 bool isGroupOwner = false;
2069 (void)wifi_direct_is_group_owner(&isGroupOwner);
2071 if (isGroupOwner == true)
2073 pGroupInfo.reset(GetGroupSettingInfoN());
2074 pDeviceInfo.reset(GetLocalDeviceInfoN());
2079 (void)wifi_direct_get_ssid(&pSsid);
2084 (void)wifi_direct_get_operating_channel(&channel);
2085 WifiRadioChannel operatingChannel = _WifiDirectUtility::ConvertChannel(channel);
2087 _WifiDirectGroupInfoImpl groupInfoImpl;
2088 groupInfoImpl.SetAutonomousGroupOwnerMode(false);
2089 groupInfoImpl.SetBssId(peerMacAddress);
2090 groupInfoImpl.SetSsid(ssid);
2091 groupInfoImpl.SetOperatingChannel(operatingChannel);
2093 pGroupInfo.reset(_WifiDirectGroupInfoImpl::CreateWifiDirectGroupInfoInstanceN(groupInfoImpl));
2094 pDeviceInfo.reset(GetConnectedPeerDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER));
2097 if(pGroupInfo != null && pDeviceInfo != null)
2099 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED, DEFAULT_DEVICE_ID, *pGroupInfo,
2100 *pDeviceInfo, isGroupOwner ? WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER : WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT, r);
2104 SysLogException(NID_NET_WIFI, E_SYSTEM, "[E_SYSTEM] Failed to get group info or device info.");
2105 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_CREATED, DEFAULT_DEVICE_ID, WifiDirectGroupInfo(),
2106 WifiDirectDeviceInfo(), WIFI_DIRECT_GROUP_MEMBER_TYPE_NONE, E_SYSTEM);
2110 if (pEventArg != null)
2112 __pWifiDirectEvent->FireAsync(*pEventArg);
2117 _WifiDirectSystemAdapter::OnWifiDirectAssociationCompleted(const Tizen::Base::String& peerMacAddress, result r)
2119 _WifiDirectEventArg* pEventArg = null;
2120 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo;
2124 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ASSOCIATED, DEFAULT_DEVICE_ID, r);
2128 // Get the peer device information
2129 pDeviceInfo.reset(GetConnectedPeerDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER));
2131 if (pDeviceInfo != null)
2133 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ASSOCIATED, DEFAULT_DEVICE_ID, *pDeviceInfo, r);
2137 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_ASSOCIATED, DEFAULT_DEVICE_ID, E_SYSTEM);
2141 if (pEventArg != null)
2143 __pWifiDirectEvent->FireAsync(*pEventArg);
2148 _WifiDirectSystemAdapter::OnWifiDirectClientAssociated(const Tizen::Base::String& peerMacAddress)
2150 _WifiDirectEventArg* pEventArg = null;
2151 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo(GetConnectedPeerDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT, &peerMacAddress));
2153 if (pDeviceInfo != null)
2155 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_GO_EVENT_CLIENT_ASSOCIATED, DEFAULT_DEVICE_ID, *pDeviceInfo);
2157 __pWifiDirectEvent->FireAsync(*pEventArg);
2162 _WifiDirectSystemAdapter::OnWifiDirectClientDisassociated(const Tizen::Base::String& peerMacAddress)
2164 _WifiDirectEventArg* pEventArg = null;
2166 WifiDirectDeviceInfo* pDeviceInfo = GetPeerInfo(peerMacAddress);
2167 WifiDirectAssociationTerminationReason reason = WIFI_DIRECT_ASSOCIATION_TERMINATION_REASON_SELF_INITIATED;
2169 if (pDeviceInfo != null)
2171 if (_WifiDirectDeviceInfoImpl::GetInstance(*pDeviceInfo)->IsDisconnecting() != true)
2173 reason = WIFI_DIRECT_ASSOCIATION_TERMINATION_REASON_DISCONNECTED;
2176 pEventArg = new (std::nothrow)_WifiDirectEventArg( WIFI_DIRECT_GO_EVENT_CLIENT_DISASSOCIATED,
2177 DEFAULT_DEVICE_ID, *pDeviceInfo, WIFI_DIRECT_ASSOCIATION_TERMINATION_REASON_DISCONNECTED);
2180 if (pEventArg != null)
2182 __pWifiDirectEvent->FireAsync(*pEventArg);
2187 _WifiDirectSystemAdapter::OnWifiDirectAssociationTerminated(WifiDirectAssociationTerminationReason reason, result r)
2189 _WifiDirectEventArg* pEventArg = null;
2191 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_GC_EVENT_DISASSOCIATED, DEFAULT_DEVICE_ID, reason, r);
2192 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2194 __pWifiDirectEvent->FireAsync(*pEventArg);
2198 _WifiDirectSystemAdapter::OnWifiDirectGroupDestroyed(result r)
2200 _WifiDirectEventArg* pEventArg = null;
2202 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_GO_EVENT_GROUP_DESTROYED, DEFAULT_DEVICE_ID, r);
2203 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2205 __pWifiDirectEvent->FireAsync(*pEventArg);
2209 _WifiDirectSystemAdapter::OnWifiDirectConnected(const Tizen::Base::String& peerMacAddress, result r)
2211 _WifiDirectEventArg* pEventArg = null;
2212 unique_ptr<WifiDirectDeviceInfo> pDeviceInfo;
2216 bool isGroupOwner = false;
2217 int err = wifi_direct_is_group_owner(&isGroupOwner);
2218 SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_is_group_owner()", err);
2220 if (isGroupOwner == true)
2222 pDeviceInfo.reset(GetConnectedPeerDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_CLIENT, &peerMacAddress));
2226 pDeviceInfo.reset(GetConnectedPeerDeviceInfoN(WIFI_DIRECT_GROUP_MEMBER_TYPE_OWNER, &peerMacAddress));
2229 if (pDeviceInfo != null)
2231 AddPeerInfo(pDeviceInfo.get());
2232 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_CONNECTED, DEFAULT_DEVICE_ID, *pDeviceInfo, r);
2234 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2239 pEventArg = new (std::nothrow) _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_CONNECTED, DEFAULT_DEVICE_ID, WifiDirectDeviceInfo(), r);
2240 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2243 __pWifiDirectEvent->FireAsync(*pEventArg);
2247 _WifiDirectSystemAdapter::OnWifiDirectDisconnected(const Tizen::Base::String& peerMacAddress, result r)
2249 _WifiDirectEventArg* pEventArg = null;
2251 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_DISCONNECTED, DEFAULT_DEVICE_ID, peerMacAddress);
2252 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2254 WifiDirectDeviceInfo* pDeviceInfoTemp = GetPeerInfo(peerMacAddress);
2255 if (pDeviceInfoTemp != null)
2257 RemovePeerInfo(pDeviceInfoTemp);
2260 __pWifiDirectEvent->FireAsync(*pEventArg);
2264 _WifiDirectSystemAdapter::OnWifiDirectAutonomousGroupCreated(result r)
2266 _WifiDirectEventArg* pEventArg = new _WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_AUTONOMOS_GROUP_CREATED, DEFAULT_DEVICE_ID, r);
2267 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2269 __pWifiDirectEvent->FireAsync(*pEventArg);
2273 _WifiDirectSystemAdapter::OnWifiDirectGroupLeft(result r)
2275 _WifiDirectEventArg* pEventArg = null;
2277 pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_GROUP_LEFT, DEFAULT_DEVICE_ID);
2278 SysTryReturnVoidResult(NID_NET_WIFI, pEventArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2280 __pWifiDirectEvent->FireAsync(*pEventArg);
2283 } } } // Tizen::Net::Wifi