From: Habib Virji Date: Mon, 14 Nov 2016 22:13:53 +0000 (+0000) Subject: Fix Discovery issue with OCResource X-Git-Tag: 1.2.1~149 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a9e5b349d2740477187ed5969dd1b6b7c0313f45;p=platform%2Fupstream%2Fiotivity.git Fix Discovery issue with OCResource Fix memory allocation and handling response as introduced in the change for issue 1134. Change-Id: Ieebd1dde50d87e05f9e7ea0cec04af398cabe3ef Signed-off-by: Habib Virji Reviewed-on: https://gerrit.iotivity.org/gerrit/14295 Reviewed-by: Uze Choi Tested-by: jenkins-iotivity --- diff --git a/resource/csdk/stack/src/ocresource.c b/resource/csdk/stack/src/ocresource.c index 5e0cbe4..af9ca53 100755 --- a/resource/csdk/stack/src/ocresource.c +++ b/resource/csdk/stack/src/ocresource.c @@ -51,7 +51,7 @@ #include "cainterface.h" #include "ocpayload.h" #include "platform_features.h" - +#include "payload_logging.h" #ifdef ROUTING_GATEWAY #include "routingmanager.h" #endif @@ -700,22 +700,22 @@ static OCStackResult findResourceAtRD(const OCResource* resource, const char *in * * @param payload payload that will have memory alllocated and device id information added. * - * @return The memory allocated of the payload. If already allocated it will return same payload. If - * failed allocated memory then NULL. + * @return ::OC_STACK_OK if successful in allocating memory and adding ID information. + * ::OC_STACK_NO_MEMORY if failed allocating the memory. */ -static OCDiscoveryPayload* discoveryPayloadCreateAndAddDeviceId(OCPayload *payload) +static OCStackResult discoveryPayloadCreateAndAddDeviceId(OCPayload **payload) { - if (payload) + if (*payload) { - OIC_LOG_V(ERROR, TAG, "Discovery payload is already allocated."); - return ((OCDiscoveryPayload *)payload); + OIC_LOG_V(DEBUG, TAG, "Payload is already allocated"); + return OC_STACK_OK; } - payload = (OCPayload *)OCDiscoveryPayloadCreate(); - VERIFY_PARAM_NON_NULL(TAG, payload, "Failed creating Discovery Payload."); + *payload = (OCPayload *) OCDiscoveryPayloadCreate(); + VERIFY_PARAM_NON_NULL(TAG, *payload, "Failed adding device id to discovery payload."); { - OCDiscoveryPayload *discPayload = (OCDiscoveryPayload *)payload; + OCDiscoveryPayload *discPayload = (OCDiscoveryPayload *)*payload; discPayload->sid = (char *)OICCalloc(1, UUID_STRING_SIZE); VERIFY_PARAM_NON_NULL(TAG, discPayload->sid, "Failed adding device id to discovery payload."); @@ -725,11 +725,11 @@ static OCDiscoveryPayload* discoveryPayloadCreateAndAddDeviceId(OCPayload *paylo memcpy(discPayload->sid, uid, UUID_STRING_SIZE); } - return discPayload; } + return OC_STACK_OK; exit: - OCPayloadDestroy(payload); - return NULL; + OCPayloadDestroy(*payload); + return OC_STACK_NO_MEMORY; } /** @@ -815,9 +815,11 @@ static OCStackResult HandleVirtualResource (OCServerRequest *request, OCResource } if (interfaceQuery) { - OCDiscoveryPayload *discPayload = discoveryPayloadCreateAndAddDeviceId(payload); - VERIFY_PARAM_NON_NULL(TAG, discPayload, "Failed creating discovery payload."); + discoveryResult = discoveryPayloadCreateAndAddDeviceId(&payload); + VERIFY_PARAM_NON_NULL(TAG, payload, "Failed creating Discovery Payload."); + VERIFY_SUCCESS(discoveryResult, OC_STACK_OK); + OCDiscoveryPayload *discPayload = (OCDiscoveryPayload *)payload; if (baselineQuery) { discoveryResult = addDiscoveryBaselineCommonProperties(discPayload); @@ -840,6 +842,10 @@ static OCStackResult HandleVirtualResource (OCServerRequest *request, OCResource discoveryResult = BuildVirtualResourceResponse(resource, discPayload, &request->devAddr); } + else + { + discoveryResult = OC_STACK_OK; + } } } if (discPayload->resources == NULL) @@ -942,6 +948,7 @@ static OCStackResult HandleVirtualResource (OCServerRequest *request, OCResource if (OC_KEEPALIVE_RESOURCE_URI != virtualUriInRequest) #endif { + OIC_LOG_PAYLOAD(DEBUG, payload); if(discoveryResult == OC_STACK_OK) { SendNonPersistantDiscoveryResponse(request, resource, payload, OC_EH_OK);