r = InitializeCurrentState();
SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
- r = __peerList.Construct();
+ r = __connectedPeerList.Construct();
SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , E_SYSTEM, "[%s] Construction of ArrayList has failed.", GetErrorMessage(r));
__pWifiDirectEvent = move(pWifiDirectEvent);
_WifiDirectSystemAdapter::AddPeerInfo(WifiDirectDeviceInfo* pPeerInfo)
{
WifiDirectDeviceInfo* pPeerInfoTemp = new WifiDirectDeviceInfo(*pPeerInfo);
- return __peerList.Add(*pPeerInfoTemp);
+ return __connectedPeerList.Add(*pPeerInfoTemp);
}
result
_WifiDirectSystemAdapter::RemovePeerInfo(WifiDirectDeviceInfo* pPeerInfo)
{
- return __peerList.Remove(*pPeerInfo, true);
+ return __connectedPeerList.Remove(*pPeerInfo, true);
}
WifiDirectDeviceInfo*
_WifiDirectSystemAdapter::GetPeerInfo(const String& macAddress)
{
WifiDirectDeviceInfo* pDeviceInfo = null;
- for(int i = 0; i < __peerList.GetCount(); i++)
+ for(int i = 0; i < __connectedPeerList.GetCount(); i++)
{
- pDeviceInfo = dynamic_cast<WifiDirectDeviceInfo*>(__peerList.GetAt(i));
+ pDeviceInfo = dynamic_cast<WifiDirectDeviceInfo*>(__connectedPeerList.GetAt(i));
if (pDeviceInfo != null && pDeviceInfo->GetMacAddress() == macAddress)
{
, __pScanResult(null)
, __currentState(WIFI_DIRECT_SYSTEM_DEACTIVATED)
, __currentScanState(WIFI_DIRECT_SYSTEM_SCAN_IDLE)
- , __peerList()
+ , __connectedPeerList(SingleObjectDeleter)
+ , __discoveredPeerList(SingleObjectDeleter)
+
, __pWifiServiceProxy(null)
{
{
int err = WIFI_DIRECT_ERROR_NONE;
- __peerList.RemoveAll(true);
-
err = wifi_direct_deinitialize();
SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_deinitialize()", err);
}
result r = E_SYSTEM;
_WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
+ ArrayList foundPeerList(SingleObjectDeleter);
+
switch(discoveryState)
{
case WIFI_DIRECT_ONLY_LISTEN_STARTED:
break;
case WIFI_DIRECT_DISCOVERY_STARTED:
SysLog(NID_NET_WIFI, "discoveryState : WIFI_DIRECT_DISCOVERY_STARTED");
+ __pWifiDirectSystemAdapter->__discoveredPeerList.RemoveAll();
break;
case WIFI_DIRECT_DISCOVERY_FOUND:
SysLog(NID_NET_WIFI, "discoveryState : WIFI_DIRECT_DISCOVERY_FOUND");
r = _WifiDirectUtility::ConvertErrorCode(err);
SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
}
+ else if (__pWifiDirectSystemAdapter->__currentScanState == WIFI_DIRECT_SYSTEM_SCAN_SCANNING)
+ {
+ int err = wifi_direct_foreach_discovered_peers(OnWifiDirectPeerFound, &foundPeerList);
+ SysLog(NID_NET_WIFI, "[0x%x] Return value of wifi_direct_foreach_discovered_peers()", err);
+ r = _WifiDirectUtility::ConvertErrorCode(err);
+ SysTryCatch(NID_NET_WIFI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+
break;
case WIFI_DIRECT_DISCOVERY_FINISHED:
SysLog(NID_NET_WIFI, "discoveryState: WIFI_DIRECT_DISCOVERY_FINISHED");
}
bool
+_WifiDirectSystemAdapter::OnWifiDirectPeerFound(wifi_direct_discovered_peer_info_s* peer, void* pUserData)
+{
+ unique_ptr<WifiDirectDeviceInfo> pDeviceInfo(_WifiDirectUtility::ConvertDiscoveryEntry2DeviceInfoN(*peer));
+ SysTryReturn(NID_NET_WIFI, pDeviceInfo != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+ int index = 0;
+
+ result r = __pWifiDirectSystemAdapter->__discoveredPeerList.IndexOf(*pDeviceInfo, index);
+
+ if (r == E_OBJ_NOT_FOUND || r == E_OUT_OF_RANGE)
+ {
+ _WifiDirectEventArg* pEventArg = new (std::nothrow)_WifiDirectEventArg(WIFI_DIRECT_DEVICE_EVENT_SCAN_FOUND, DEFAULT_DEVICE_ID,
+ *pDeviceInfo);
+ SysTryReturn(NID_NET_WIFI, pEventArg != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+ __pWifiDirectSystemAdapter->__pWifiDirectEvent->FireAsync(*pEventArg);
+
+ __pWifiDirectSystemAdapter->__discoveredPeerList.Add(pDeviceInfo.release());
+ }
+
+ return true;
+}
+
+bool
_WifiDirectSystemAdapter::OnWifiDirectEachConnectedClient(wifi_direct_connected_peer_info_s* pPeer, void* pUserData)
{
IList* pList = static_cast<IList*>(pUserData);