summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKush <kush.agrawal@samsung.com>2020-03-04 21:02:39 +0530
committerDoHyun Pyun <dh79.pyun@samsung.com>2020-04-01 10:32:34 +0900
commitd386e3797794d970b5e96c25fc00780c80b2a6fe (patch)
treefcaa3f7a7a83788b230cf4947df9f64324317b03
parent5d8046c67a4e3090d89440143560b121c948e8c5 (diff)
downloadiotivity-d386e3797794d970b5e96c25fc00780c80b2a6fe.tar.gz
iotivity-d386e3797794d970b5e96c25fc00780c80b2a6fe.tar.bz2
iotivity-d386e3797794d970b5e96c25fc00780c80b2a6fe.zip
[CONPRO-1568] Ignoring duplicate IPv6/Ipv4 messages
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>
-rw-r--r--[-rwxr-xr-x]resource/csdk/connectivity/api/cacommon.h1
-rw-r--r--resource/csdk/connectivity/src/camessagehandler.c14
2 files changed, 7 insertions, 8 deletions
diff --git a/resource/csdk/connectivity/api/cacommon.h b/resource/csdk/connectivity/api/cacommon.h
index d1e53f75f..f23696800 100755..100644
--- a/resource/csdk/connectivity/api/cacommon.h
+++ b/resource/csdk/connectivity/api/cacommon.h
@@ -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
diff --git a/resource/csdk/connectivity/src/camessagehandler.c b/resource/csdk/connectivity/src/camessagehandler.c
index da4320d30..5a92d153f 100644
--- a/resource/csdk/connectivity/src/camessagehandler.c
+++ b/resource/csdk/connectivity/src/camessagehandler.c
@@ -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);