summaryrefslogtreecommitdiff
path: root/resource/csdk/stack
diff options
context:
space:
mode:
authorTodd Malsbary <todd.malsbary@intel.com>2017-04-18 13:28:21 -0700
committerUze Choi <uzchoi@samsung.com>2017-04-28 06:00:55 +0000
commit63c17fd1d63e63f2e05a84a2dd7c114223c8c5fb (patch)
treea151ed906d88de6b7a7a6e4d3037746704df51d7 /resource/csdk/stack
parent501edd6270e22a127833d3b275acee5ee22ae9e5 (diff)
downloadiotivity-63c17fd1d63e63f2e05a84a2dd7c114223c8c5fb.tar.gz
iotivity-63c17fd1d63e63f2e05a84a2dd7c114223c8c5fb.tar.bz2
iotivity-63c17fd1d63e63f2e05a84a2dd7c114223c8c5fb.zip
[IOT-2056] Align baseline /oic/res response with spec.
This only applies to the application/vnd.ocf+cbor content format. - Response type is array, not object. - "di" is not part of baseline properties. Bug: https://jira.iotivity.org/browse/IOT-2056 Change-Id: I27a890509e888e82879afe87801249dc13c1c862 Signed-off-by: Todd Malsbary <todd.malsbary@intel.com> Reviewed-on: https://gerrit.iotivity.org/gerrit/19077 Tested-by: jenkins-iotivity <jenkins@iotivity.org> Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com> Reviewed-by: Rick Bell <richard.s.bell@intel.com> Reviewed-by: Mushfiqul Islam <i.mushfiq@samsung.com> Reviewed-by: Uze Choi <uzchoi@samsung.com> Tested-by: Uze Choi <uzchoi@samsung.com>
Diffstat (limited to 'resource/csdk/stack')
-rwxr-xr-xresource/csdk/stack/src/ocpayloadconvert.c20
-rwxr-xr-xresource/csdk/stack/src/ocpayloadparse.c389
2 files changed, 208 insertions, 201 deletions
diff --git a/resource/csdk/stack/src/ocpayloadconvert.c b/resource/csdk/stack/src/ocpayloadconvert.c
index ba0a4fdef..1d261b459 100755
--- a/resource/csdk/stack/src/ocpayloadconvert.c
+++ b/resource/csdk/stack/src/ocpayloadconvert.c
@@ -494,13 +494,18 @@ static int64_t OCConvertDiscoveryPayloadVndOcfCbor(OCDiscoveryPayload *payload,
]
*/
+ CborEncoder rootArray;
CborEncoder rootMap;
CborEncoder linkArray;
bool isBaseline = payload->name || payload->type || payload->iface;
if (isBaseline)
{
+ // Open the root array
+ err |= cbor_encoder_create_array(&encoder, &rootArray, 1);
+ VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating discovery root array");
+
// Open the root map
- err |= cbor_encoder_create_map(&encoder, &rootMap, CborIndefiniteLength);
+ err |= cbor_encoder_create_map(&rootArray, &rootMap, CborIndefiniteLength);
VERIFY_CBOR_SUCCESS(TAG, err, "Failed creating discovery map");
// Insert Name
@@ -508,11 +513,6 @@ static int64_t OCConvertDiscoveryPayloadVndOcfCbor(OCDiscoveryPayload *payload,
sizeof(OC_RSRVD_DEVICE_NAME) - 1, payload->name);
VERIFY_CBOR_SUCCESS(TAG, err, "Failed setting name");
- // Insert Device ID into the root map
- err |= AddTextStringToMap(&rootMap, OC_RSRVD_DEVICE_ID, sizeof(OC_RSRVD_DEVICE_ID) - 1,
- payload->sid);
- VERIFY_CBOR_SUCCESS(TAG, err, "Failed setting device id");
-
// Insert Resource Type
err |= OCStringLLJoin(&rootMap, OC_RSRVD_RESOURCE_TYPE, payload->type);
VERIFY_CBOR_SUCCESS(TAG, err, "Failed setting RT");
@@ -657,12 +657,16 @@ static int64_t OCConvertDiscoveryPayloadVndOcfCbor(OCDiscoveryPayload *payload,
if (isBaseline)
{
- // Close the final root array.
+ // Close the link array instead the root map.
err |= cbor_encoder_close_container(&rootMap, &linkArray);
VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing root array");
// Close root map inside the root array.
- err |= cbor_encoder_close_container(&encoder, &rootMap);
+ err |= cbor_encoder_close_container(&rootArray, &rootMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing root map");
+
+ // Close the final root array.
+ err |= cbor_encoder_close_container(&encoder, &rootArray);
VERIFY_CBOR_SUCCESS(TAG, err, "Failed closing root map");
}
else
diff --git a/resource/csdk/stack/src/ocpayloadparse.c b/resource/csdk/stack/src/ocpayloadparse.c
index 68ed73bb9..9fdb003ec 100755
--- a/resource/csdk/stack/src/ocpayloadparse.c
+++ b/resource/csdk/stack/src/ocpayloadparse.c
@@ -401,243 +401,248 @@ exit:
return ret;
}
-static OCStackResult OCParseDiscoveryPayloadVndOcfCbor(OCPayload **outPayload, CborValue *rootValue)
+static CborError ParseResources(OCDiscoveryPayload **outPayload, CborValue *resourceMap)
{
- OCStackResult ret = OC_STACK_INVALID_PARAM;
OCResourcePayload *resource = NULL;
- OCDiscoveryPayload *rootPayload = NULL;
- OCEndpointPayload *endpoint = NULL;
- size_t len = 0;
CborError err = CborNoError;
- CborValue linkMap;
- CborValue *linkArray = NULL;
- *outPayload = NULL;
+ size_t len = 0;
+ OCEndpointPayload *endpoint = NULL;
- VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid Parameter outPayload");
- VERIFY_PARAM_NON_NULL(TAG, rootValue, "Invalid Parameter rootValue");
- if (cbor_value_is_map(rootValue))
+ // Iterate through the array processing each resource which shows up as a map.
+ while (cbor_value_is_map(resourceMap))
{
- rootPayload = OCDiscoveryPayloadCreate();
- VERIFY_PARAM_NON_NULL(TAG, rootPayload, "Failed error initializing discovery payload");
+ int bitmap;
+
+ resource = (OCResourcePayload *)OICCalloc(1, sizeof(OCResourcePayload));
+ VERIFY_PARAM_NON_NULL(TAG, resource, "Failed allocating resource payload");
- // Look for DI
+ // Uri
CborValue curVal;
- err = cbor_value_map_find_value(rootValue, OC_RSRVD_DEVICE_ID, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find device id tag");
+ err = cbor_value_map_find_value(resourceMap, OC_RSRVD_HREF, &curVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find href tag");
+ err = cbor_value_dup_text_string(&curVal, &(resource->uri), &len, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find href value");
+
+ // Rel - Not a mandatory field
+ err = cbor_value_map_find_value(resourceMap, OC_RSRVD_REL, &curVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find rel tag");
if (cbor_value_is_valid(&curVal))
{
- if (cbor_value_is_byte_string(&curVal))
- {
- err = cbor_value_dup_byte_string(&curVal, (uint8_t **)&(rootPayload->sid), &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to copy device id value");
- }
- else if (cbor_value_is_text_string(&curVal))
- {
- err = cbor_value_dup_text_string(&curVal, &(rootPayload->sid), &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to copy device id value");
- }
+ err = cbor_value_dup_text_string(&curVal, &(resource->rel), &len, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find rel value");
}
- // RT - Not a mandatory field
- err = cbor_value_map_find_value(rootValue, OC_RSRVD_RESOURCE_TYPE, &curVal);
- if (cbor_value_is_valid(&curVal))
+ // Anchor - Not a mandatory field
+ err = cbor_value_map_find_value(resourceMap, OC_RSRVD_URI, &curVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find anchor tag");
+ if (cbor_value_is_text_string(&curVal))
{
- err = OCParseStringLL(rootValue, OC_RSRVD_RESOURCE_TYPE, &rootPayload->type);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find resource type");
+ err = cbor_value_dup_text_string(&curVal, &(resource->anchor), &len, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find anchor value");
}
- // IF - Not a mandatory field
- err = cbor_value_map_find_value(rootValue, OC_RSRVD_INTERFACE, &curVal);
- if (cbor_value_is_valid(&curVal))
- {
- err = OCParseStringLL(rootValue, OC_RSRVD_INTERFACE, &rootPayload->iface);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find interface");
- }
+ // Resource Types
+ err = OCParseStringLL(resourceMap, OC_RSRVD_RESOURCE_TYPE, &resource->types);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find resource type tag/value");
- // Name - Not a mandatory field
- err = cbor_value_map_find_value(rootValue, OC_RSRVD_DEVICE_NAME, &curVal);
- if (cbor_value_is_text_string(&curVal))
+ // Interface Types
+ err = OCParseStringLL(resourceMap, OC_RSRVD_INTERFACE, &resource->interfaces);
+ if (CborNoError != err)
{
- err = cbor_value_dup_text_string(&curVal, &rootPayload->name, &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find device name");
+ if (!OCResourcePayloadAddStringLL(&resource->interfaces, OC_RSRVD_INTERFACE_LL))
+ {
+ OIC_LOG(ERROR, TAG, "Failed to add string to StringLL");
+ goto exit;
+ }
}
- // Look for Links which will have an array as the value
- err = cbor_value_map_find_value(rootValue, OC_RSRVD_LINKS, &linkMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find links tag");
- linkArray = &linkMap;
- }
- else
- {
- linkArray = rootValue;
- }
+ // Policy
+ CborValue policyMap;
+ err = cbor_value_map_find_value(resourceMap, OC_RSRVD_POLICY, &policyMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find policy tag");
- if (cbor_value_is_array(linkArray))
- {
- // Root value is already inside the main root array
+ // Bitmap
+ err = cbor_value_map_find_value(&policyMap, OC_RSRVD_BITMAP, &curVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find bitmap tag");
+ err = cbor_value_get_int(&curVal, &bitmap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find bitmap value");
+ resource->bitmap = (uint8_t)bitmap;
- // Enter the main root array and start iterating through the array processing
- // each resource which shows up as a map.
- CborValue resourceMap;
- err = cbor_value_enter_container(linkArray, &resourceMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to enter root array");
+ // Endpoints
+ CborValue epsMap;
+ err = cbor_value_map_find_value(resourceMap, OC_RSRVD_ENDPOINTS, &epsMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find eps tag");
- while (cbor_value_is_map(&resourceMap))
+ if (cbor_value_is_array(&epsMap))
{
- int bitmap;
-
- resource = (OCResourcePayload *)OICCalloc(1, sizeof(OCResourcePayload));
- VERIFY_PARAM_NON_NULL(TAG, resource, "Failed allocating resource payload");
-
- // Uri
- CborValue curVal;
- err = cbor_value_map_find_value(&resourceMap, OC_RSRVD_HREF, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find href tag");
- err = cbor_value_dup_text_string(&curVal, &(resource->uri), &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find href value");
+ CborValue epMap;
+ err = cbor_value_enter_container(&epsMap, &epMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to enter endpoint map");
- // Rel - Not a mandatory field
- err = cbor_value_map_find_value(&resourceMap, OC_RSRVD_REL, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find rel tag");
- if (cbor_value_is_valid(&curVal))
+ while (cbor_value_is_map(&epMap))
{
- err = cbor_value_dup_text_string(&curVal, &(resource->rel), &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find rel value");
- }
+ endpoint = NULL;
+ int pri = 0;
+ char *endpointStr = NULL;
+ endpoint = (OCEndpointPayload *)OICCalloc(1, sizeof(OCEndpointPayload));
+ VERIFY_PARAM_NON_NULL(TAG, endpoint, "Failed allocating endpoint payload");
+
+ // ep
+ err = cbor_value_map_find_value(&epMap, OC_RSRVD_ENDPOINT, &curVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find endpoint tag");
+ err = cbor_value_dup_text_string(&curVal, &endpointStr, &len, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find endpoint value");
+
+ OCStackResult parseResult = OCParseEndpointString(endpointStr, endpoint);
+ OICFree(endpointStr);
+
+ if (OC_STACK_OK == parseResult)
+ {
+ // pri
+ err = cbor_value_map_find_value(&epMap, OC_RSRVD_PRIORITY, &curVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find priority tag");
+ err = cbor_value_get_int(&curVal, &pri);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find priority value");
+ endpoint->pri = (uint16_t)pri;
+ OCResourcePayloadAddNewEndpoint(resource, endpoint);
+ endpoint = NULL;
+ }
+ else
+ {
+ if (OC_STACK_ADAPTER_NOT_ENABLED == parseResult)
+ {
+ OIC_LOG(ERROR, TAG, "Ignore unrecognized endpoint info");
+ }
+ // destroy endpoint
+ OCDiscoveryEndpointDestroy(endpoint);
+ endpoint = NULL;
+ }
- // Anchor - Not a mandatory field
- err = cbor_value_map_find_value(&resourceMap, OC_RSRVD_URI, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find anchor tag");
- if (cbor_value_is_text_string(&curVal))
- {
- err = cbor_value_dup_text_string(&curVal, &(resource->anchor), &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find anchor value");
+ err = cbor_value_advance(&epMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to advance endpoint map");
}
- // Resource Types
- err = OCParseStringLL(&resourceMap, OC_RSRVD_RESOURCE_TYPE, &resource->types);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find resource type tag/value");
+ err = cbor_value_leave_container(&epsMap, &epMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to leave eps map");
+ }
+
+ err = cbor_value_advance(resourceMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to advance resource map");
- // Interface Types
- err = OCParseStringLL(&resourceMap, OC_RSRVD_INTERFACE, &resource->interfaces);
- if (CborNoError != err)
+ // Parse di from anchor
+ if (!resource->anchor || strncmp(resource->anchor, "ocf://", 6))
+ {
+ OIC_LOG_V(ERROR, TAG, "Ignore unrecognized anchor %s", resource->anchor);
+ OCDiscoveryResourceDestroy(resource);
+ }
+ else
+ {
+ char *di = OICStrdup(resource->anchor + 6);
+ char *slash = strchr(di, '/');
+ if (slash)
+ {
+ *slash = '\0';
+ }
+ OCDiscoveryPayload **temp = outPayload;
+ while (*temp)
{
- if (!OCResourcePayloadAddStringLL(&resource->interfaces, OC_RSRVD_INTERFACE_LL))
+ if (!(*temp)->sid)
{
- OIC_LOG(ERROR, TAG, "Failed to add string to StringLL");
- goto exit;
+ (*temp)->sid = di;
+ OCDiscoveryPayloadAddNewResource(*temp, resource);
+ break;
+ }
+ else if (!strcmp((*temp)->sid, di))
+ {
+ OCDiscoveryPayloadAddNewResource(*temp, resource);
+ OICFree(di);
+ break;
}
+ temp = &(*temp)->next;
+ }
+ if (!*temp)
+ {
+ *temp = OCDiscoveryPayloadCreate();
+ VERIFY_PARAM_NON_NULL(TAG, *temp, "Failed error initializing discovery payload");
+ (*temp)->sid = di;
+ OCDiscoveryPayloadAddNewResource(*temp, resource);
}
+ }
+ }
+exit:
+ if (CborNoError != err)
+ {
+ OCDiscoveryResourceDestroy(resource);
+ OCDiscoveryEndpointDestroy(endpoint);
+ }
+ return err;
+}
- // Policy
- CborValue policyMap;
- err = cbor_value_map_find_value(&resourceMap, OC_RSRVD_POLICY, &policyMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find policy tag");
+static OCStackResult OCParseDiscoveryPayloadVndOcfCbor(OCPayload **outPayload, CborValue *rootValue)
+{
+ OCStackResult ret = OC_STACK_INVALID_PARAM;
+ OCDiscoveryPayload *rootPayload = NULL;
+ CborError err = CborNoError;
+ size_t len = 0;
+ *outPayload = NULL;
- // Bitmap
- err = cbor_value_map_find_value(&policyMap, OC_RSRVD_BITMAP, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find bitmap tag");
- err = cbor_value_get_int(&curVal, &bitmap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find bitmap value");
- resource->bitmap = (uint8_t)bitmap;
+ VERIFY_PARAM_NON_NULL(TAG, outPayload, "Invalid Parameter outPayload");
+ VERIFY_PARAM_NON_NULL(TAG, rootValue, "Invalid Parameter rootValue");
+ if (cbor_value_is_array(rootValue))
+ {
+ // Root value is already inside the main root array
- // Endpoints
- CborValue epsMap;
- err = cbor_value_map_find_value(&resourceMap, OC_RSRVD_ENDPOINTS, &epsMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find eps tag");
+ CborValue rootMap;
+ err = cbor_value_enter_container(rootValue, &rootMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to enter root array");
- if (cbor_value_is_array(&epsMap))
- {
- CborValue epMap;
- err = cbor_value_enter_container(&epsMap, &epMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to enter endpoint map");
+ // Look for Links which will have an array as the value
+ CborValue linkVal;
+ err = cbor_value_map_find_value(&rootMap, OC_RSRVD_LINKS, &linkVal);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find links tag");
+ if (cbor_value_is_array(&linkVal))
+ {
+ rootPayload = OCDiscoveryPayloadCreate();
+ VERIFY_PARAM_NON_NULL(TAG, rootPayload, "Failed error initializing discovery payload");
- while (cbor_value_is_map(&epMap))
- {
- endpoint = NULL;
- int pri = 0;
- char *endpointStr = NULL;
- endpoint = (OCEndpointPayload *)OICCalloc(1, sizeof(OCEndpointPayload));
- VERIFY_PARAM_NON_NULL(TAG, endpoint, "Failed allocating endpoint payload");
+ // RT
+ err = OCParseStringLL(&rootMap, OC_RSRVD_RESOURCE_TYPE, &rootPayload->type);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find resource type");
- // ep
- err = cbor_value_map_find_value(&epMap, OC_RSRVD_ENDPOINT, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find endpoint tag");
- err = cbor_value_dup_text_string(&curVal, &endpointStr, &len, NULL);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find endpoint value");
+ // IF
+ err = OCParseStringLL(&rootMap, OC_RSRVD_INTERFACE, &rootPayload->iface);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find interface");
- OCStackResult parseResult = OCParseEndpointString(endpointStr, endpoint);
- OICFree(endpointStr);
+ // Name - Not a mandatory field
+ CborValue curVal;
+ err = cbor_value_map_find_value(&rootMap, OC_RSRVD_DEVICE_NAME, &curVal);
+ if (cbor_value_is_text_string(&curVal))
+ {
+ err = cbor_value_dup_text_string(&curVal, &rootPayload->name, &len, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to find device name");
+ }
- if (OC_STACK_OK == parseResult)
- {
- // pri
- err = cbor_value_map_find_value(&epMap, OC_RSRVD_PRIORITY, &curVal);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find priority tag");
- err = cbor_value_get_int(&curVal, &pri);
- VERIFY_CBOR_SUCCESS(TAG, err, "to find priority value");
- endpoint->pri = (uint16_t)pri;
- OCResourcePayloadAddNewEndpoint(resource, endpoint);
- endpoint = NULL;
- }
- else
- {
- if (OC_STACK_ADAPTER_NOT_ENABLED == parseResult)
- {
- OIC_LOG(ERROR, TAG, "Ignore unrecognized endpoint info");
- }
- // destroy endpoint
- OCDiscoveryEndpointDestroy(endpoint);
- endpoint = NULL;
- }
+ // Links
+ CborValue linkMap;
+ err = cbor_value_enter_container(&linkVal, &linkMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to enter resource map");
- err = cbor_value_advance(&epMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to advance endpoint map");
- }
+ err = ParseResources(&rootPayload, &linkMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to parse resources");
- err = cbor_value_leave_container(&epsMap, &epMap);
- VERIFY_CBOR_SUCCESS(TAG, err, "to leave eps map");
- }
+ err = cbor_value_leave_container(&linkVal, &linkMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to leave resource map");
- err = cbor_value_advance(&resourceMap);
+ err = cbor_value_advance(&rootMap);
VERIFY_CBOR_SUCCESS(TAG, err, "to advance resource map");
-
- // Parse di from anchor
- if (!resource->anchor || strncmp(resource->anchor, "ocf://", 6))
- {
- OIC_LOG_V(ERROR, TAG, "Ignore unrecognized anchor %s", resource->anchor);
- OCDiscoveryResourceDestroy(resource);
- }
- else
- {
- char *di = OICStrdup(resource->anchor + 6);
- char *slash = strchr(di, '/');
- if (slash)
- {
- *slash = '\0';
- }
- OCDiscoveryPayload **temp = &rootPayload;
- while (*temp)
- {
- if (!strcmp((*temp)->sid, di))
- {
- OCDiscoveryPayloadAddNewResource(*temp, resource);
- OICFree(di);
- break;
- }
- temp = &(*temp)->next;
- }
- if (!*temp)
- {
- *temp = OCDiscoveryPayloadCreate();
- VERIFY_PARAM_NON_NULL(TAG, *temp, "Failed error initializing discovery payload");
- (*temp)->sid = di;
- OCDiscoveryPayloadAddNewResource(*temp, resource);
- }
- }
+ }
+ else
+ {
+ err = ParseResources(&rootPayload, &rootMap);
+ VERIFY_CBOR_SUCCESS(TAG, err, "to parse resources");
}
- err = cbor_value_leave_container(linkArray, &resourceMap);
+ err = cbor_value_leave_container(rootValue, &rootMap);
VERIFY_CBOR_SUCCESS(TAG, err, "to leave resource map");
}
else
@@ -652,8 +657,6 @@ static OCStackResult OCParseDiscoveryPayloadVndOcfCbor(OCPayload **outPayload, C
return OC_STACK_OK;
exit:
- OCDiscoveryEndpointDestroy(endpoint);
- OCDiscoveryResourceDestroy(resource);
OCDiscoveryPayloadDestroy(rootPayload);
return ret;
}