X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Fsrc%2Focpayloadconvert.c;h=daa9003d988f091d1dc3adcb3f70074744775478;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=e3dd92733ac824454d5a70e8ff67e1ee9514ed96;hpb=3f2fa3bf855a6ae2cc70d0fcc737ed038ed88028;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/src/ocpayloadconvert.c b/resource/csdk/stack/src/ocpayloadconvert.c old mode 100644 new mode 100755 index e3dd927..daa9003 --- a/resource/csdk/stack/src/ocpayloadconvert.c +++ b/resource/csdk/stack/src/ocpayloadconvert.c @@ -33,10 +33,6 @@ #include "ocresourcehandler.h" #include "cbor.h" -#if defined(RD_CLIENT) || defined(RD_SERVER) -#include "rdpayload.h" -#endif - #define TAG "OIC_RI_PAYLOADCONVERT" // Arbitrarily chosen size that seems to contain the majority of packages @@ -45,21 +41,16 @@ // Discovery Links Map Length. #define LINKS_MAP_LEN 4 -// Default data model versions in CVS form -#define DEFAULT_DATA_MODEL_VERSIONS "res.1.1.0,sh.1.1.0" - // Functions all return either a CborError, or a negative version of the OC_STACK return values static int64_t OCConvertPayloadHelper(OCPayload *payload, uint8_t *outPayload, size_t *size); static int64_t OCConvertDiscoveryPayload(OCDiscoveryPayload *payload, uint8_t *outPayload, size_t *size); -static int64_t OCConvertDevicePayload(OCDevicePayload *payload, uint8_t *outPayload, - size_t *size); -static int64_t OCConvertPlatformPayload(OCPlatformPayload *payload, uint8_t *outPayload, - size_t *size); static int64_t OCConvertRepPayload(OCRepPayload *payload, uint8_t *outPayload, size_t *size); static int64_t OCConvertRepMap(CborEncoder *map, const OCRepPayload *payload); +#ifdef WITH_PRESENCE static int64_t OCConvertPresencePayload(OCPresencePayload *payload, uint8_t *outPayload, size_t *size); +#endif static int64_t OCConvertSecurityPayload(OCSecurityPayload *payload, uint8_t *outPayload, size_t *size); static int64_t OCConvertSingleRepPayload(CborEncoder *parent, const OCRepPayload *payload); @@ -111,12 +102,14 @@ OCStackResult OCConvertPayload(OCPayload* payload, uint8_t** outPayload, size_t* // reallocate "out" and try again! uint8_t *out2 = (uint8_t *)OICRealloc(out, curSize); VERIFY_PARAM_NON_NULL(TAG, out2, "Failed to increase payload size"); + memset(out2, 0, curSize); out = out2; err = OCConvertPayloadHelper(payload, out, &curSize); while (err == CborErrorOutOfMemory) { uint8_t *out2 = (uint8_t *)OICRealloc(out, curSize); VERIFY_PARAM_NON_NULL(TAG, out2, "Failed to increase payload size"); + memset(out2, 0, curSize); out = out2; err = OCConvertPayloadHelper(payload, out, &curSize); } @@ -152,20 +145,14 @@ static int64_t OCConvertPayloadHelper(OCPayload* payload, uint8_t* outPayload, s { case PAYLOAD_TYPE_DISCOVERY: return OCConvertDiscoveryPayload((OCDiscoveryPayload*)payload, outPayload, size); - case PAYLOAD_TYPE_DEVICE: - return OCConvertDevicePayload((OCDevicePayload*)payload, outPayload, size); - case PAYLOAD_TYPE_PLATFORM: - return OCConvertPlatformPayload((OCPlatformPayload*)payload, outPayload, size); case PAYLOAD_TYPE_REPRESENTATION: return OCConvertRepPayload((OCRepPayload*)payload, outPayload, size); +#ifdef WITH_PRESENCE case PAYLOAD_TYPE_PRESENCE: return OCConvertPresencePayload((OCPresencePayload*)payload, outPayload, size); +#endif case PAYLOAD_TYPE_SECURITY: return OCConvertSecurityPayload((OCSecurityPayload*)payload, outPayload, size); -#if defined(RD_CLIENT) || defined(RD_SERVER) - case PAYLOAD_TYPE_RD: - return OCRDPayloadToCbor((OCRDPayload*)payload, outPayload, size); -#endif default: OIC_LOG_V(INFO,TAG, "ConvertPayload default %d", payload->type); return CborErrorUnknownType; @@ -371,11 +358,27 @@ static int64_t OCConvertDiscoveryPayload(OCDiscoveryPayload *payload, uint8_t *o } #ifdef TCP_ADAPTER - err |= cbor_encode_text_string(&policyMap, OC_RSRVD_TCP_PORT, - sizeof(OC_RSRVD_TCP_PORT) - 1); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding tcp port tag"); - err |= cbor_encode_uint(&policyMap, resource->tcpPort); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding tcp port value"); +#ifdef __WITH_TLS__ + // tls + if (resource->secure) + { + err |= cbor_encode_text_string(&policyMap, OC_RSRVD_TLS_PORT, + sizeof(OC_RSRVD_TLS_PORT) - 1); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding tcp secure port tag"); + err |= cbor_encode_uint(&policyMap, resource->tcpPort); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding tcp secure port value"); + } + + // tcp + else +#endif + { + err |= cbor_encode_text_string(&policyMap, OC_RSRVD_TCP_PORT, + sizeof(OC_RSRVD_TCP_PORT) - 1); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding tcp port tag"); + err |= cbor_encode_uint(&policyMap, resource->tcpPort); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding tcp port value"); + } #endif err |= cbor_encoder_close_container(&linkMap, &policyMap); @@ -403,162 +406,6 @@ exit: return checkError(err, &encoder, outPayload, size); } -static int64_t OCConvertDevicePayload(OCDevicePayload *payload, uint8_t *outPayload, - size_t *size) -{ - if (!payload) - { - return CborUnknownError; - } - int64_t err = CborNoError; - CborEncoder encoder; - char *dataModelVersions = 0; - - cbor_encoder_init(&encoder, outPayload, *size, 0); - CborEncoder repMap; - err |= cbor_encoder_create_map(&encoder, &repMap, CborIndefiniteLength); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating device map"); - - // Resource Type - if (payload->types) - { - OIC_LOG(INFO, TAG, "Payload has types"); - err |= OCStringLLJoin(&repMap, OC_RSRVD_RESOURCE_TYPE, payload->types); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding resource type tag/value."); - } - - if (payload->interfaces) - { - OIC_LOG(INFO, TAG, "Payload has interface"); - err |= OCStringLLJoin(&repMap, OC_RSRVD_INTERFACE, payload->interfaces); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding interface type tag/value."); - } - - // Device ID - err |= AddTextStringToMap(&repMap, OC_RSRVD_DEVICE_ID, sizeof(OC_RSRVD_DEVICE_ID) - 1 , payload->sid); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding device id"); - - // Device Name - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_DEVICE_NAME, - sizeof(OC_RSRVD_DEVICE_NAME) - 1, payload->deviceName); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding device name"); - - // Device Spec Version - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_SPEC_VERSION, - sizeof(OC_RSRVD_SPEC_VERSION) - 1, payload->specVersion); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding data spec version"); - - // Device data Model Versions - if (payload->dataModelVersions) - { - OIC_LOG(INFO, TAG, "Payload has data model versions"); - dataModelVersions = OCCreateString(payload->dataModelVersions); - } - else - { - dataModelVersions = OICStrdup(DEFAULT_DATA_MODEL_VERSIONS); - } - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_DATA_MODEL_VERSION, - sizeof(OC_RSRVD_DATA_MODEL_VERSION) - 1, dataModelVersions); - OICFree(dataModelVersions); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding data model versions"); - - err |= cbor_encoder_close_container(&encoder, &repMap); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing device map"); - -exit: - return checkError(err, &encoder, outPayload, size); -} - -static int64_t OCConvertPlatformPayload(OCPlatformPayload *payload, uint8_t *outPayload, - size_t *size) -{ - int64_t err = CborNoError; - CborEncoder encoder; - - cbor_encoder_init(&encoder, outPayload, *size, 0); - - CborEncoder repMap; - err |= cbor_encoder_create_map(&encoder, &repMap, CborIndefiniteLength); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating platform map"); - - // Platform ID - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_PLATFORM_ID, - sizeof(OC_RSRVD_PLATFORM_ID) - 1, payload->info.platformID); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding platform id"); - - // MFG Name - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_MFG_NAME, - sizeof(OC_RSRVD_MFG_NAME) - 1, payload->info.manufacturerName); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding mfg name"); - - // MFG Url - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_MFG_URL, - sizeof(OC_RSRVD_MFG_URL) - 1, payload->info.manufacturerUrl); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding mfg url"); - - // Model Num - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_MODEL_NUM, - sizeof(OC_RSRVD_MODEL_NUM) -1, payload->info.modelNumber); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding model num"); - - // Date of Mfg - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_MFG_DATE, - sizeof(OC_RSRVD_MFG_DATE) - 1, payload->info.dateOfManufacture); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding mfg date"); - - // Platform Version - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_PLATFORM_VERSION, - sizeof(OC_RSRVD_PLATFORM_VERSION) - 1, payload->info.platformVersion); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding platform version"); - - // OS Version - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_OS_VERSION, - sizeof(OC_RSRVD_OS_VERSION) - 1, payload->info.operatingSystemVersion); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding OS version"); - - // Hardware Version - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_HARDWARE_VERSION, - sizeof(OC_RSRVD_HARDWARE_VERSION) - 1, payload->info.hardwareVersion); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding HW version"); - - // Firmware Version - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_FIRMWARE_VERSION, - sizeof(OC_RSRVD_FIRMWARE_VERSION) - 1, payload->info.firmwareVersion); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding firmware version"); - - // Support URL - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_SUPPORT_URL, - sizeof(OC_RSRVD_SUPPORT_URL) - 1, payload->info.supportUrl); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding support url"); - - // System Time - err |= ConditionalAddTextStringToMap(&repMap, OC_RSRVD_SYSTEM_TIME, - sizeof(OC_RSRVD_SYSTEM_TIME) - 1, payload->info.systemTime); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding system time"); - - // Resource type - if (payload->rt) - { - err |= OCStringLLJoin(&repMap, OC_RSRVD_RESOURCE_TYPE, payload->rt); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding resource type."); - } - - // Resource interfaces - if (payload->interfaces) - { - err |= OCStringLLJoin(&repMap, OC_RSRVD_INTERFACE, payload->interfaces); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding platform interface type."); - } - - // Close Map - err |= cbor_encoder_close_container(&encoder, &repMap); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep map"); - -exit: - return checkError(err, &encoder, outPayload, size); -} - static int64_t OCConvertArrayItem(CborEncoder *array, const OCRepPayloadValueArray *valArray, size_t index) { @@ -570,44 +417,39 @@ static int64_t OCConvertArrayItem(CborEncoder *array, const OCRepPayloadValueArr err = CborUnknownError; break; case OCREP_PROP_INT: - err |= cbor_encode_int(array, valArray->iArray[index]); + if (valArray->iArray != 0) + { + err |= cbor_encode_int(array, valArray->iArray[index]); + } break; case OCREP_PROP_DOUBLE: - err |= cbor_encode_double(array, valArray->dArray[index]); + if (valArray->dArray != 0) + { + err |= cbor_encode_double(array, valArray->dArray[index]); + } break; case OCREP_PROP_BOOL: - err |= cbor_encode_boolean(array, valArray->bArray[index]); - break; - case OCREP_PROP_STRING: - if (!valArray->strArray[index]) + if (valArray->bArray != 0) { - err |= cbor_encode_null(array); + err |= cbor_encode_boolean(array, valArray->bArray[index]); } - else + break; + case OCREP_PROP_STRING: + if (valArray->strArray != 0) { - err |= cbor_encode_text_string(array, valArray->strArray[index], - strlen(valArray->strArray[index])); + err |= (!valArray->strArray[index]) ? cbor_encode_null(array) : cbor_encode_text_string(array, + valArray->strArray[index], strlen(valArray->strArray[index])); } break; case OCREP_PROP_BYTE_STRING: - if (!valArray->strArray[index]) - { - err |= cbor_encode_null(array); - } - else - { - err |= cbor_encode_byte_string(array, valArray->ocByteStrArray[index].bytes, - valArray->ocByteStrArray[index].len); - } + err |= (!valArray->ocByteStrArray[index].len) ? cbor_encode_null(array) : cbor_encode_byte_string(array, + valArray->ocByteStrArray[index].bytes, valArray->ocByteStrArray[index].len); break; case OCREP_PROP_OBJECT: - if (!valArray->objArray[index]) - { - err |= cbor_encode_null(array); - } - else + if (valArray->objArray != 0) { - err |= OCConvertRepMap(array, valArray->objArray[index]); + err |= (!valArray->objArray[index]) ? cbor_encode_null(array): OCConvertRepMap(array, + valArray->objArray[index]); } break; case OCREP_PROP_ARRAY: @@ -625,47 +467,55 @@ static int64_t OCConvertArray(CborEncoder *parent, const OCRepPayloadValueArray CborEncoder array; err |= cbor_encoder_create_array(parent, &array, valArray->dimensions[0]); VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array"); - - for (size_t i = 0; i < valArray->dimensions[0]; ++i) + // empty array + if (valArray->dimensions[0] == 0) + { + err |= OCConvertArrayItem(&array, valArray, 0); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array value"); + } + else { - if (0 != valArray->dimensions[1]) + for (size_t i = 0; i < valArray->dimensions[0]; ++i) { - CborEncoder array2; - err |= cbor_encoder_create_array(&array, &array2, valArray->dimensions[1]); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array2"); - - for (size_t j = 0; j < valArray->dimensions[1]; ++j) + if (0 != valArray->dimensions[1]) { - if (0 != valArray->dimensions[2]) + CborEncoder array2; + err |= cbor_encoder_create_array(&array, &array2, valArray->dimensions[1]); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array2"); + + for (size_t j = 0; j < valArray->dimensions[1]; ++j) { - CborEncoder array3; - err |= cbor_encoder_create_array(&array2, &array3, valArray->dimensions[2]); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array3"); + if (0 != valArray->dimensions[2]) + { + CborEncoder array3; + err |= cbor_encoder_create_array(&array2, &array3, valArray->dimensions[2]); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating rep array3"); - for(size_t k = 0; k < valArray->dimensions[2]; ++k) + for(size_t k = 0; k < valArray->dimensions[2]; ++k) + { + err |= OCConvertArrayItem(&array3, valArray, + j * valArray->dimensions[2] + + i * valArray->dimensions[2] * valArray->dimensions[1] + + k); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array3 value"); + } + err |= cbor_encoder_close_container(&array2, &array3); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array3"); + } + else { - err |= OCConvertArrayItem(&array3, valArray, - j * valArray->dimensions[2] + - i * valArray->dimensions[2] * valArray->dimensions[1] + - k); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array3 value"); + err |= OCConvertArrayItem(&array2, valArray, i * valArray->dimensions[1] + j); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array2 value"); } - err |= cbor_encoder_close_container(&array2, &array3); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array3"); - } - else - { - err |= OCConvertArrayItem(&array2, valArray, i * valArray->dimensions[1] + j); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array2 value"); } + err |= cbor_encoder_close_container(&array, &array2); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array2"); + } + else + { + err |= OCConvertArrayItem(&array, valArray, i); + VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array value"); } - err |= cbor_encoder_close_container(&array, &array2); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing rep array2"); - } - else - { - err |= OCConvertArrayItem(&array, valArray, i); - VERIFY_CBOR_SUCCESS(TAG, err, "Failed adding rep array value"); } } err |= cbor_encoder_close_container(parent, &array); @@ -803,6 +653,7 @@ exit: return checkError(err, &encoder, outPayload, size); } +#ifdef WITH_PRESENCE static int64_t OCConvertPresencePayload(OCPresencePayload *payload, uint8_t *outPayload, size_t *size) { @@ -847,6 +698,7 @@ static int64_t OCConvertPresencePayload(OCPresencePayload *payload, uint8_t *out exit: return checkError(err, &encoder, outPayload, size); } +#endif // WITH_PRESENCE static int64_t AddTextStringToMap(CborEncoder* map, const char* key, size_t keylen, const char* value)