From 0016deed0da648c68deaf607e86af01bde6f478e Mon Sep 17 00:00:00 2001 From: Oleksii Beketov Date: Mon, 11 Mar 2019 18:49:38 +0200 Subject: [PATCH] Fix HandleDoxmPostRequest() to discard duplicate user confirm request Sync with SES PR #537 https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/commit/55d327ade19bcc5bf0c61184056918a3525ee36f (cherry picked from 55d327ade19bcc5bf0c61184056918a3525ee36f) Change-Id: I6597949a83663afdc464aba05d6477cb265ac6d7 Signed-off-by: Oleksii Beketov Signed-off-by: DoHyun Pyun --- resource/csdk/security/src/doxmresource.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/resource/csdk/security/src/doxmresource.c b/resource/csdk/security/src/doxmresource.c index 116bb9a..6d35780 100644 --- a/resource/csdk/security/src/doxmresource.c +++ b/resource/csdk/security/src/doxmresource.c @@ -101,6 +101,7 @@ static oc_mutex g_mutexWait; static oc_thread g_waitConfirmThreadId; oc_cond g_condWait; static InformOxmSelectedCallback_t g_InformOxmSelectedCallback = NULL; +static bool g_isConfirmResult; static OicSecOxm_t gOicSecDoxmJustWorks = OIC_JUST_WORKS; static OicSecDoxm_t gDefaultDoxm = @@ -1128,19 +1129,26 @@ void * WaitConfirm(OCEntityHandlerRequest * ehRequest) oc_mutex_lock(g_mutexWait); oc_cond_wait(g_condWait, g_mutexWait); oc_cond_free(g_condWait); + g_condWait = NULL; + + oc_mutex_unlock(g_mutexWait); oc_mutex_free(g_mutexWait); + g_mutexWait = NULL; + g_isConfirmResult = true; GetAsyncVerifyUserResult(&confirmResult, &confirmState); if (confirmResult == true) { gConfirmState = CONFIRM_STATE_ACCEPTED; HandleDoxmPostRequest(ehRequest); + g_isConfirmResult = false; return NULL; } else { gConfirmState = CONFIRM_STATE_DENIED; HandleDoxmPostRequest(ehRequest); + g_isConfirmResult = false; return NULL; } @@ -1261,7 +1269,7 @@ static OCEntityHandlerResult HandleDoxmPostRequest(OCEntityHandlerRequest * ehRe * In case of other transport adapter, duplicate message check is not required. */ if (OC_ADAPTER_IP == ehRequest->devAddr.adapter && - previousMsgId == ehRequest->messageID) + previousMsgId == ehRequest->messageID && g_isConfirmResult == false) { isDuplicatedMsg = true; } @@ -1640,6 +1648,9 @@ static OCEntityHandlerResult HandleDoxmPostRequest(OCEntityHandlerRequest * ehRe { oc_thread_detach(g_waitConfirmThreadId); } + + previousMsgId = ehRequest->messageID; + return OC_EH_SLOW; } } -- 2.7.4