Merge branch 'windows-port'
[platform/upstream/iotivity.git] / resource / csdk / security / provisioning / src / pmutility.c
index 2d5343f..b72c28c 100644 (file)
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_WINDOWS_H
-#include <windows.h>
-#endif
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
 
 #include "ocstack.h"
 #include "oic_malloc.h"
 #include "oic_string.h"
+#include "oic_time.h"
 #include "logger.h"
 #include "cJSON.h"
 #include "utlist.h"
@@ -353,66 +345,13 @@ exit:
 OCStackResult PMTimeout(unsigned short waittime, bool waitForStackResponse)
 {
     OCStackResult res = OC_STACK_OK;
-#if defined(HAVE_GETSYSTEMTIMEASFILETIME)
-    FILETIME startTime = {0};
-    FILETIME currTime = {0};
-
-    GetSystemTimeAsFileTime(&startTime);
-#elif defined(HAVE_CLOCK_GETTIME)
-    struct timespec startTime = {.tv_sec=0, .tv_nsec=0};
-    struct timespec currTime  = {.tv_sec=0, .tv_nsec=0};
-
-# if defined(_POSIX_MONOTONIC_CLOCK)
-    int clock_res = clock_gettime(CLOCK_MONOTONIC, &startTime);
-# else
-    int clock_res = clock_gettime(CLOCK_REALTIME, &startTime);
-# endif // defined(_POSIX_MONOTONIC_CLOCK)
-    if (0 != clock_res)
-    {
-        return OC_STACK_ERROR;
-    }
-
-#else
-    ERROR Need PMTimeout implementation
-    return OC_STACK_ERROR;
-#endif
 
+    uint64_t startTime = OICGetCurrentTime(TIME_IN_MS);
     while (OC_STACK_OK == res)
     {
-#if defined(HAVE_GETSYSTEMTIMEASFILETIME)
-        GetSystemTimeAsFileTime(&currTime);
-#elif defined(HAVE_CLOCK_GETTIME)
-
-# if defined(_POSIX_MONOTONIC_CLOCK)
-        clock_res = clock_gettime(CLOCK_MONOTONIC, &currTime);
-# else
-        clock_res = clock_gettime(CLOCK_REALTIME, &currTime);
-# endif
-        if (0 != clock_res)
-        {
-            return OC_STACK_TIMEOUT;
-        }
-#else
-        ERROR Need PMTimeout implementation
-#endif
-
-#if defined(HAVE_GETSYSTEMTIMEASFILETIME)
-#define HNS_TO_S(VAL)  ((VAL)/(10*1000*1000))
-        ULARGE_INTEGER currTimeInt;
-        ULARGE_INTEGER startTimeInt;
+        uint64_t currTime = OICGetCurrentTime(TIME_IN_MS);
 
-        currTimeInt.LowPart  = currTime.dwLowDateTime;
-        currTimeInt.HighPart = currTime.dwHighDateTime;
-
-        startTimeInt.LowPart  = startTime.dwLowDateTime;
-        startTimeInt.HighPart = startTime.dwHighDateTime;
-
-        long elapsed = (long)HNS_TO_S(currTimeInt.QuadPart - startTimeInt.QuadPart);
-#elif defined(HAVE_CLOCK_GETTIME)
-        long elapsed = (currTime.tv_sec - startTime.tv_sec);
-#else
-        ERROR Need PMTimeout implementation
-#endif
+        long elapsed = (long)((currTime - startTime) / MS_PER_SEC);
         if (elapsed > waittime)
         {
             return OC_STACK_OK;
@@ -634,7 +573,7 @@ static OCStackApplicationResult SecurePortDiscoveryHandler(void *ctx, OCDoHandle
             // Use seure port of doxm for OTM and Provision.
             while (resPayload)
             {
-                if (0 == strncmp(resPayload->uri, OIC_RSRC_DOXM_URI, sizeof(OIC_RSRC_DOXM_URI)))
+                if (0 == strncmp(resPayload->uri, OIC_RSRC_DOXM_URI, strlen(OIC_RSRC_DOXM_URI)))
                 {
                     OIC_LOG_V(INFO,TAG,"resPaylod->uri:%s",resPayload->uri);
                     OIC_LOG(INFO, TAG, "Found doxm resource.");
@@ -757,6 +696,22 @@ static OCStackApplicationResult DeviceDiscoveryHandler(void *ctx, OCDoHandle UNU
                     return OC_STACK_KEEP_TRANSACTION;
                 }
 
+                res = GetDoxmDeviceID(&myId);
+                if(OC_STACK_OK != res)
+                {
+                    OIC_LOG(ERROR, TAG, "Error while getting my UUID.");
+                    DeleteDoxmBinData(ptrDoxm);
+                    return OC_STACK_KEEP_TRANSACTION;
+                }
+                //if this is owned discovery and this is PT's reply, discard it
+                if((pDInfo->isOwnedDiscovery) &&
+                        (0 == memcmp(&ptrDoxm->deviceID.id, &myId.id, sizeof(myId.id))) )
+                {
+                    OIC_LOG(DEBUG, TAG, "discarding provision tool's reply");
+                    DeleteDoxmBinData(ptrDoxm);
+                    return OC_STACK_KEEP_TRANSACTION;
+                }
+
                 res = AddDevice(ppDevicesList, clientResponse->devAddr.addr,
                         clientResponse->devAddr.port,
                         clientResponse->devAddr.adapter,