OCRemoveDeviceWithUuid doesn't change owned device
[platform/upstream/iotivity.git] / resource / csdk / security / provisioning / src / pmutility.c
index 0efb109..4c72d5f 100644 (file)
@@ -695,6 +695,13 @@ static OCStackApplicationResult SecurePortDiscoveryHandler(void *ctx, OCDoHandle
             OIC_LOG_V(DEBUG, TAG, "%s: TCP port from discovery = %d", __func__, resPayload->tcpPort);
 #endif
             DiscoveryInfo* pDInfo = (DiscoveryInfo*)ctx;
+
+            if(pDInfo->isSingleDiscovery && pDInfo->isFound)
+            {
+                OIC_LOG(INFO, TAG, "Device is already founded at Single mode.");
+                return OC_STACK_DELETE_TRANSACTION;
+            }
+
             OCProvisionDev_t *ptr = GetDevice(&pDInfo->pCandidateList,
                                                          clientResponse->devAddr.addr,
                                                          clientResponse->devAddr.port);
@@ -1052,6 +1059,7 @@ OCStackResult PMDeviceDiscovery(unsigned short waittime, bool isOwned, OCProvisi
     {
         OIC_LOG(ERROR, TAG, "OCStack resource error");
         OICFree(pDInfo);
+        pDInfo = NULL;
         return res;
     }
 
@@ -1061,6 +1069,7 @@ OCStackResult PMDeviceDiscovery(unsigned short waittime, bool isOwned, OCProvisi
     {
         OIC_LOG(ERROR, TAG, "Failed to wait response for secure discovery.");
         OICFree(pDInfo);
+        pDInfo = NULL;
         OCStackResult resCancel = OCCancel(handle, OC_HIGH_QOS, NULL, 0);
         if(OC_STACK_OK !=  resCancel)
         {
@@ -1073,10 +1082,12 @@ OCStackResult PMDeviceDiscovery(unsigned short waittime, bool isOwned, OCProvisi
     {
         OIC_LOG(ERROR, TAG, "Failed to remove registered callback");
         OICFree(pDInfo);
+        pDInfo = NULL;
         return res;
     }
     OIC_LOG(DEBUG, TAG, "OUT PMDeviceDiscovery");
     OICFree(pDInfo);
+    pDInfo = NULL;
     return res;
 }