CONPRO-1467: Improve Reset
[platform/upstream/iotivity.git] / resource / csdk / security / src / doxmresource.c
index 116bb9a..d8b4506 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,20 +1129,25 @@ 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);
-        return NULL;
+        g_isConfirmResult = false;
     }
     else
     {
         gConfirmState = CONFIRM_STATE_DENIED;
         HandleDoxmPostRequest(ehRequest);
-        return NULL;
+        g_isConfirmResult = false;
     }
 
     DestroyEntityHandlerRequest(ehRequest);
@@ -1221,14 +1227,8 @@ static OCEntityHandlerRequest *CopyRequest(OCEntityHandlerRequest *entityHandler
     copyOfRequest->numRcvdVendorSpecificHeaderOptions = 0;
     copyOfRequest->rcvdVendorSpecificHeaderOptions = NULL;
 
-    if (copyOfRequest)
-    {
-        OIC_LOG(INFO, TAG, "Copied client request");
-    }
-    else
-    {
-        OIC_LOG(ERROR, TAG, "Error copying client request");
-    }
+    OIC_LOG(INFO, TAG, "Copied client request");
+
     return copyOfRequest;
 }
 #endif // defined(__WITH_DTLS__) || defined (__WITH_TLS__)
@@ -1261,7 +1261,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;
             }
@@ -1302,6 +1302,13 @@ static OCEntityHandlerResult HandleDoxmPostRequest(OCEntityHandlerRequest * ehRe
                     ehRet = OC_EH_NOT_ACCEPTABLE;
                     goto exit;
                 }
+
+                if(0 != memcmp(&gDoxm->owner.id, &newDoxm->owner.id, sizeof(gDoxm->owner.id)))
+                {
+                    OIC_LOG(ERROR, TAG, "Not acceptable request for owned property");
+                    ehRet = OC_EH_NOT_ACCEPTABLE;
+                }
+
                 //Update gDoxm based on newDoxm
                 updateWriteableProperty(newDoxm, gDoxm);
 
@@ -1640,6 +1647,9 @@ static OCEntityHandlerResult HandleDoxmPostRequest(OCEntityHandlerRequest * ehRe
                                 {
                                     oc_thread_detach(g_waitConfirmThreadId);
                                 }
+
+                                previousMsgId = ehRequest->messageID;
+
                                 return OC_EH_SLOW;
                             }
                         }
@@ -1768,8 +1778,7 @@ exit:
                     InvokeOtmEventHandler(ehRequest->devAddr.addr, ehRequest->devAddr.port,
                                           NULL, OIC_OTM_ERROR);
 #endif
-                    RestoreDoxmToInitState();
-                    RestorePstatToInitState();
+                    ResetSecureResourceInPS();
                     OIC_LOG(WARNING, TAG, "DOXM will be reverted.");
                 }
             }