Use pubSubId and peerMac to get DataPathInfo on DataPathRequest event
authorCheoleun Moon <chleun.moon@samsung.com>
Wed, 8 Apr 2020 13:10:54 +0000 (22:10 +0900)
committerCheoleun Moon <chleun.moon@samsung.com>
Wed, 8 Apr 2020 13:10:54 +0000 (22:10 +0900)
include/NanDataPathManager.h
include/NanUtils.h
src/NanDataPathManager.cpp
src/NanPeerManager.cpp
src/NanServiceProvider.cpp
src/NanUtils.cpp

index 1459c756a4bd9feef190a1323f76240aa8c62563..09fb3b061f427425602ad879f8999c1632c157d5 100644 (file)
@@ -44,6 +44,7 @@ public:
        void removeDataPathInfo(uint16_t pubSubId);
        NanDataPathInformation *getDataPathInfo(uint32_t dataPathId);
        NanDataPathInformation *getDataPathInfo(uint16_t pubSubId, uint32_t peerId);
+       NanDataPathInformation *getDataPathInfo(uint16_t pubSubId, const uint8_t *peerMac);
 
        void clear();
 
index 6b2a28294aa86b090e05b9360165b54440254a20..dadb64afde79f121e4b09ab251e6331625ac26ca 100644 (file)
@@ -27,6 +27,7 @@
        }\
 } while (0)
 
+bool isSameMacAddress(const uint8_t *mac1, const uint8_t *mac2);
 bool isWifiInterfaceUp(const char *interfaceName);
 int addRoute(const char *interfaceName, const char *ipv6Address);
 int deleteRoute(const char *interfaceName, const char *ipv6Address);
index f33f896750f37e38a500e67bd5ce9d08356cda7d..1fc4fd83d91870d2a6c828783bf451e746ab2d49 100644 (file)
@@ -21,6 +21,7 @@
 #include "NanDataPathManager.h"
 #include "NanDefinitions.h"
 #include "NanLog.h"
+#include "NanUtils.h"
 
 NAN_NAMESPACE_USE;
 
@@ -164,6 +165,20 @@ NanDataPathInformation *NanDataPathManager::getDataPathInfo(uint16_t pubSubId, u
        return iter->second;
 }
 
+NanDataPathInformation *NanDataPathManager::getDataPathInfo(uint16_t pubSubId, const uint8_t *peerMac)
+{
+       for (const auto &kv : mDataPathInfoMap) {
+               if (kv.first.first != pubSubId)
+                       continue;
+               NanPeer *peer = kv.second->getPeer();
+               if (peer != nullptr && isSameMacAddress(peer->getMacAddr(), peerMac)) {
+                       NAN_LOGI("found! pubSubId: %u, ndpId: %d)", pubSubId, kv.second->getDataPathId());
+                       return kv.second;
+               }
+       }
+       return nullptr;
+}
+
 void NanDataPathManager::removeAllDataPathInfo()
 {
        for (const auto &kv : mDataPathInfoMap)
index 3d8da94de523689e879ee9382f8b625a432aed82..d68a0feefc61bcb1306a13f55c672bf8e69c79c9 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "NanPeerManager.h"
 #include "NanLog.h"
+#include "NanUtils.h"
 
 NAN_NAMESPACE_USE;
 
@@ -68,7 +69,7 @@ NanPeer *NanPeerManager::findPeer(uint32_t requestorId, const unsigned char *add
        for (auto peerIterator = mPeerMap.begin(); peerIterator != mPeerMap.end(); peerIterator++)
        {
                if (requestorId == peerIterator->second->getRequestorId()
-                               && memcmp(addr, peerIterator->second->getMacAddr(), NAN_MAC_ADDR_LEN) == 0) {
+                               && isSameMacAddress(addr, peerIterator->second->getMacAddr()) == 0) {
                        NAN_LOGI("found peer(%d)", peerIterator->first);
                        return peerIterator->second;
                }
index ba2582e989e94c8d15f449592c42d5d309798fbc..70fcff764fdab7e6aa2f1a69bb448cda1dfe5676 100644 (file)
@@ -1220,22 +1220,16 @@ void NanServiceProvider::receiveDataPathRequestEvent(const NanDataPathRequestEve
        NAN_LOGI("Receive Event [DATA_PATH_REQUEST]");
        NAN_LOGI("serviceId(%u) dataPathId(%u)", event.serviceId, event.dataPathId);
 
-       NanPeer *peer = mPeerManager.findPeer(event.serviceId, event.addr);
        NanClient *client = mClientManager.getClientWithPubSubId(event.serviceId);
 
-       if (!peer && client) {
-               NAN_LOGE("No matched peer. Send End event.");
-               closeDataPathInternal(event.dataPathId, client->getClientId());
-               // Don't need to emit a signal because it is going to be sent in receiveDataPathEndEvent.
-               return;
-       } else if (!client) { 
+       if (!client) { 
                NAN_LOGE("No matched client. Send End event.");
                closeDataPathInternal(event.dataPathId, -1);
                return;
        }
 
        NanDataPathInformation *info
-               = mDataPathManager.getDataPathInfo(event.serviceId, peer->getPeerId());
+               = mDataPathManager.getDataPathInfo(event.serviceId, event.addr);
        if (!info) {
                NAN_LOGE("No matched DataPathInfo. Send End event");
                closeDataPathInternal(event.dataPathId, client->getClientId());
index 3eb00a5dfa4ad56221a5cf789579d54fd7a9b8d4..996528c645142d26093482004bc7d1adb272ff46 100644 (file)
 #include <sys/socket.h>
 #include <unistd.h>
 
-#include "NanUtils.h"
+#include "NanDefinitions.h"
 #include "NanLog.h"
+#include "NanUtils.h"
+
+bool isSameMacAddress(const uint8_t *mac1, const uint8_t *mac2)
+{
+       return memcmp(mac1, mac2, NAN_MAC_ADDR_LEN) == 0;
+}
 
 bool isWifiInterfaceUp(const char *interfaceName)
 {