#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"
OCStackResult PMTimeout(unsigned short waittime, bool waitForStackResponse)
{
OCStackResult res = OC_STACK_OK;
-#if defined(HAVE_GETSYSTEMTIMEASFILETIME)
- FILETIME startTime = {0};
- FILETIME currTime = {0};
- int clock_res = 1;
-
- 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)
-
-#else
- ERROR Need PMTimeout implementation
- return OC_STACK_ERROR;
-#endif
- if (0 != clock_res)
- {
- return OC_STACK_ERROR;
- }
+ 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;
-
- currTimeInt.LowPart = currTime.dwLowDateTime;
- currTimeInt.HighPart = currTime.dwHighDateTime;
+ uint64_t currTime = OICGetCurrentTime(TIME_IN_MS);
- 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;
uint16_t securePort = 0;
OCResourcePayload* resPayload = ((OCDiscoveryPayload*)clientResponse->payload)->resources;
+ // Use seure port of doxm for OTM and Provision.
+ while (resPayload)
+ {
+ 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.");
+ break;
+ }
+ else
+ {
+ resPayload = resPayload->next;
+ }
+ }
+ if (NULL == resPayload)
+ {
+ OIC_LOG(ERROR, TAG, "Can not find doxm resource.");
+ return OC_STACK_DELETE_TRANSACTION;
+ }
if (resPayload && resPayload->secure)
{
securePort = resPayload->port;
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,
{
return OC_STACK_INVALID_PARAM;
}
-
- char rsrc_uri[MAX_URI_LENGTH+1] = {0};
- int wr_len = snprintf(rsrc_uri, sizeof(rsrc_uri), "%s?%s=%s",
- OC_RSRVD_WELL_KNOWN_URI, OC_RSRVD_RESOURCE_TYPE, OIC_RSRC_TYPE_SEC_DOXM);
- if(wr_len <= 0 || (size_t)wr_len >= sizeof(rsrc_uri))
- {
- OIC_LOG(ERROR, TAG, "rsrc_uri_string_print failed");
- return OC_STACK_ERROR;
- }
//Try to the unicast discovery to getting secure port
char query[MAX_URI_LENGTH+MAX_QUERY_LENGTH+1] = {0};
if(!PMGenerateQuery(false,
clientResponse->devAddr.addr, clientResponse->devAddr.port,
clientResponse->connType,
- query, sizeof(query), rsrc_uri))
+ query, sizeof(query), OC_RSRVD_WELL_KNOWN_URI))
{
OIC_LOG(ERROR, TAG, "SecurePortDiscovery : Failed to generate query");
return OC_STACK_ERROR;