merge with master
[framework/osp/net.git] / src / wifi / FNetWifi_WifiDirectSystemAdapter.cpp
index 3e9470f..a03457a 100644 (file)
@@ -1149,7 +1149,7 @@ _WifiDirectSystemAdapter::Construct(void)
     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);
@@ -1177,20 +1177,20 @@ result
 _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)
         {
@@ -1206,7 +1206,9 @@ _WifiDirectSystemAdapter::_WifiDirectSystemAdapter(void)
     , __pScanResult(null)
     , __currentState(WIFI_DIRECT_SYSTEM_DEACTIVATED)
     , __currentScanState(WIFI_DIRECT_SYSTEM_SCAN_IDLE)
-    , __peerList()
+    , __connectedPeerList(SingleObjectDeleter)
+    , __discoveredPeerList(SingleObjectDeleter)
+
     , __pWifiServiceProxy(null)
 {
 
@@ -1216,8 +1218,6 @@ _WifiDirectSystemAdapter::~_WifiDirectSystemAdapter(void)
 {
     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);
 }
@@ -1540,6 +1540,8 @@ _WifiDirectSystemAdapter::OnWifiDirectScanCompleted(int errorCode, wifi_direct_d
     result r = E_SYSTEM;
     _WifiDirectConvertErrorResult(errorCode == WIFI_DIRECT_ERROR_NONE, r, E_SUCCESS);
 
+    ArrayList foundPeerList(SingleObjectDeleter);
+
     switch(discoveryState)
     {
     case WIFI_DIRECT_ONLY_LISTEN_STARTED:
@@ -1554,6 +1556,7 @@ _WifiDirectSystemAdapter::OnWifiDirectScanCompleted(int errorCode, wifi_direct_d
         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");
@@ -1563,6 +1566,14 @@ _WifiDirectSystemAdapter::OnWifiDirectScanCompleted(int errorCode, wifi_direct_d
             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");
@@ -1694,6 +1705,30 @@ _WifiDirectSystemAdapter::OnWifiDirectEachDiscoveredPeer(wifi_direct_discovered_
 }
 
 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);