X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Fsrc%2Focpayload.c;h=2ad55b223c3b76c3109237ff10eeceebe64edd06;hb=442026128ead8780fa45d0db8a6f17be7c9220e0;hp=43694bb43eb21fb157919cb2f8667d0d9902d3ed;hpb=d0baf5ae6936a16de6a49588428204d8c386ac9e;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/src/ocpayload.c b/resource/csdk/stack/src/ocpayload.c old mode 100755 new mode 100644 index 43694bb..2ad55b2 --- a/resource/csdk/stack/src/ocpayload.c +++ b/resource/csdk/stack/src/ocpayload.c @@ -29,13 +29,13 @@ #include "logger.h" #include "rdpayload.h" -#define TAG "OCPayload" +#define TAG "OIC_RI_PAYLOAD" + static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val); -static void FreeOCDiscoveryResource(OCResourcePayload* payload); void OCPayloadDestroy(OCPayload* payload) { - if(!payload) + if (!payload) { return; } @@ -64,7 +64,7 @@ void OCPayloadDestroy(OCPayload* payload) OCRDPayloadDestroy((OCRDPayload*)payload); break; default: - OC_LOG_V(ERROR, TAG, "Unsupported payload type in destroy: %d", payload->type); + OIC_LOG_V(ERROR, TAG, "Unsupported payload type in destroy: %d", payload->type); OICFree(payload); break; } @@ -73,7 +73,7 @@ OCRepPayload* OCRepPayloadCreate() { OCRepPayload* payload = (OCRepPayload*)OICCalloc(1, sizeof(OCRepPayload)); - if(!payload) + if (!payload) { return NULL; } @@ -85,7 +85,7 @@ OCRepPayload* OCRepPayloadCreate() void OCRepPayloadAppend(OCRepPayload* parent, OCRepPayload* child) { - if(!parent) + if (!parent) { return; } @@ -101,7 +101,7 @@ void OCRepPayloadAppend(OCRepPayload* parent, OCRepPayload* child) static OCRepPayloadValue* OCRepPayloadFindValue(const OCRepPayload* payload, const char* name) { - if(!payload || !name) + if (!payload || !name) { return NULL; } @@ -109,7 +109,7 @@ static OCRepPayloadValue* OCRepPayloadFindValue(const OCRepPayload* payload, con OCRepPayloadValue* val = payload->values; while(val) { - if(0 == strcmp(val->name, name)) + if (0 == strcmp(val->name, name)) { return val; } @@ -117,12 +117,11 @@ static OCRepPayloadValue* OCRepPayloadFindValue(const OCRepPayload* payload, con } return NULL; - } static void OCCopyPropertyValueArray(OCRepPayloadValue* dest, OCRepPayloadValue* source) { - if(!dest || !source) + if (!dest || !source) { return; } @@ -132,34 +131,49 @@ static void OCCopyPropertyValueArray(OCRepPayloadValue* dest, OCRepPayloadValue* { case OCREP_PROP_INT: dest->arr.iArray = (int64_t*)OICMalloc(dimTotal * sizeof(int64_t)); + VERIFY_PARAM_NON_NULL(TAG, dest->arr.iArray, "Failed allocating memory"); memcpy(dest->arr.iArray, source->arr.iArray, dimTotal * sizeof(int64_t)); break; case OCREP_PROP_DOUBLE: dest->arr.dArray = (double*)OICMalloc(dimTotal * sizeof(double)); + VERIFY_PARAM_NON_NULL(TAG, dest->arr.dArray, "Failed allocating memory"); memcpy(dest->arr.dArray, source->arr.dArray, dimTotal * sizeof(double)); break; case OCREP_PROP_BOOL: dest->arr.bArray = (bool*)OICMalloc(dimTotal * sizeof(bool)); + VERIFY_PARAM_NON_NULL(TAG, dest->arr.bArray, "Failed allocating memory"); memcpy(dest->arr.bArray, source->arr.bArray, dimTotal * sizeof(bool)); break; case OCREP_PROP_STRING: dest->arr.strArray = (char**)OICMalloc(dimTotal * sizeof(char*)); + VERIFY_PARAM_NON_NULL(TAG, dest->arr.strArray, "Failed allocating memory"); for(size_t i = 0; i < dimTotal; ++i) { dest->arr.strArray[i] = OICStrdup(source->arr.strArray[i]); } break; + case OCREP_PROP_OBJECT: + dest->arr.objArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*)); + VERIFY_PARAM_NON_NULL(TAG, dest->arr.objArray, "Failed allocating memory"); + for(size_t i = 0; i < dimTotal; ++i) + { + dest->arr.objArray[i] = OCRepPayloadClone(source->arr.objArray[i]); + } + break; case OCREP_PROP_ARRAY: dest->arr.objArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*)); + VERIFY_PARAM_NON_NULL(TAG, dest->arr.objArray, "Failed allocating memory"); for(size_t i = 0; i < dimTotal; ++i) { dest->arr.objArray[i] = OCRepPayloadClone(source->arr.objArray[i]); } break; default: - OC_LOG(ERROR, TAG, "CopyPropertyValueArray invalid type"); + OIC_LOG(ERROR, TAG, "CopyPropertyValueArray invalid type"); break; } +exit: + return; } static void OCCopyPropertyValue (OCRepPayloadValue *dest, OCRepPayloadValue *source) @@ -188,16 +202,16 @@ static void OCCopyPropertyValue (OCRepPayloadValue *dest, OCRepPayloadValue *sou static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val) { - if(!val) + if (!val) { return; } - if(val->type == OCREP_PROP_STRING) + if (val->type == OCREP_PROP_STRING) { OICFree(val->str); } - else if(val->type == OCREP_PROP_BYTE_STRING) + else if (val->type == OCREP_PROP_BYTE_STRING) { OICFree(val->ocByteStr.bytes); } @@ -218,7 +232,7 @@ static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val) OICFree(val->arr.iArray); break; case OCREP_PROP_STRING: - for(size_t i = 0; i< dimTotal;++i) + for(size_t i = 0; i< dimTotal; ++i) { OICFree(val->arr.strArray[i]); } @@ -231,8 +245,8 @@ static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val) } OICFree(val->arr.ocByteStrArray); break; - case OCREP_PROP_OBJECT: - for(size_t i = 0; i< dimTotal;++i) + case OCREP_PROP_OBJECT: // This case is the temporary fix for string input + for(size_t i = 0; i< dimTotal; ++i) { OCRepPayloadDestroy(val->arr.objArray[i]); } @@ -240,7 +254,7 @@ static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val) break; case OCREP_PROP_NULL: case OCREP_PROP_ARRAY: - OC_LOG_V(ERROR, TAG, "FreeRepPayloadValueContents: Illegal type\ + OIC_LOG_V(ERROR, TAG, "FreeRepPayloadValueContents: Illegal type\ inside an array: %d", val->arr.type); break; } @@ -249,7 +263,7 @@ static void OCFreeRepPayloadValueContents(OCRepPayloadValue* val) static void OCFreeRepPayloadValue(OCRepPayloadValue* val) { - if(!val) + if (!val) { return; } @@ -304,21 +318,21 @@ static OCRepPayloadValue* OCRepPayloadValueClone (OCRepPayloadValue* source) static OCRepPayloadValue* OCRepPayloadFindAndSetValue(OCRepPayload* payload, const char* name, OCRepPayloadPropType type) { - if(!payload || !name) + if (!payload || !name) { return NULL; } OCRepPayloadValue* val = payload->values; - if(val == NULL) + if (val == NULL) { payload->values = (OCRepPayloadValue*)OICCalloc(1, sizeof(OCRepPayloadValue)); - if(!payload->values) + if (!payload->values) { return NULL; } payload->values->name = OICStrdup(name); - if(!payload->values->name) + if (!payload->values->name) { OICFree(payload->values); payload->values = NULL; @@ -330,21 +344,21 @@ static OCRepPayloadValue* OCRepPayloadFindAndSetValue(OCRepPayload* payload, con while(val) { - if(0 == strcmp(val->name, name)) + if (0 == strcmp(val->name, name)) { OCFreeRepPayloadValueContents(val); val->type = type; return val; } - else if(val->next == NULL) + else if (val->next == NULL) { val->next = (OCRepPayloadValue*)OICCalloc(1, sizeof(OCRepPayloadValue)); - if(!val->next) + if (!val->next) { return NULL; } val->next->name = OICStrdup(name); - if(!val->next->name) + if (!val->next->name) { OICFree(val->next); val->next = NULL; @@ -357,7 +371,7 @@ static OCRepPayloadValue* OCRepPayloadFindAndSetValue(OCRepPayload* payload, con val = val->next; } - OC_LOG(ERROR, TAG, "FindAndSetValue reached point after while loop, pointer corruption?"); + OIC_LOG(ERROR, TAG, "FindAndSetValue reached point after while loop, pointer corruption?"); return NULL; } @@ -368,12 +382,12 @@ bool OCRepPayloadAddResourceType(OCRepPayload* payload, const char* resourceType bool OCRepPayloadAddResourceTypeAsOwner(OCRepPayload* payload, char* resourceType) { - if(!payload || !resourceType) + if (!payload || !resourceType) { return false; } - if(payload->types) + if (payload->types) { OCStringLL* cur = payload->types; while(cur->next) @@ -382,7 +396,7 @@ bool OCRepPayloadAddResourceTypeAsOwner(OCRepPayload* payload, char* resourceTyp } cur->next = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!cur->next) + if (!cur->next) { return false; } @@ -393,7 +407,7 @@ bool OCRepPayloadAddResourceTypeAsOwner(OCRepPayload* payload, char* resourceTyp else { payload->types = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!payload->types) + if (!payload->types) { return false; } @@ -409,12 +423,12 @@ bool OCRepPayloadAddInterface(OCRepPayload* payload, const char* interface) bool OCRepPayloadAddInterfaceAsOwner(OCRepPayload* payload, char* interface) { - if(!payload || !interface) + if (!payload || !interface) { return false; } - if(payload->interfaces) + if (payload->interfaces) { OCStringLL* cur = payload->interfaces; while(cur->next) @@ -423,7 +437,7 @@ bool OCRepPayloadAddInterfaceAsOwner(OCRepPayload* payload, char* interface) } cur->next = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!cur->next) + if (!cur->next) { return false; } @@ -433,7 +447,7 @@ bool OCRepPayloadAddInterfaceAsOwner(OCRepPayload* payload, char* interface) else { payload->interfaces = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!payload->interfaces) + if (!payload->interfaces) { return false; } @@ -444,11 +458,11 @@ bool OCRepPayloadAddInterfaceAsOwner(OCRepPayload* payload, char* interface) bool OCRepPayloadSetUri(OCRepPayload* payload, const char* uri) { - if(!payload) + if (!payload) { return false; } - + OICFree(payload->uri); payload->uri = OICStrdup(uri); return payload->uri != NULL; } @@ -457,7 +471,7 @@ bool OCRepPayloadIsNull(const OCRepPayload* payload, const char* name) { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val) + if (!val) { return false; } @@ -469,7 +483,7 @@ static bool OCRepPayloadSetProp(OCRepPayload* payload, const char* name, void* value, OCRepPayloadPropType type) { OCRepPayloadValue* val = OCRepPayloadFindAndSetValue(payload, name, type); - if(!val) + if (!val) { return false; } @@ -518,7 +532,7 @@ bool OCRepPayloadGetPropInt(const OCRepPayload* payload, const char* name, int64 { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_INT) + if (!val || val->type != OCREP_PROP_INT) { return false; } @@ -528,7 +542,7 @@ bool OCRepPayloadGetPropInt(const OCRepPayload* payload, const char* name, int64 } bool OCRepPayloadSetPropDouble(OCRepPayload* payload, - const char* name, double value) + const char* name, double value) { return OCRepPayloadSetProp(payload, name, &value, OCREP_PROP_DOUBLE); } @@ -537,13 +551,21 @@ bool OCRepPayloadGetPropDouble(const OCRepPayload* payload, const char* name, do { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_DOUBLE) + if (val) { - return false; + if (val->type == OCREP_PROP_DOUBLE) + { + *value = val->d; + return true; + } + else if (val->type == OCREP_PROP_INT) + { + *value = val->i; + return true; + } } - *value = val->d; - return true; + return false; } bool OCRepPayloadSetPropString(OCRepPayload* payload, const char* name, const char* value) @@ -551,7 +573,7 @@ bool OCRepPayloadSetPropString(OCRepPayload* payload, const char* name, const ch char* temp = OICStrdup(value); bool b = OCRepPayloadSetPropStringAsOwner(payload, name, temp); - if(!b) + if (!b) { OICFree(temp); } @@ -567,7 +589,7 @@ bool OCRepPayloadGetPropString(const OCRepPayload* payload, const char* name, ch { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_STRING) + if (!val || val->type != OCREP_PROP_STRING) { return false; } @@ -587,7 +609,7 @@ bool OCRepPayloadSetPropByteString(OCRepPayload* payload, const char* name, OCBy .bytes = (uint8_t*)OICMalloc(value.len * sizeof(uint8_t)), .len = value.len }; - if(!ocByteStr.bytes) + if (!ocByteStr.bytes) { return false; } @@ -595,7 +617,7 @@ bool OCRepPayloadSetPropByteString(OCRepPayload* payload, const char* name, OCBy bool b = OCRepPayloadSetPropByteStringAsOwner(payload, name, &ocByteStr); - if(!b) + if (!b) { OICFree(ocByteStr.bytes); } @@ -633,7 +655,7 @@ bool OCRepPayloadGetPropByteString(const OCRepPayload* payload, const char* name } bool OCRepPayloadSetPropBool(OCRepPayload* payload, - const char* name, bool value) + const char* name, bool value) { return OCRepPayloadSetProp(payload, name, &value, OCREP_PROP_BOOL); } @@ -642,7 +664,7 @@ bool OCRepPayloadGetPropBool(const OCRepPayload* payload, const char* name, bool { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_BOOL) + if (!val || val->type != OCREP_PROP_BOOL) { return false; } @@ -656,7 +678,7 @@ bool OCRepPayloadSetPropObject(OCRepPayload* payload, const char* name, const OC OCRepPayload* temp = OCRepPayloadClone(value); bool b = OCRepPayloadSetPropObjectAsOwner(payload, name, temp); - if(!b) + if (!b) { OCRepPayloadDestroy(temp); } @@ -672,7 +694,7 @@ bool OCRepPayloadGetPropObject(const OCRepPayload* payload, const char* name, OC { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_OBJECT) + if (!val || val->type != OCREP_PROP_OBJECT) { return false; } @@ -683,7 +705,7 @@ bool OCRepPayloadGetPropObject(const OCRepPayload* payload, const char* name, OC size_t calcDimTotal(const size_t dimensions[MAX_REP_ARRAY_DEPTH]) { - if(dimensions[0] == 0) + if (dimensions[0] == 0) { return 0; } @@ -818,7 +840,7 @@ bool OCRepPayloadSetIntArrayAsOwner(OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindAndSetValue(payload, name, OCREP_PROP_ARRAY); - if(!val) + if (!val) { return false; } @@ -834,14 +856,14 @@ bool OCRepPayloadSetIntArray(OCRepPayload* payload, const char* name, const int64_t* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]) { size_t dimTotal = calcDimTotal(dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } int64_t* newArray = (int64_t*)OICMalloc(dimTotal * sizeof(int64_t)); - if(!newArray) + if (!newArray) { return false; } @@ -850,7 +872,7 @@ bool OCRepPayloadSetIntArray(OCRepPayload* payload, const char* name, bool b = OCRepPayloadSetIntArrayAsOwner(payload, name, newArray, dimensions); - if(!b) + if (!b) { OICFree(newArray); } @@ -862,19 +884,19 @@ bool OCRepPayloadGetIntArray(const OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_INT + if (!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_INT || !val->arr.iArray) { return false; } size_t dimTotal = calcDimTotal(val->arr.dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } *array = (int64_t*)OICMalloc(dimTotal * sizeof(int64_t)); - if(!*array) + if (!*array) { return false; } @@ -889,7 +911,7 @@ bool OCRepPayloadSetDoubleArrayAsOwner(OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindAndSetValue(payload, name, OCREP_PROP_ARRAY); - if(!val) + if (!val) { return false; } @@ -904,14 +926,14 @@ bool OCRepPayloadSetDoubleArray(OCRepPayload* payload, const char* name, const double* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]) { size_t dimTotal = calcDimTotal(dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } double* newArray = (double*)OICMalloc(dimTotal * sizeof(double)); - if(!newArray) + if (!newArray) { return false; } @@ -919,7 +941,7 @@ bool OCRepPayloadSetDoubleArray(OCRepPayload* payload, const char* name, memcpy(newArray, array, dimTotal * sizeof(double)); bool b = OCRepPayloadSetDoubleArrayAsOwner(payload, name, newArray, dimensions); - if(!b) + if (!b) { OICFree(newArray); } @@ -931,24 +953,37 @@ bool OCRepPayloadGetDoubleArray(const OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_DOUBLE + if (!val || val->type != OCREP_PROP_ARRAY || + (val->arr.type != OCREP_PROP_DOUBLE && val->arr.type != OCREP_PROP_INT) || !val->arr.dArray) { return false; } size_t dimTotal = calcDimTotal(val->arr.dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } *array = (double*)OICMalloc(dimTotal * sizeof(double)); - if(!*array) + if (!*array) { return false; } - memcpy(*array, val->arr.dArray, dimTotal * sizeof(double)); + if (val->arr.type != OCREP_PROP_DOUBLE) + { + memcpy(*array, val->arr.dArray, dimTotal * sizeof(double)); + } + else + { + /* need to convert from integer */ + size_t n = 0; + for ( ; n < dimTotal; ++n) + { + (*array)[n] = val->arr.iArray[n]; + } + } memcpy(dimensions, val->arr.dimensions, MAX_REP_ARRAY_DEPTH * sizeof(size_t)); return true; } @@ -958,7 +993,7 @@ bool OCRepPayloadSetStringArrayAsOwner(OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindAndSetValue(payload, name, OCREP_PROP_ARRAY); - if(!val) + if (!val) { return false; } @@ -973,14 +1008,14 @@ bool OCRepPayloadSetStringArray(OCRepPayload* payload, const char* name, const char** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]) { size_t dimTotal = calcDimTotal(dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } char** newArray = (char**)OICMalloc(dimTotal * sizeof(char*)); - if(!newArray) + if (!newArray) { return false; } @@ -992,7 +1027,7 @@ bool OCRepPayloadSetStringArray(OCRepPayload* payload, const char* name, bool b = OCRepPayloadSetStringArrayAsOwner(payload, name, newArray, dimensions); - if(!b) + if (!b) { for(size_t i = 0; i < dimTotal; ++i) { @@ -1008,19 +1043,19 @@ bool OCRepPayloadGetStringArray(const OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_STRING + if (!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_STRING || !val->arr.strArray) { return false; } size_t dimTotal = calcDimTotal(val->arr.dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } *array = (char**)OICMalloc(dimTotal * sizeof(char*)); - if(!*array) + if (!*array) { return false; } @@ -1042,7 +1077,7 @@ bool OCRepPayloadSetBoolArrayAsOwner(OCRepPayload* payload, const char* name, OCRepPayloadValue* val = OCRepPayloadFindAndSetValue(payload, name, OCREP_PROP_ARRAY); - if(!val) + if (!val) { return false; } @@ -1057,14 +1092,14 @@ bool OCRepPayloadSetBoolArray(OCRepPayload* payload, const char* name, const bool* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]) { size_t dimTotal = calcDimTotal(dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } bool* newArray = (bool*)OICMalloc(dimTotal * sizeof(bool)); - if(!newArray) + if (!newArray) { return false; } @@ -1073,7 +1108,7 @@ bool OCRepPayloadSetBoolArray(OCRepPayload* payload, const char* name, bool b = OCRepPayloadSetBoolArrayAsOwner(payload, name, newArray, dimensions); - if(!b) + if (!b) { OICFree(newArray); } @@ -1085,19 +1120,19 @@ bool OCRepPayloadGetBoolArray(const OCRepPayload* payload, const char* name, { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_BOOL + if (!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_BOOL || !val->arr.bArray) { return false; } size_t dimTotal = calcDimTotal(val->arr.dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } *array = (bool*)OICMalloc(dimTotal * sizeof(bool)); - if(!*array) + if (!*array) { return false; } @@ -1112,7 +1147,7 @@ bool OCRepPayloadSetPropObjectArrayAsOwner(OCRepPayload* payload, const char* na { OCRepPayloadValue* val = OCRepPayloadFindAndSetValue(payload, name, OCREP_PROP_ARRAY); - if(!val) + if (!val) { return false; } @@ -1128,14 +1163,14 @@ bool OCRepPayloadSetPropObjectArray(OCRepPayload* payload, const char* name, const OCRepPayload** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]) { size_t dimTotal = calcDimTotal(dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } OCRepPayload** newArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*)); - if(!newArray) + if (!newArray) { return false; } @@ -1147,7 +1182,7 @@ bool OCRepPayloadSetPropObjectArray(OCRepPayload* payload, const char* name, bool b = OCRepPayloadSetPropObjectArrayAsOwner(payload, name, newArray, dimensions); - if(!b) + if (!b) { for(size_t i = 0; i < dimTotal; ++i) { @@ -1163,19 +1198,19 @@ bool OCRepPayloadGetPropObjectArray(const OCRepPayload* payload, const char* nam { OCRepPayloadValue* val = OCRepPayloadFindValue(payload, name); - if(!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_OBJECT + if (!val || val->type != OCREP_PROP_ARRAY || val->arr.type != OCREP_PROP_OBJECT || !val->arr.objArray) { return false; } size_t dimTotal = calcDimTotal(val->arr.dimensions); - if(dimTotal == 0) + if (dimTotal == 0) { return false; } *array = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*)); - if(!*array) + if (!*array) { return false; } @@ -1192,7 +1227,7 @@ bool OCRepPayloadGetPropObjectArray(const OCRepPayload* payload, const char* nam void OCFreeOCStringLL(OCStringLL* ll) { - if(!ll) + if (!ll) { return; } @@ -1263,7 +1298,7 @@ OCRepPayload* OCRepPayloadClone (const OCRepPayload* payload) void OCRepPayloadDestroy(OCRepPayload* payload) { - if(!payload) + if (!payload) { return; } @@ -1280,7 +1315,7 @@ OCDiscoveryPayload* OCDiscoveryPayloadCreate() { OCDiscoveryPayload* payload = (OCDiscoveryPayload*)OICCalloc(1, sizeof(OCDiscoveryPayload)); - if(!payload) + if (!payload) { return NULL; } @@ -1290,24 +1325,31 @@ OCDiscoveryPayload* OCDiscoveryPayloadCreate() return payload; } -OCSecurityPayload* OCSecurityPayloadCreate(const char* securityData) +OCSecurityPayload* OCSecurityPayloadCreate(const uint8_t* securityData, size_t size) { OCSecurityPayload* payload = (OCSecurityPayload*)OICCalloc(1, sizeof(OCSecurityPayload)); - if(!payload) + if (!payload) { return NULL; } payload->base.type = PAYLOAD_TYPE_SECURITY; - payload->securityData = OICStrdup(securityData); + payload->securityData = (uint8_t *)OICCalloc(1, size); + if (!payload->securityData) + { + OICFree(payload); + return NULL; + } + memcpy(payload->securityData, (uint8_t *)securityData, size); + payload->payloadSize = size; return payload; } void OCSecurityPayloadDestroy(OCSecurityPayload* payload) { - if(!payload) + if (!payload) { return; } @@ -1334,7 +1376,7 @@ OCResourcePayload* OCDiscoveryPayloadGetResource(OCDiscoveryPayload* payload, si OCResourcePayload* p = payload->resources; while(p) { - if(i == index) + if (i == index) { return p; } @@ -1344,38 +1386,38 @@ OCResourcePayload* OCDiscoveryPayloadGetResource(OCDiscoveryPayload* payload, si return NULL; } -static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t port) +static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t securePort, + uint16_t tcpPort) { OCResourcePayload* pl = (OCResourcePayload*)OICCalloc(1, sizeof(OCResourcePayload)); - if(!pl) + if (!pl) { return NULL; } pl->uri = OICStrdup(res->uri); - pl->sid = (uint8_t*)OICCalloc(1, UUID_SIZE); - if(!pl->uri || ! pl->sid) + + if (!pl->uri) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } - memcpy(pl->sid, OCGetServerInstanceID(), UUID_SIZE); // types OCResourceType* typePtr = res->rsrcType; - if(typePtr != NULL) + if (typePtr != NULL) { pl->types = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!pl->types) + if (!pl->types) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } pl->types->value = OICStrdup(typePtr->resourcetypename); - if(!pl->types->value) + if (!pl->types->value) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } @@ -1384,15 +1426,15 @@ static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t port) while(typePtr) { cur->next = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!cur->next) + if (!cur->next) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } cur->next->value = OICStrdup(typePtr->resourcetypename); - if(!cur->next->value) + if (!cur->next->value) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } cur = cur->next; @@ -1402,18 +1444,18 @@ static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t port) // interfaces OCResourceInterface* ifPtr = res->rsrcInterface; - if(ifPtr != NULL) + if (ifPtr != NULL) { pl->interfaces = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!pl->interfaces) + if (!pl->interfaces) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } pl->interfaces->value = OICStrdup(ifPtr->name); - if(!pl->interfaces->value) + if (!pl->interfaces->value) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } @@ -1422,15 +1464,15 @@ static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t port) while(ifPtr && cur) { cur->next = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if(!cur->next) + if (!cur->next) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } cur->next->value = OICStrdup(ifPtr->name); - if(!cur->next->value) + if (!cur->next->value) { - FreeOCDiscoveryResource(pl); + OCDiscoveryResourceDestroy(pl); return NULL; } cur = cur->next; @@ -1440,118 +1482,57 @@ static OCResourcePayload* OCCopyResource(const OCResource* res, uint16_t port) pl->bitmap = res->resourceProperties & (OC_OBSERVABLE | OC_DISCOVERABLE); pl->secure = (res->resourceProperties & OC_SECURE) != 0; - pl->port = port; - + pl->port = securePort; +#ifdef TCP_ADAPTER + pl->tcpPort = tcpPort; +#endif return pl; } void OCDiscoveryPayloadAddResource(OCDiscoveryPayload* payload, const OCResource* res, - uint16_t port) + uint16_t securePort, uint16_t tcpPort) { - OCDiscoveryPayloadAddNewResource(payload, OCCopyResource(res, port)); + OCDiscoveryPayloadAddNewResource(payload, OCCopyResource(res, securePort, tcpPort)); } -bool OCResourcePayloadAddResourceType(OCResourcePayload* payload, const char* resourceType) +bool OCResourcePayloadAddStringLL(OCStringLL **stringLL, const char *value) { - if (!resourceType) - { - return false; - } - - char* dup = OICStrdup(resourceType); - - if (!dup) - { - return false; - } + char *dup = OICStrdup(value); + VERIFY_PARAM_NON_NULL(TAG, dup, "Failed copying string"); + VERIFY_PARAM_NON_NULL(TAG, value, "Invalid Parameters"); - if (!payload->types) + if (!*stringLL) { - payload->types = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - - if (!payload->types) - { - OICFree(dup); - return false; - } - - payload->types->value = dup; + *stringLL = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL)); + VERIFY_PARAM_NON_NULL(TAG, *stringLL, "Failed allocating memory"); + (*stringLL)->value = dup; return true; } - else { - OCStringLL* temp = payload->types; - + OCStringLL *temp = *stringLL; while(temp->next) { temp = temp->next; } - - temp->next = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if (!temp->next) - { - OICFree(dup); - return false; - } - + temp->next = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL)); + VERIFY_PARAM_NON_NULL(TAG, temp->next, "Failed allocating memory"); temp->next->value = dup; return true; } +exit: + OICFree(dup); + return false; } -bool OCResourcePayloadAddInterface(OCResourcePayload* payload, const char* interface) +void OCDiscoveryPayloadAddNewResource(OCDiscoveryPayload* payload, OCResourcePayload* res) { - if (!interface) - { - return false; - } - - char* dup = OICStrdup(interface); - - if (!dup) - { - return false; - } - - if (!payload->interfaces) - { - payload->interfaces = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - - if (!payload->interfaces) - { - OICFree(dup); - return false; - } - - payload->interfaces->value = dup; - return true; - } - - else + if (!payload) { - OCStringLL* temp = payload->interfaces; - - while(temp->next) - { - temp = temp->next; - } - - temp->next = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); - if (!temp->next) - { - OICFree(dup); - return false; - } - - temp->next->value = dup; - return true; + return; } -} -void OCDiscoveryPayloadAddNewResource(OCDiscoveryPayload* payload, OCResourcePayload* res) -{ - if(!payload->resources) + if (!payload->resources) { payload->resources = res; } @@ -1566,75 +1547,77 @@ void OCDiscoveryPayloadAddNewResource(OCDiscoveryPayload* payload, OCResourcePay } } -static void FreeOCDiscoveryResource(OCResourcePayload* payload) +void OCDiscoveryResourceDestroy(OCResourcePayload* payload) { - if(!payload) + if (!payload) { return; } OICFree(payload->uri); - OICFree(payload->sid); OCFreeOCStringLL(payload->types); OCFreeOCStringLL(payload->interfaces); - FreeOCDiscoveryResource(payload->next); + OCDiscoveryResourceDestroy(payload->next); OICFree(payload); } void OCDiscoveryPayloadDestroy(OCDiscoveryPayload* payload) { - if(!payload) + if (!payload) { return; } - - FreeOCDiscoveryResource(payload->resources); + OICFree(payload->sid); + OICFree(payload->baseURI); + OICFree(payload->uri); + OICFree(payload->type); + OICFree(payload->name); + OCFreeOCStringLL(payload->interface); + OCDiscoveryResourceDestroy(payload->resources); OICFree(payload); } -OCDevicePayload* OCDevicePayloadCreate(const char* uri, const uint8_t* sid, const char* dname, - const char* specVer, const char* dmVer) +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) + if (!payload) { return NULL; } payload->base.type = PAYLOAD_TYPE_DEVICE; - - payload->uri = OICStrdup(uri); - if(uri && !payload->uri) + payload->sid = OICStrdup(sid); + if (sid && !payload->sid) { goto exit; } - if(sid) - { - payload->sid = (uint8_t*)OICMalloc(UUID_SIZE); - if(!payload->sid) - { - goto exit; - } - memcpy(payload->sid, sid, UUID_SIZE); - } - payload->deviceName = OICStrdup(dname); - if(dname && !payload->deviceName) + if (dname && !payload->deviceName) { goto exit; } payload->specVersion = OICStrdup(specVer); - if(specVer && !payload->specVersion) + if (specVer && !payload->specVersion) { goto exit; } payload->dataModelVersion = OICStrdup(dmVer); - if(dmVer && !payload->dataModelVersion) + if (dmVer && !payload->dataModelVersion) + { + 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; } @@ -1648,22 +1631,23 @@ exit: void OCDevicePayloadDestroy(OCDevicePayload* payload) { - if(!payload) + if (!payload) { return; } - OICFree(payload->uri); OICFree(payload->sid); OICFree(payload->deviceName); OICFree(payload->specVersion); OICFree(payload->dataModelVersion); + OCFreeOCStringLL(payload->types); + OCFreeOCStringLL(payload->interfaces); OICFree(payload); } static void OCCopyPlatformInfo(const OCPlatformInfo* platformInfo, OCPlatformPayload* target) { - if(!platformInfo || !target) + if (!platformInfo || !target) { return; } @@ -1681,55 +1665,73 @@ static void OCCopyPlatformInfo(const OCPlatformInfo* platformInfo, OCPlatformPay target->info.systemTime = OICStrdup(platformInfo->systemTime); } -OCPlatformPayload* OCPlatformPayloadCreateAsOwner(char* uri, OCPlatformInfo* platformInfo) +OCPlatformPayload* OCPlatformPayloadCreateAsOwner(OCPlatformInfo* platformInfo) { OCPlatformPayload* payload = (OCPlatformPayload*)OICCalloc(1, sizeof(OCPlatformPayload)); - if(!payload) + if (!payload) { return NULL; } payload->base.type = PAYLOAD_TYPE_PLATFORM; - payload->uri = uri; + + payload->interfaces = (OCStringLL*)OICCalloc(1, sizeof(OCStringLL)); + if (!payload->interfaces) + { + return NULL; + } + payload->interfaces->value = OICStrdup(OC_RSRVD_INTERFACE_READ); + payload->rt = OICStrdup(OC_RSRVD_RESOURCE_TYPE_PLATFORM); payload->info = *platformInfo; return payload; } -OCPlatformPayload* OCPlatformPayloadCreate(const char* uri, const OCPlatformInfo* platformInfo) +OCPlatformPayload* OCPlatformPayloadCreate(const OCPlatformInfo* platformInfo) { OCPlatformPayload* payload = (OCPlatformPayload*)OICCalloc(1, sizeof(OCPlatformPayload)); - if(!payload) + if (!payload) { return NULL; } payload->base.type = PAYLOAD_TYPE_PLATFORM; - payload->uri = OICStrdup(uri); + payload->rt = OICStrdup(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) + if (!payload) { return; } OICFree(payload->uri); - OICFree(payload->info.platformID); - OICFree(payload->info.manufacturerName); - OICFree(payload->info.manufacturerUrl); - OICFree(payload->info.modelNumber); - OICFree(payload->info.dateOfManufacture); - OICFree(payload->info.platformVersion); - OICFree(payload->info.operatingSystemVersion); - OICFree(payload->info.hardwareVersion); - OICFree(payload->info.firmwareVersion); - OICFree(payload->info.supportUrl); - OICFree(payload->info.systemTime); + OCPlatformInfoDestroy(&payload->info); + OICFree(payload->rt); + OCFreeOCStringLL(payload->interfaces); OICFree(payload); } @@ -1737,7 +1739,7 @@ OCPresencePayload* OCPresencePayloadCreate(uint32_t seqNum, uint32_t maxAge, OCPresenceTrigger trigger, const char* resourceType) { OCPresencePayload* payload = (OCPresencePayload*)OICCalloc(1, sizeof(OCPresencePayload)); - if(!payload) + if (!payload) { return NULL; } @@ -1752,7 +1754,7 @@ OCPresencePayload* OCPresencePayloadCreate(uint32_t seqNum, uint32_t maxAge, void OCPresencePayloadDestroy(OCPresencePayload* payload) { - if(!payload) + if (!payload) { return; }