From d169909bf2b7d7d0c9fe84c7b5e83b2641dab804 Mon Sep 17 00:00:00 2001 From: Jihun Ha Date: Wed, 9 Mar 2016 14:15:28 +0900 Subject: [PATCH] Update a CBOR parser logic for well-known keywords to OIC I've updated a CBOR parsing logic When CBOR parser encounters a well-known keyword like "href" as an attribute. If the attribute is *NOT* on the outermost representation bracket, it is treated as a normal attribute. Change-Id: I1f1c28dd59ae09e1f3f8ab0188c59a1b9fc3b950 Signed-off-by: Jihun Ha Reviewed-on: https://gerrit.iotivity.org/gerrit/5623 Reviewed-by: Habib Virji Tested-by: jenkins-iotivity --- resource/csdk/stack/src/ocpayloadparse.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) mode change 100644 => 100755 resource/csdk/stack/src/ocpayloadparse.c diff --git a/resource/csdk/stack/src/ocpayloadparse.c b/resource/csdk/stack/src/ocpayloadparse.c old mode 100644 new mode 100755 index 93cdabe..8a64a2c --- a/resource/csdk/stack/src/ocpayloadparse.c +++ b/resource/csdk/stack/src/ocpayloadparse.c @@ -41,7 +41,7 @@ static OCStackResult OCParseDiscoveryPayload(OCPayload **outPayload, CborValue *arrayVal); static OCStackResult OCParseDevicePayload(OCPayload **outPayload, CborValue *arrayVal); static OCStackResult OCParsePlatformPayload(OCPayload **outPayload, CborValue *arrayVal); -static CborError OCParseSingleRepPayload(OCRepPayload **outPayload, CborValue *repParent); +static CborError OCParseSingleRepPayload(OCRepPayload **outPayload, CborValue *repParent, bool isRoot); static OCStackResult OCParseRepPayload(OCPayload **outPayload, CborValue *arrayVal); static OCStackResult OCParsePresencePayload(OCPayload **outPayload, CborValue *arrayVal); static OCStackResult OCParseSecurityPayload(OCPayload **outPayload, CborValue * rrayVal); @@ -675,7 +675,7 @@ static CborError OCParseArrayFillArray(const CborValue *parent, case OCREP_PROP_OBJECT: if (dimensions[1] == 0) { - err = OCParseSingleRepPayload(&tempPl, &insideArray); + err = OCParseSingleRepPayload(&tempPl, &insideArray, false); ((OCRepPayload**)targetArray)[i] = tempPl; tempPl = NULL; noAdvance = true; @@ -787,7 +787,7 @@ exit: return err; } -static CborError OCParseSingleRepPayload(OCRepPayload **outPayload, CborValue *objMap) +static CborError OCParseSingleRepPayload(OCRepPayload **outPayload, CborValue *objMap, bool isRoot) { CborError err = CborUnknownError; char *name = NULL; @@ -822,6 +822,7 @@ static CborError OCParseSingleRepPayload(OCRepPayload **outPayload, CborValue *o err = cbor_value_advance(&repMap); VERIFY_CBOR_SUCCESS(TAG, err, "Failed advancing rootMap"); if (name && + isRoot && ((0 == strcmp(OC_RSRVD_HREF, name)) || (0 == strcmp(OC_RSRVD_RESOURCE_TYPE, name)) || (0 == strcmp(OC_RSRVD_INTERFACE, name)))) @@ -881,7 +882,7 @@ static CborError OCParseSingleRepPayload(OCRepPayload **outPayload, CborValue *o case CborMapType: { OCRepPayload *pl = NULL; - err = OCParseSingleRepPayload(&pl, &repMap); + err = OCParseSingleRepPayload(&pl, &repMap, false); VERIFY_CBOR_SUCCESS(TAG, err, "Failed setting parse single rep"); res = OCRepPayloadSetPropObjectAsOwner(curPayload, name, pl); } @@ -933,7 +934,6 @@ static OCStackResult OCParseRepPayload(OCPayload **outPayload, CborValue *root) VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid Parameter outPayload"); VERIFY_PARAM_NON_NULL(TAG, root, "Invalid Parameter root"); - *outPayload = NULL; if (cbor_value_is_array(root)) { @@ -980,7 +980,7 @@ static OCStackResult OCParseRepPayload(OCPayload **outPayload, CborValue *root) if (cbor_value_is_map(&rootMap)) { - err = OCParseSingleRepPayload(&temp, &rootMap); + err = OCParseSingleRepPayload(&temp, &rootMap, true); VERIFY_CBOR_SUCCESS(TAG, err, "Failed to parse single rep payload"); } if(rootPayload == NULL) -- 2.7.4