X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Finclude%2Fpayload_logging.h;h=2ad7f56a6576d34d21b15b40edbf7362e81cc66d;hb=b9f147a837d6947528ac9440d2d39fd47a68ed5f;hp=088dd198cf79c46432fa09ba9b070fe7edf1ca28;hpb=2d3736b79a0c0d610c07f7eff385053090c7f8b1;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/include/payload_logging.h b/resource/csdk/stack/include/payload_logging.h index 088dd19..2ad7f56 100644 --- a/resource/csdk/stack/include/payload_logging.h +++ b/resource/csdk/stack/include/payload_logging.h @@ -32,8 +32,12 @@ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS #endif + +#include #include -#include "rdpayload.h" +#include "oic_malloc.h" +#include "ocpayload.h" +#include "ocstack.h" #ifdef __cplusplus extern "C" @@ -46,236 +50,230 @@ extern "C" #ifdef TB_LOG #define OIC_LOG_PAYLOAD(level, payload) OCPayloadLog((level),(payload)) #define UUID_SIZE (16) + const char *convertTriggerEnumToString(OCPresenceTrigger trigger); OCPresenceTrigger convertTriggerStringToEnum(const char * triggerStr); -static inline void OCPayloadLogRep(LogLevel level, OCRepPayload* payload) +INLINE_API void OCPayloadLogRep(LogLevel level, OCRepPayload* payload); + +INLINE_API void OCPayloadLogRepValues(LogLevel level, OCRepPayloadValue* val) +{ + while (val) + { + switch(val->type) + { + case OCREP_PROP_NULL: + OIC_LOG_V(level, PL_TAG, "\t\t%s: NULL", val->name); + break; + case OCREP_PROP_INT: + OIC_LOG_V(level, PL_TAG, "\t\t%s(int):%" PRId64, val->name, val->i); + break; + case OCREP_PROP_DOUBLE: + OIC_LOG_V(level, PL_TAG, "\t\t%s(double):%f", val->name, val->d); + break; + case OCREP_PROP_BOOL: + OIC_LOG_V(level, PL_TAG, "\t\t%s(bool):%s", val->name, val->b ? "true" : "false"); + break; + case OCREP_PROP_STRING: + OIC_LOG_V(level, PL_TAG, "\t\t%s(string):%s", val->name, val->str); + break; + case OCREP_PROP_BYTE_STRING: + OIC_LOG_V(level, PL_TAG, "\t\t%s(binary):", val->name); + OIC_LOG_BUFFER(level, PL_TAG, val->ocByteStr.bytes, val->ocByteStr.len); + break; + case OCREP_PROP_OBJECT: + // Note: Only prints the URI (if available), to print further, you'll + // need to dig into the object better! + OIC_LOG_V(level, PL_TAG, "\t\t%s(object):", val->name); + OCPayloadLogRep(level, val->obj); + break; + case OCREP_PROP_ARRAY: + switch(val->arr.type) + { + case OCREP_PROP_INT: + OIC_LOG_V(level, PL_TAG, "\t\t%s(int array):%zu x %zu x %zu: ", + val->name, + val->arr.dimensions[0], val->arr.dimensions[1], + val->arr.dimensions[2]); + OIC_LOG(level, PL_TAG, "\t\t Values:"); + for (size_t i = 0; i < val->arr.dimensions[0]; i++) + { + OIC_LOG_V(level, PL_TAG, "\t\t\t %" PRId64, val->arr.iArray[i]); + } + break; + case OCREP_PROP_DOUBLE: + OIC_LOG_V(level, PL_TAG, "\t\t%s(double array):%zu x %zu x %zu: ", + val->name, + val->arr.dimensions[0], val->arr.dimensions[1], + val->arr.dimensions[2]); + OIC_LOG(level, PL_TAG, "\t\t Values:"); + for (size_t i = 0; i < val->arr.dimensions[0]; i++) + { + OIC_LOG_V(level, PL_TAG, "\t\t\t %lf", val->arr.dArray[i]); + } + break; + case OCREP_PROP_BOOL: + OIC_LOG_V(level, PL_TAG, "\t\t%s(bool array):%zu x %zu x %zu: ", + val->name, + val->arr.dimensions[0], val->arr.dimensions[1], + val->arr.dimensions[2]); + OIC_LOG(level, PL_TAG, "\t\t Values:"); + for (size_t i = 0; i < val->arr.dimensions[0]; i++) + { + OIC_LOG_V(level, PL_TAG, "\t\t\t %d", val->arr.bArray[i]); + } + break; + case OCREP_PROP_STRING: + OIC_LOG_V(level, PL_TAG, "\t\t%s(string array):%zu x %zu x %zu: ", + val->name, + val->arr.dimensions[0], val->arr.dimensions[1], + val->arr.dimensions[2]); + OIC_LOG(level, PL_TAG, "\t\t Values:"); + for (size_t i = 0; i < val->arr.dimensions[0]; i++) + { + OIC_LOG_V(level, PL_TAG, "\t\t\t %s", val->arr.strArray[i]); + } + break; + case OCREP_PROP_BYTE_STRING: + OIC_LOG_V(level, PL_TAG, "\t\t%s(byte array):%zu x %zu x %zu: ", + val->name, + val->arr.dimensions[0], val->arr.dimensions[1], + val->arr.dimensions[2]); + OIC_LOG(level, PL_TAG, "\t\t Values:"); + for (size_t i = 0; i < val->arr.dimensions[0]; i++) + { + OIC_LOG_BUFFER(level, PL_TAG, val->arr.ocByteStrArray[i].bytes, val->arr.ocByteStrArray[i].len); + } + break; + case OCREP_PROP_OBJECT: + OIC_LOG_V(level, PL_TAG, "\t\t%s(object array):%zu x %zu x %zu: ", + val->name, + val->arr.dimensions[0], val->arr.dimensions[1], + val->arr.dimensions[2]); + OIC_LOG(level, PL_TAG, "\t\t Values:"); + + for (size_t i = 0; i < val->arr.dimensions[0]; i++) + { + OCPayloadLogRep(level, val->arr.objArray[i]); + } + break; + case OCREP_PROP_ARRAY: //Seems as nested arrays doesn't not supported in API + default: + OIC_LOG_V(ERROR, PL_TAG, "%s <-- Unknown/unsupported array type!", + val->name); + break; + } + break; + default: + OIC_LOG_V(ERROR, PL_TAG, "%s <-- Unknown type!", val->name); + break; + } + val = val -> next; + } +} + +INLINE_API void OCPayloadLogRep(LogLevel level, OCRepPayload* payload) { OIC_LOG(level, (PL_TAG), "Payload Type: Representation"); - OCRepPayload* rep = payload; int i = 1; - while(rep) + for (OCRepPayload* rep = payload; rep; rep = rep->next, ++i) { OIC_LOG_V(level, PL_TAG, "\tResource #%d", i); - OIC_LOG_V(level, PL_TAG, "\tURI:%s", rep->uri); - OIC_LOG(level, PL_TAG, "\tResource Types:"); - OCStringLL* strll = rep->types; - while(strll) + if (rep->uri) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); - strll = strll->next; + OIC_LOG_V(level, PL_TAG, "\tURI:%s", rep->uri); } - OIC_LOG(level, PL_TAG, "\tInterfaces:"); - strll = rep->interfaces; - while(strll) + if (rep->types) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); - strll = strll->next; + OIC_LOG(level, PL_TAG, "\tResource Types:"); + for (OCStringLL* strll = rep->types; strll; strll = strll->next) + { + OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); + } } - - // TODO Finish Logging: Values - OCRepPayloadValue* val = rep->values; - - OIC_LOG(level, PL_TAG, "\tValues:"); - - while(val) + if (rep->interfaces) { - switch(val->type) + OIC_LOG(level, PL_TAG, "\tInterfaces:"); + for (OCStringLL* strll = rep->interfaces; strll; strll = strll->next) { - case OCREP_PROP_NULL: - OIC_LOG_V(level, PL_TAG, "\t\t%s: NULL", val->name); - break; - case OCREP_PROP_INT: - OIC_LOG_V(level, PL_TAG, "\t\t%s(int):%zd", val->name, val->i); - break; - case OCREP_PROP_DOUBLE: - OIC_LOG_V(level, PL_TAG, "\t\t%s(double):%f", val->name, val->d); - break; - case OCREP_PROP_BOOL: - OIC_LOG_V(level, PL_TAG, "\t\t%s(bool):%s", val->name, val->b ? "true" : "false"); - break; - case OCREP_PROP_STRING: - OIC_LOG_V(level, PL_TAG, "\t\t%s(string):%s", val->name, val->str); - break; - case OCREP_PROP_BYTE_STRING: - OIC_LOG_V(level, PL_TAG, "\t\t%s(binary):", val->name); - OIC_LOG_BUFFER(level, PL_TAG, val->ocByteStr.bytes, val->ocByteStr.len); - break; - case OCREP_PROP_OBJECT: - // Note: Only prints the URI (if available), to print further, you'll - // need to dig into the object better! - OIC_LOG_V(level, PL_TAG, "\t\t%s(OCRep):%s", val->name, val->obj->uri); - break; - case OCREP_PROP_ARRAY: - switch(val->arr.type) - { - case OCREP_PROP_INT: - OIC_LOG_V(level, PL_TAG, "\t\t%s(int array):%zu x %zu x %zu", - val->name, - val->arr.dimensions[0], val->arr.dimensions[1], - val->arr.dimensions[2]); - break; - case OCREP_PROP_DOUBLE: - OIC_LOG_V(level, PL_TAG, "\t\t%s(double array):%zu x %zu x %zu", - val->name, - val->arr.dimensions[0], val->arr.dimensions[1], - val->arr.dimensions[2]); - break; - case OCREP_PROP_BOOL: - OIC_LOG_V(level, PL_TAG, "\t\t%s(bool array):%zu x %zu x %zu", - val->name, - val->arr.dimensions[0], val->arr.dimensions[1], - val->arr.dimensions[2]); - break; - case OCREP_PROP_STRING: - OIC_LOG_V(level, PL_TAG, "\t\t%s(string array):%zu x %zu x %zu", - val->name, - val->arr.dimensions[0], val->arr.dimensions[1], - val->arr.dimensions[2]); - break; - case OCREP_PROP_BYTE_STRING: - OIC_LOG_V(level, PL_TAG, "\t\t%s(byte array):%zu x %zu x %zu", - val->name, - val->arr.dimensions[0], val->arr.dimensions[1], - val->arr.dimensions[2]); - break; - case OCREP_PROP_OBJECT: - OIC_LOG_V(level, PL_TAG, "\t\t%s(OCRep array):%zu x %zu x %zu", - val->name, - val->arr.dimensions[0], val->arr.dimensions[1], - val->arr.dimensions[2]); - break; - default: - OIC_LOG_V(ERROR, PL_TAG, "\t\t%s <-- Unknown/unsupported array type!", - val->name); - break; - } - break; - default: - OIC_LOG_V(ERROR, PL_TAG, "\t\t%s <-- Unknown type!", val->name); - break; + OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); } - val = val -> next; } - - ++i; - rep = rep->next; + OIC_LOG(level, PL_TAG, "\tValues:"); + OCPayloadLogRepValues(level, rep->values); } - } -static inline void OCPayloadLogDiscovery(LogLevel level, OCDiscoveryPayload* payload) +static void OCStringLLPrint(LogLevel level, OCStringLL *type) { - OIC_LOG(level, PL_TAG, "Payload Type: Discovery"); - int i = 1; - - if(!payload->resources) - { - OIC_LOG(level, PL_TAG, "\tNO Resources"); - return; - } - OIC_LOG_V(level, PL_TAG, "\tSID: %s", payload->sid); - if (payload->baseURI) - { - OIC_LOG_V(level, PL_TAG, "\tBase URI:%s", payload->baseURI); - } - if (payload->name) - { - OIC_LOG_V(level, PL_TAG, "\tNAME: %s", payload->name); - } - if (payload->uri) - { - OIC_LOG_V(level, PL_TAG, "\tURI: %s", payload->uri); - } - if (payload->type) - { - OIC_LOG_V(level, PL_TAG, "\tResource Type: %s", payload->type); - } - OIC_LOG(level, PL_TAG, "\tInterface:"); - for (OCStringLL *itf = payload->interface; itf; itf = itf->next) + for (OCStringLL *strll = type; strll; strll = strll->next) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", itf->value); + OIC_LOG_V(level, PL_TAG, "\t\t %s", strll->value); } +} - OCResourcePayload* res = payload->resources; +INLINE_API void OCPayloadLogDiscovery(LogLevel level, OCDiscoveryPayload* payload) +{ + OIC_LOG(level, PL_TAG, "Payload Type: Discovery"); - while(res) + while(payload && payload->resources) { - OIC_LOG_V(level, PL_TAG, "\tResource #%d", i); - OIC_LOG_V(level, PL_TAG, "\tURI:%s", res->uri); - OIC_LOG(level, PL_TAG, "\tResource Types:"); - OCStringLL* strll = res->types; - while(strll) + OIC_LOG_V(level, PL_TAG, "\tDI: %s", payload->sid); + if (payload->baseURI) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); - strll = strll->next; + OIC_LOG_V(level, PL_TAG, "\tBase URI:%s", payload->baseURI); } - OIC_LOG(level, PL_TAG, "\tInterfaces:"); - strll = res->interfaces; - while(strll) + if (payload->name) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); - strll = strll->next; + OIC_LOG_V(level, PL_TAG, "\tNAME: %s", payload->name); } - OIC_LOG_V(level, PL_TAG, "\tBitmap: %u", res->bitmap); - OIC_LOG_V(level, PL_TAG, "\tSecure?: %s", res->secure ? "true" : "false"); - OIC_LOG_V(level, PL_TAG, "\tPort: %u", res->port); - OIC_LOG(level, PL_TAG, ""); - res = res->next; - ++i; - } -} + if (payload->type) + { + OIC_LOG(level, PL_TAG, "\tResource Type:"); + OCStringLLPrint(level, payload->type); + } -static inline void OCPayloadLogDevice(LogLevel level, OCDevicePayload* payload) -{ - OIC_LOG(level, PL_TAG, "Payload Type: Device"); - OIC_LOG_V(level, PL_TAG, "\tSID:%s", payload->sid); - OIC_LOG_V(level, PL_TAG, "\tDevice Name:%s", payload->deviceName); - OIC_LOG_V(level, PL_TAG, "\tSpec Version%s", payload->specVersion); - OIC_LOG_V(level, PL_TAG, "\tData Model Version:%s", payload->dataModelVersion); - if (payload->types) - { - OIC_LOG(level, PL_TAG, "\tResource Type:"); - for (OCStringLL *strll = payload->types; strll; strll = strll->next) + if (payload->iface) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); + OIC_LOG(level, PL_TAG, "\tInterface:"); + OCStringLLPrint(level, payload->iface); } - } -} -static inline void OCPayloadLogPlatform(LogLevel level, OCPlatformPayload* payload) -{ - OIC_LOG(level, PL_TAG, "Payload Type: Platform"); - OIC_LOG_V(level, PL_TAG, "\tURI:%s", payload->uri); - OIC_LOG_V(level, PL_TAG, "\tPlatform ID:%s", payload->info.platformID); - OIC_LOG_V(level, PL_TAG, "\tMfg Name:%s", payload->info.manufacturerName); - OIC_LOG_V(level, PL_TAG, "\tMfg URL:%s", payload->info.manufacturerUrl); - OIC_LOG_V(level, PL_TAG, "\tModel Number:%s", payload->info.modelNumber); - OIC_LOG_V(level, PL_TAG, "\tDate of Mfg:%s", payload->info.dateOfManufacture); - OIC_LOG_V(level, PL_TAG, "\tPlatform Version:%s", payload->info.platformVersion); - OIC_LOG_V(level, PL_TAG, "\tOS Version:%s", payload->info.operatingSystemVersion); - OIC_LOG_V(level, PL_TAG, "\tHardware Version:%s", payload->info.hardwareVersion); - OIC_LOG_V(level, PL_TAG, "\tFirmware Version:%s", payload->info.firmwareVersion); - OIC_LOG_V(level, PL_TAG, "\tSupport URL:%s", payload->info.supportUrl); - OIC_LOG_V(level, PL_TAG, "\tSystem Time:%s", payload->info.systemTime); + OCResourcePayload* res = payload->resources; - if (payload->rt) - { - OIC_LOG(level, PL_TAG, "\tResource Types:"); - OIC_LOG_V(level, PL_TAG, "\t\t%s", payload->rt); - } - if (payload->interfaces) - { - OIC_LOG(level, PL_TAG, "\tResource Interfaces:"); - for (OCStringLL *strll = payload->interfaces; strll; strll = strll->next) + int i = 1; + while(res) { - OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); + OIC_LOG_V(level, PL_TAG, "\tLink#%d", i); + OIC_LOG_V(level, PL_TAG, "\tURI:%s", res->uri); + OIC_LOG(level, PL_TAG, "\tResource Types:"); + OCStringLL* strll = res->types; + while(strll) + { + OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); + strll = strll->next; + } + OIC_LOG(level, PL_TAG, "\tInterfaces:"); + strll = res->interfaces; + while(strll) + { + OIC_LOG_V(level, PL_TAG, "\t\t%s", strll->value); + strll = strll->next; + } + + OIC_LOG_V(level, PL_TAG, "\tBitmap: %u", res->bitmap); + OIC_LOG_V(level, PL_TAG, "\tSecure?: %s", res->secure ? "true" : "false"); + OIC_LOG_V(level, PL_TAG, "\tPort: %u", res->port); + OIC_LOG(level, PL_TAG, ""); + res = res->next; + ++i; } + payload = payload->next; } } -static inline void OCPayloadLogPresence(LogLevel level, OCPresencePayload* payload) +INLINE_API void OCPayloadLogPresence(LogLevel level, OCPresencePayload* payload) { OIC_LOG(level, PL_TAG, "Payload Type: Presence"); OIC_LOG_V(level, PL_TAG, "\tSequence Number:%u", payload->sequenceNumber); @@ -284,36 +282,28 @@ static inline void OCPayloadLogPresence(LogLevel level, OCPresencePayload* paylo OIC_LOG_V(level, PL_TAG, "\tResource Type:%s", payload->resourceType); } -static inline void OCPayloadLogSecurity(LogLevel level, OCSecurityPayload* payload) +INLINE_API void OCPayloadLogSecurity(LogLevel level, OCSecurityPayload* payload) { + size_t payloadSize = payload->payloadSize; OIC_LOG(level, PL_TAG, "Payload Type: Security"); - OIC_LOG_V(level, PL_TAG, "\tSecurity Data: %s", payload->securityData); -} -static inline void OCRDPayloadLog(const LogLevel level, const OCRDPayload *payload) -{ - if (!payload) + if (payloadSize > 0) { - return; - } + // Add a zero-character string terminator. + char *securityData = (char *)OICMalloc(payloadSize + 1); - if (payload->rdDiscovery) - { - OIC_LOG(level, PL_TAG, "RD Discovery"); - OIC_LOG_V(level, PL_TAG, " Device Name : %s", payload->rdDiscovery->n.deviceName); - OIC_LOG_V(level, PL_TAG, " Device Identity : %s", payload->rdDiscovery->di.id); - OIC_LOG_V(level, PL_TAG, " Bias: %d", payload->rdDiscovery->sel); - } - if (payload->rdPublish) - { - OIC_LOG(level, PL_TAG, "RD Publish"); - OCResourceCollectionPayload *rdPublish = payload->rdPublish; - OCTagsLog(level, rdPublish->tags); - OCLinksLog(level, rdPublish->setLinks); + if (securityData) + { + memcpy(securityData, payload->securityData, payloadSize); + // assert(securityData[payloadSize - 1] != '\0'); + securityData[payloadSize] = '\0'; + OIC_LOG_V(level, PL_TAG, "\tSecurity Data: %s", securityData); + OICFree(securityData); + } } } -static inline void OCPayloadLog(LogLevel level, OCPayload* payload) +INLINE_API void OCPayloadLog(LogLevel level, OCPayload* payload) { if(!payload) { @@ -328,21 +318,14 @@ static inline void OCPayloadLog(LogLevel level, OCPayload* payload) case PAYLOAD_TYPE_DISCOVERY: OCPayloadLogDiscovery(level, (OCDiscoveryPayload*)payload); break; - case PAYLOAD_TYPE_DEVICE: - OCPayloadLogDevice(level, (OCDevicePayload*)payload); - break; - case PAYLOAD_TYPE_PLATFORM: - OCPayloadLogPlatform(level, (OCPlatformPayload*)payload); - break; +#ifdef WITH_PRESENCE case PAYLOAD_TYPE_PRESENCE: OCPayloadLogPresence(level, (OCPresencePayload*)payload); break; +#endif case PAYLOAD_TYPE_SECURITY: OCPayloadLogSecurity(level, (OCSecurityPayload*)payload); break; - case PAYLOAD_TYPE_RD: - OCRDPayloadLog(level, (OCRDPayload*)payload); - break; default: OIC_LOG_V(level, PL_TAG, "Unknown Payload Type: %d", payload->type); break;