From 48114bc35a83ffb106416a5526ad23a3a8de8206 Mon Sep 17 00:00:00 2001 From: Habib Virji Date: Thu, 24 Nov 2016 11:14:26 +0000 Subject: [PATCH] Add secure and port in policy In the collection response, add secure and port information. Change-Id: Iaec8788bba04fa0a404dfb16ddf54a704493e65b Signed-off-by: Habib Virji Reviewed-on: https://gerrit.iotivity.org/gerrit/14751 Reviewed-by: Dwarkaprasad Dayama Tested-by: jenkins-iotivity Reviewed-by: Phil Coval Reviewed-by: Ziran Sun --- .../stack/include/internal/ocresourcehandler.h | 3 +-- resource/csdk/stack/src/occollection.c | 4 ++-- resource/csdk/stack/src/ocresource.c | 24 +++++++++++++++++----- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/resource/csdk/stack/include/internal/ocresourcehandler.h b/resource/csdk/stack/include/internal/ocresourcehandler.h index 60bca1b..5d2ac03 100644 --- a/resource/csdk/stack/include/internal/ocresourcehandler.h +++ b/resource/csdk/stack/include/internal/ocresourcehandler.h @@ -186,7 +186,7 @@ void DeleteDeviceInfo(); * Prepare payload for resource representation. */ OCStackResult BuildResponseRepresentation(const OCResource *resourcePtr, - OCRepPayload** payload); + OCRepPayload** payload, OCDevAddr *devAddr); /** * A helper function that Maps an @ref OCEntityHandlerResult type to an @@ -198,4 +198,3 @@ OCStackResult EntityHandlerCodeToOCStackCode(OCEntityHandlerResult ehResult); } #endif // __cplusplus #endif //OC_RESOURCEHANDLER_H - diff --git a/resource/csdk/stack/src/occollection.c b/resource/csdk/stack/src/occollection.c index f3648de..4e20bd7 100755 --- a/resource/csdk/stack/src/occollection.c +++ b/resource/csdk/stack/src/occollection.c @@ -247,7 +247,7 @@ HandleLinkedListInterface(OCEntityHandlerRequest *ehRequest, return OC_STACK_INVALID_PARAM; } - OCStackResult ret = BuildResponseRepresentation(collResource, &payload); + OCStackResult ret = BuildResponseRepresentation(collResource, &payload, &ehRequest->devAddr); if (ret == OC_STACK_OK) { tempChildResource = collResource->rsrcChildResourcesHead; @@ -258,7 +258,7 @@ HandleLinkedListInterface(OCEntityHandlerRequest *ehRequest, { //TODO : Add resource type filtering once collections // start supporting queries. - ret = BuildResponseRepresentation(temp, &payload); + ret = BuildResponseRepresentation(temp, &payload, &ehRequest->devAddr); } tempChildResource = tempChildResource->next; diff --git a/resource/csdk/stack/src/ocresource.c b/resource/csdk/stack/src/ocresource.c index 2bf6d8e..a987b29 100755 --- a/resource/csdk/stack/src/ocresource.c +++ b/resource/csdk/stack/src/ocresource.c @@ -339,7 +339,7 @@ exit: } OCStackResult BuildResponseRepresentation(const OCResource *resourcePtr, - OCRepPayload** payload) + OCRepPayload** payload, OCDevAddr *devAddr) { OCRepPayload *tempPayload = OCRepPayloadCreate(); @@ -388,9 +388,23 @@ OCStackResult BuildResponseRepresentation(const OCResource *resourcePtr, } OCResourceProperty p = OCGetResourceProperties((OCResourceHandle *)resourcePtr); - p = (OCResourceProperty) ((p & OC_DISCOVERABLE) | (p & OC_OBSERVABLE)); OCRepPayload *policy = OCRepPayloadCreate(); - OCRepPayloadSetPropInt(policy, OC_RSRVD_BITMAP, p); + if (!policy) + { + OCPayloadDestroy((OCPayload *)tempPayload); + return OC_STACK_NO_MEMORY; + } + OCRepPayloadSetPropInt(policy, OC_RSRVD_BITMAP, ((p & OC_DISCOVERABLE) | (p & OC_OBSERVABLE))); + if (p & OC_SECURE) + { + OCRepPayloadSetPropBool(policy, OC_RSRVD_SECURE, p & OC_SECURE); + uint16_t securePort = 0; + if (GetSecurePortInfo(devAddr, &securePort) != OC_STACK_OK) + { + securePort = 0; + } + OCRepPayloadSetPropInt(policy, OC_RSRVD_HOSTING_PORT, securePort); + } OCRepPayloadSetPropObjectAsOwner(tempPayload, OC_RSRVD_POLICY, policy); if(!*payload) @@ -888,13 +902,13 @@ static OCStackResult HandleVirtualResource (OCServerRequest *request, OCResource { OCResource *resourcePtr = FindResourceByUri(OC_RSRVD_DEVICE_URI); VERIFY_PARAM_NON_NULL(TAG, resourcePtr, "Device URI not found."); - discoveryResult = BuildResponseRepresentation(resourcePtr, (OCRepPayload **)&payload); + discoveryResult = BuildResponseRepresentation(resourcePtr, (OCRepPayload **)&payload, &request->devAddr); } else if (virtualUriInRequest == OC_PLATFORM_URI) { OCResource *resourcePtr = FindResourceByUri(OC_RSRVD_PLATFORM_URI); VERIFY_PARAM_NON_NULL(TAG, resourcePtr, "Platform URI not found."); - discoveryResult = BuildResponseRepresentation(resourcePtr, (OCRepPayload **)&payload); + discoveryResult = BuildResponseRepresentation(resourcePtr, (OCRepPayload **)&payload, &request->devAddr); } #ifdef ROUTING_GATEWAY else if (OC_GATEWAY_URI == virtualUriInRequest) -- 2.7.4