[CONPRO-1568] Ignoring duplicate IPv6/Ipv4 messages 00/229400/1
authorKush <kush.agrawal@samsung.com>
Wed, 4 Mar 2020 15:32:39 +0000 (21:02 +0530)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Wed, 1 Apr 2020 01:32:34 +0000 (10:32 +0900)
Issue : There can be duplicate messages coming from multiple ipv6 (or v4)
addresses in the system. The presence of ipv6 link-local for instance
could cause duplicate messages to appear.

Solution : Remove check based on IPv4/Ipv6

https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/pull/668
(cherry-picked from 7d5e906bedb032f88f2dd2fca97f70a631c1346e)

Change-Id: I7fd73ad9401a30192141a048db9d88cd7bfea3b6
Signed-off-by: Kush <kush.agrawal@samsung.com>
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
resource/csdk/connectivity/api/cacommon.h [changed mode: 0755->0644]
resource/csdk/connectivity/src/camessagehandler.c

old mode 100755 (executable)
new mode 100644 (file)
index d1e53f7..f236968
@@ -547,6 +547,7 @@ typedef struct
     uint16_t messageId;
     char token[CA_MAX_TOKEN_LEN];
     uint8_t tokenLength;
+    uint32_t ifindex;
 } CAHistoryItem_t;
 
 typedef struct
index da4320d..5a92d15 100644 (file)
@@ -768,20 +768,18 @@ static bool CADropSecondMessage(CAHistory_t *history, const CAEndpoint_t *ep, ui
     {
         CAHistoryItem_t *item = &(history->items[i]);
         if (id == item->messageId && tokenLength == item->tokenLength
-            && memcmp(item->token, token, tokenLength) == 0)
+            && ep->ifindex == item->ifindex && memcmp(item->token, token, tokenLength) == 0)
         {
-            if ((familyFlags ^ item->flags) == CA_IPFAMILY_MASK)
-            {
-                OIC_LOG_V(INFO, TAG, "IPv%c duplicate message ignored",
-                          familyFlags & CA_IPV6 ? '6' : '4');
-                ret = true;
-                break;
-            }
+            OIC_LOG_V(INFO, TAG, "IPv%c duplicate message ignored",
+                      familyFlags & CA_IPV6 ? '6' : '4');
+            ret = true;
+            break;
         }
     }
 
     history->items[history->nextIndex].flags = familyFlags;
     history->items[history->nextIndex].messageId = id;
+    history->items[history->nextIndex].ifindex = ep->ifindex;
     if (token && tokenLength)
     {
         memcpy(history->items[history->nextIndex].token, token, tokenLength);