From 7835dbac72ce84c508726236db92bef85618b1b7 Mon Sep 17 00:00:00 2001 From: Mandeep Shetty Date: Tue, 19 May 2015 17:08:42 -0700 Subject: [PATCH] Removed duplicate switch case in OCDoResource. There were two separate switch statements for validation and converting to CA method. Moved it to one. Also improved logging, variable names and vertical spacing in some sections. Change-Id: Ic68253dd23e5da15d469951293fc4173a13f7afd Signed-off-by: Mandeep Shetty Reviewed-on: https://gerrit.iotivity.org/gerrit/1045 Tested-by: jenkins-iotivity Reviewed-by: Doug Hudson Reviewed-by: Erich Keane --- resource/csdk/stack/src/ocobserve.c | 33 +++++++++------ resource/csdk/stack/src/ocstack.c | 82 +++++++++++++++---------------------- 2 files changed, 53 insertions(+), 62 deletions(-) diff --git a/resource/csdk/stack/src/ocobserve.c b/resource/csdk/stack/src/ocobserve.c index e7214c1..654078d 100644 --- a/resource/csdk/stack/src/ocobserve.c +++ b/resource/csdk/stack/src/ocobserve.c @@ -161,8 +161,10 @@ OCStackResult SendAllObserverNotification (OCMethod method, OCResource *resPtr, { OCEntityHandlerResponse ehResponse = {}; char presenceResBuf[MAX_RESPONSE_LENGTH] = {}; + //This is effectively the implementation for the presence entity handler. OC_LOG(DEBUG, TAG, PCF("This notification is for Presence")); + result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET, 0, resPtr->sequenceNum, qos, resourceObserver->query, NULL, NULL, @@ -228,7 +230,7 @@ OCStackResult SendListObserverNotification (OCResource * resource, } uint8_t numIds = numberOfIds; - ResourceObserver *observation = NULL; + ResourceObserver *observer = NULL; uint8_t numSentNotification = 0; OCServerRequest * request = NULL; OCStackResult result = OC_STACK_ERROR; @@ -237,21 +239,20 @@ OCStackResult SendListObserverNotification (OCResource * resource, OC_LOG(INFO, TAG, PCF("Entering SendListObserverNotification")); while(numIds) { - OC_LOG_V(INFO, TAG, "Need to notify observation id %d", *obsIdList); - observation = GetObserverUsingId (*obsIdList); - if(observation) + observer = GetObserverUsingId (*obsIdList); + if(observer) { - // Found observation - verify if it matches the resource handle - if (observation->resource == resource) + // Found observer - verify if it matches the resource handle + if (observer->resource == resource) { - qos = DetermineObserverQoS(OC_REST_GET, observation, qos); + qos = DetermineObserverQoS(OC_REST_GET, observer, qos); result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET, - 0, resource->sequenceNum, qos, observation->query, - NULL, NULL, observation->token, observation->tokenLength, - observation->resUri, 0, - &(observation->addressInfo), observation->connectivityType); + 0, resource->sequenceNum, qos, observer->query, + NULL, NULL, observer->token, observer->tokenLength, + observer->resUri, 0, + &(observer->addressInfo), observer->connectivityType); if(request) { @@ -275,12 +276,18 @@ OCStackResult SendListObserverNotification (OCResource * resource, result = OCDoResponse(&ehResponse); if(result == OC_STACK_OK) { - // Increment sent notifications only if OCDoResponse is successful + OC_LOG_V(INFO, TAG, "Observer id %d notified.", *obsIdList); + + // Increment only if OCDoResponse is successful numSentNotification++; OCFree(ehResponse.payload); FindAndDeleteServerRequest(request); } + else + { + OC_LOG_V(INFO, TAG, "Error notifying observer id %d.", *obsIdList); + } } else { @@ -328,7 +335,7 @@ OCStackResult GenerateObserverId (OCObservationId *observationId) resObs = GetObserverUsingId (*observationId); } while (NULL != resObs); - OC_LOG_V(INFO, TAG, "Observation ID is %u", *observationId); + OC_LOG_V(INFO, TAG, "Generated bservation ID is %u", *observationId); return OC_STACK_OK; exit: diff --git a/resource/csdk/stack/src/ocstack.c b/resource/csdk/stack/src/ocstack.c index ca03a40..2ccd77a 100644 --- a/resource/csdk/stack/src/ocstack.c +++ b/resource/csdk/stack/src/ocstack.c @@ -1881,8 +1881,6 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ CARequestInfo_t requestInfo ={}; CAGroupEndpoint_t grpEnd = {}; - // To track if memory is allocated for additional header options - OC_LOG(INFO, TAG, PCF("Entering OCDoResource")); // Validate input parameters @@ -1899,17 +1897,32 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ switch (method) { case OC_REST_GET: - case OC_REST_PUT: - case OC_REST_POST: - case OC_REST_DELETE: case OC_REST_OBSERVE: case OC_REST_OBSERVE_ALL: case OC_REST_CANCEL_OBSERVE: + requestInfo.method = CA_GET; break; + + case OC_REST_PUT: + requestInfo.method = CA_PUT; + break; + + case OC_REST_POST: + requestInfo.method = CA_POST; + break; + + case OC_REST_DELETE: + requestInfo.method = CA_DELETE; + break; + #ifdef WITH_PRESENCE case OC_REST_PRESENCE: + // Replacing method type with GET because "presence" + // is a stack layer only implementation. + requestInfo.method = CA_GET; break; #endif + default: result = OC_STACK_INVALID_METHOD; goto exit; @@ -1980,45 +1993,6 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ goto exit; } - switch (method) - { - case OC_REST_GET: - case OC_REST_OBSERVE: - case OC_REST_OBSERVE_ALL: - case OC_REST_CANCEL_OBSERVE: - { - requestInfo.method = CA_GET; - break; - } - case OC_REST_PUT: - { - requestInfo.method = CA_PUT; - break; - } - case OC_REST_POST: - { - requestInfo.method = CA_POST; - break; - } - case OC_REST_DELETE: - { - requestInfo.method = CA_DELETE; - break; - } - #ifdef WITH_PRESENCE - case OC_REST_PRESENCE: - { - // Replacing method type with GET because "presence" - // is a stack layer only implementation. - requestInfo.method = CA_GET; - break; - } - #endif - default: - result = OC_STACK_INVALID_METHOD; - goto exit; - } - // create token caResult = CAGenerateToken(&token, tokenLength); if (caResult != CA_STATUS_OK) @@ -2030,8 +2004,10 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ } requestData.type = qualityOfServiceToMessageType(qos); + requestData.token = token; requestData.tokenLength = tokenLength; + if ((method == OC_REST_OBSERVE) || (method == OC_REST_OBSERVE_ALL)) { result = CreateObserveHeaderOption (&(requestData.options), options, @@ -2048,9 +2024,11 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ requestData.options = (CAHeaderOption_t*)options; requestData.numOptions = numOptions; } + requestData.payload = (char *)request; requestInfo.info = requestData; + CATransportType_t caConType; result = OCToCATransportType((OCConnectivityType) conType, &caConType); @@ -2120,7 +2098,7 @@ exit: } if (result != OC_STACK_OK) { - OC_LOG(ERROR, TAG, PCF("OCDoResource error")); + OC_LOG_V(ERROR, TAG, PCF("OCDoResource error no %d"), result); FindAndDeleteClientCB(clientCB); OCFree(resHandle); OCFree(requestUri); @@ -2180,13 +2158,13 @@ OCStackResult OCCancel(OCDoHandle handle, OCQualityOfService qos, OCHeaderOption { case OC_REST_OBSERVE: case OC_REST_OBSERVE_ALL: - OC_LOG(INFO, TAG, PCF("Canceling observation")); if(qos == OC_HIGH_QOS) { requestData.type = qualityOfServiceToMessageType(qos); requestData.token = clientCB->token; requestData.tokenLength = clientCB->tokenLength; - if (CreateObserveHeaderOption (&(requestData.options), + + if (CreateObserveHeaderOption (&(requestData.options), options, numOptions, OC_OBSERVE_DEREGISTER) != OC_STACK_OK) { return OC_STACK_ERROR; @@ -2218,13 +2196,14 @@ OCStackResult OCCancel(OCDoHandle handle, OCQualityOfService qos, OCHeaderOption OC_LOG(ERROR, TAG, PCF("CASendRequest error")); ret = OC_STACK_ERROR; } - ret = CAResultToOCResult (caResult); + ret = CAResultToOCResult (caResult); } else { FindAndDeleteClientCB(clientCB); } break; + #ifdef WITH_PRESENCE case OC_REST_PRESENCE: FindAndDeleteClientCB(clientCB); @@ -2235,6 +2214,11 @@ OCStackResult OCCancel(OCDoHandle handle, OCQualityOfService qos, OCHeaderOption break; } } + else + { + OC_LOG(ERROR, TAG, PCF("Client callback not found. Called OCCancel twice?")); + } + Error: CADestroyRemoteEndpoint(endpoint); if (requestData.numOptions > 0) @@ -2358,7 +2342,7 @@ OCStackResult OCProcessPresence() exit: if (result != OC_STACK_OK) { - OC_LOG(ERROR, TAG, PCF("OCProcessPresence error")); + OC_LOG_V(ERROR, TAG, PCF("OCProcessPresence error no %d"), result); } return result; } -- 2.7.4