#include "ocresource.h"
#include "logger.h"
+#if defined(__WITH_TLS__) || defined(__WITH_DTLS__)
+#include "securevirtualresourcetypes.h"
+#endif
+
#define TAG "OIC_RI_PAYLOAD"
#define CSV_SEPARATOR ','
case PAYLOAD_TYPE_DISCOVERY:
OCDiscoveryPayloadDestroy((OCDiscoveryPayload*)payload);
break;
- case PAYLOAD_TYPE_DEVICE:
- OCDevicePayloadDestroy((OCDevicePayload*)payload);
- break;
- case PAYLOAD_TYPE_PLATFORM:
- OCPlatformPayloadDestroy((OCPlatformPayload*)payload);
- break;
+#ifdef WITH_PRESENCE
case PAYLOAD_TYPE_PRESENCE:
OCPresencePayloadDestroy((OCPresencePayload*)payload);
break;
+#endif
case PAYLOAD_TYPE_SECURITY:
OCSecurityPayloadDestroy((OCSecurityPayload*)payload);
break;
break;
}
}
+
OCRepPayload* OCRepPayloadCreate()
{
OCRepPayload* payload = (OCRepPayload*)OICCalloc(1, sizeof(OCRepPayload));
if (val->type == OCREP_PROP_STRING)
{
- OICFree(val->str);
+ if (val->str != NULL)
+ {
+ OICFree(val->str);
+ }
}
else if (val->type == OCREP_PROP_BYTE_STRING)
{
OICFree(val->arr.iArray);
break;
case OCREP_PROP_STRING:
- for(size_t i = 0; i < dimTotal; ++i)
+ if (val->arr.strArray != NULL)
{
- OICFree(val->arr.strArray[i]);
+ for(size_t i = 0; i < dimTotal; ++i)
+ {
+ OICFree(val->arr.strArray[i]);
+ }
+ OICFree(val->arr.strArray);
}
- OICFree(val->arr.strArray);
break;
case OCREP_PROP_BYTE_STRING:
- for (size_t i = 0; i < dimTotal; ++i)
+ if (val->arr.ocByteStrArray != NULL)
{
- if (val->arr.ocByteStrArray[i].bytes)
+ for (size_t i = 0; i < dimTotal; ++i)
{
- OICFree(val->arr.ocByteStrArray[i].bytes);
+ if (val->arr.ocByteStrArray[i].bytes)
+ {
+ OICFree(val->arr.ocByteStrArray[i].bytes);
+ }
}
+ OICFree(val->arr.ocByteStrArray);
}
- OICFree(val->arr.ocByteStrArray);
break;
case OCREP_PROP_OBJECT: // This case is the temporary fix for string input
- for(size_t i = 0; i< dimTotal; ++i)
+ if (val->arr.objArray != NULL)
{
- OCRepPayloadDestroy(val->arr.objArray[i]);
+ for(size_t i = 0; i< dimTotal; ++i)
+ {
+ OCRepPayloadDestroy(val->arr.objArray[i]);
+ }
+ OICFree(val->arr.objArray);
}
- OICFree(val->arr.objArray);
break;
case OCREP_PROP_NULL:
case OCREP_PROP_ARRAY:
else
{
value->data = val.bytes;
- value->len = strlen(val.bytes);
+ value->len = strlen((char *)val.bytes);
}
}
else
{
break;
}
- iter = (OCStringLL *)OICCalloc(1,sizeof(OCStringLL));
+ iter = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL));
VERIFY_PARAM_NON_NULL(TAG, iter, "Failed allocating memory");
if (!result)
{
iter->value = OICStrdup(token);
VERIFY_PARAM_NON_NULL(TAG, iter->value, "Failed allocating memory");
prev = iter;
- iter = iter->next;
}
OICFree(backup);
return result;
len += strlen(it->value) + 1;
}
len--; // remove trailing separator (just added above)
- str = (char*) malloc(len + 1);
+ str = (char*) OICMalloc(len + 1);
if (!str)
{
return NULL;
count = snprintf(pos, len + 1, "%s", it->value);
if ((size_t)count < sublen)
{
- free(str);
+ OICFree(str);
return NULL;
}
len -= sublen;
return clone;
}
+OCRepPayload* OCRepPayloadBatchClone(const OCRepPayload* repPayload)
+{
+ OCRepPayload *newPayload = OCRepPayloadCreate();
+ if (!newPayload)
+ {
+ return NULL;
+ }
+
+ newPayload->uri = OICStrdup(repPayload->uri);
+ OCRepPayload *clone = OCRepPayloadCreate();
+ if (!clone)
+ {
+ OCPayloadDestroy((OCPayload *)newPayload);
+ return NULL;
+ }
+
+ clone->types = CloneOCStringLL(repPayload->types);
+ clone->interfaces = CloneOCStringLL(repPayload->interfaces);
+ clone->values = OCRepPayloadValueClone(repPayload->values);
+ OCRepPayloadSetPropObjectAsOwner(newPayload, OC_RSRVD_REPRESENTATION, clone);
+
+ return newPayload;
+}
void OCRepPayloadDestroy(OCRepPayload* payload)
{
return;
}
+ OICClearMemory(payload->securityData, payload->payloadSize);
OICFree(payload->securityData);
OICFree(payload);
}
return NULL;
}
-#ifndef TCP_ADAPTER
+#if !defined(TCP_ADAPTER) || defined(DISABLE_TCP_SERVER)
static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t securePort)
#else
static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t securePort,
);
pl->secure = (res->resourceProperties & OC_SECURE) != 0;
pl->port = securePort;
-#ifdef TCP_ADAPTER
+#if defined(TCP_ADAPTER) && !defined(DISABLE_TCP_SERVER)
pl->tcpPort = tcpPort;
#endif
return pl;
}
-#ifndef TCP_ADAPTER
+#if !defined(TCP_ADAPTER) || defined(DISABLE_TCP_SERVER)
void OCDiscoveryPayloadAddResource(OCDiscoveryPayload* payload, const OCResource* res,
uint16_t securePort)
{
bool OCResourcePayloadAddStringLL(OCStringLL **stringLL, const char *value)
{
- char *dup = OICStrdup(value);
- VERIFY_PARAM_NON_NULL(TAG, dup, "Failed copying string");
+ char *dup = NULL;
VERIFY_PARAM_NON_NULL(TAG, value, "Invalid Parameters");
+ dup = OICStrdup(value);
+ VERIFY_PARAM_NON_NULL(TAG, dup, "Failed copying string");
if (!*stringLL)
{
}
OICFree(payload->sid);
OICFree(payload->baseURI);
- OICFree(payload->uri);
OCFreeOCStringLL(payload->type);
OICFree(payload->name);
OCFreeOCStringLL(payload->iface);
OICFree(payload);
}
-OCDevicePayload* OCDevicePayloadCreate(const char* sid, const char* dname,
- const OCStringLL *types, const char* specVer, const char* dmVer)
-{
-
- OCDevicePayload* payload = (OCDevicePayload*)OICCalloc(1, sizeof(OCDevicePayload));
-
- if (!payload)
- {
- return NULL;
- }
-
- payload->base.type = PAYLOAD_TYPE_DEVICE;
- payload->sid = OICStrdup(sid);
- if (sid && !payload->sid)
- {
- goto exit;
- }
-
- payload->deviceName = OICStrdup(dname);
- if (dname && !payload->deviceName)
- {
- goto exit;
- }
-
- payload->specVersion = OICStrdup(specVer);
- if (specVer && !payload->specVersion)
- {
- goto exit;
- }
-
- payload->dataModelVersions = OCCreateOCStringLL(dmVer);
- if (!payload->dataModelVersions || (dmVer && !payload->dataModelVersions->value))
- {
- goto exit;
- }
-
- OCResourcePayloadAddStringLL(&payload->interfaces, OC_RSRVD_INTERFACE_DEFAULT);
- OCResourcePayloadAddStringLL(&payload->interfaces, OC_RSRVD_INTERFACE_READ);
-
- payload->types = CloneOCStringLL((OCStringLL *)types);
- if (types && !payload->types)
- {
- goto exit;
- }
-
- return payload;
-
-exit:
- OCDevicePayloadDestroy((OCDevicePayload*)payload);
- return NULL;
-}
-
-void OCDevicePayloadDestroy(OCDevicePayload* payload)
-{
- if (!payload)
- {
- return;
- }
-
- OICFree(payload->sid);
- OICFree(payload->deviceName);
- OICFree(payload->specVersion);
- OCFreeOCStringLL(payload->dataModelVersions);
- OCFreeOCStringLL(payload->types);
- OCFreeOCStringLL(payload->interfaces);
- OICFree(payload);
-}
-
-static void OCCopyPlatformInfo(const OCPlatformInfo* platformInfo, OCPlatformPayload* target)
-{
- if (!platformInfo || !target)
- {
- return;
- }
-
- target->info.platformID = OICStrdup(platformInfo->platformID);
- target->info.manufacturerName = OICStrdup(platformInfo->manufacturerName);
- target->info.manufacturerUrl = OICStrdup(platformInfo->manufacturerUrl);
- target->info.modelNumber = OICStrdup(platformInfo->modelNumber);
- target->info.dateOfManufacture = OICStrdup(platformInfo->dateOfManufacture);
- target->info.platformVersion = OICStrdup(platformInfo->platformVersion);
- target->info.operatingSystemVersion = OICStrdup(platformInfo->operatingSystemVersion);
- target->info.hardwareVersion = OICStrdup(platformInfo->hardwareVersion);
- target->info.firmwareVersion = OICStrdup(platformInfo->firmwareVersion);
- target->info.supportUrl = OICStrdup(platformInfo->supportUrl);
- target->info.systemTime = OICStrdup(platformInfo->systemTime);
-}
-
-OCPlatformPayload* OCPlatformPayloadCreateAsOwner(OCPlatformInfo* platformInfo)
-{
- OCPlatformPayload* payload = (OCPlatformPayload*)OICCalloc(1, sizeof(OCPlatformPayload));
- if (!payload)
- {
- return NULL;
- }
-
- payload->base.type = PAYLOAD_TYPE_PLATFORM;
-
- payload->interfaces = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL));
- if (!payload->interfaces)
- {
- return NULL;
- }
- payload->interfaces->value = OICStrdup(OC_RSRVD_INTERFACE_READ);
- payload->rt = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL));
- if (!payload->rt)
- {
- return NULL;
- }
- payload->rt->value = OICStrdup(OC_RSRVD_RESOURCE_TYPE_PLATFORM);
- payload->info = *platformInfo;
-
- return payload;
-}
-
-OCPlatformPayload* OCPlatformPayloadCreate(const OCPlatformInfo* platformInfo)
-{
- OCPlatformPayload* payload = (OCPlatformPayload*)OICCalloc(1, sizeof(OCPlatformPayload));
-
- if (!payload)
- {
- return NULL;
- }
-
- payload->base.type = PAYLOAD_TYPE_PLATFORM;
- OCResourcePayloadAddStringLL(&payload->rt, OC_RSRVD_RESOURCE_TYPE_PLATFORM);
-
- OCResourcePayloadAddStringLL(&payload->interfaces, OC_RSRVD_INTERFACE_DEFAULT);
- OCResourcePayloadAddStringLL(&payload->interfaces, OC_RSRVD_INTERFACE_READ);
-
- OCCopyPlatformInfo(platformInfo, payload);
-
- return payload;
-}
-
-void OCPlatformInfoDestroy(OCPlatformInfo *info)
-{
- OICFree(info->platformID);
- OICFree(info->manufacturerName);
- OICFree(info->manufacturerUrl);
- OICFree(info->modelNumber);
- OICFree(info->dateOfManufacture);
- OICFree(info->platformVersion);
- OICFree(info->operatingSystemVersion);
- OICFree(info->hardwareVersion);
- OICFree(info->firmwareVersion);
- OICFree(info->supportUrl);
- OICFree(info->systemTime);
-}
-
-void OCPlatformPayloadDestroy(OCPlatformPayload* payload)
-{
- if (!payload)
- {
- return;
- }
- OICFree(payload->uri);
- OCPlatformInfoDestroy(&payload->info);
- OCFreeOCStringLL(payload->rt);
- OCFreeOCStringLL(payload->interfaces);
- OICFree(payload);
-}
-
+#ifdef WITH_PRESENCE
OCPresencePayload* OCPresencePayloadCreate(uint32_t seqNum, uint32_t maxAge,
OCPresenceTrigger trigger, const char* resourceType)
{
OICFree(payload->resourceType);
OICFree(payload);
}
+#endif // WITH_PRESENCE
\ No newline at end of file