Fix HandleDoxmPostRequest() to discard duplicate user confirm request 21/201721/1
authorOleksii Beketov <ol.beketov@samsung.com>
Mon, 11 Mar 2019 16:49:38 +0000 (18:49 +0200)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 19 Mar 2019 05:03:25 +0000 (14:03 +0900)
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 <ol.beketov@samsung.com>
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
resource/csdk/security/src/doxmresource.c

index 116bb9a..6d35780 100644 (file)
@@ -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;
                             }
                         }