X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Fsrc%2Focserverrequest.c;h=46afb69b70fcd193418d6a67f10dd79c09912682;hb=refs%2Ftags%2Fsubmit%2Ftizen_4.0%2F20171010.021147;hp=3be4a73ca51ff42ebe31392953d3a1b38aec2065;hpb=c0445e36283e4dea3f0a700288037113ad1d5390;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/src/ocserverrequest.c b/resource/csdk/stack/src/ocserverrequest.c index 3be4a73..46afb69 100644 --- a/resource/csdk/stack/src/ocserverrequest.c +++ b/resource/csdk/stack/src/ocserverrequest.c @@ -36,8 +36,8 @@ #include "cacommon.h" #include "cainterface.h" -#include "utlist.h" -#include "pdu.h" +#include +#include // Module Name #define VERIFY_NON_NULL(arg) { if (!arg) {OIC_LOG(FATAL, TAG, #arg " is NULL"); goto exit;} } @@ -211,7 +211,7 @@ OCServerRequest * GetServerRequestUsingToken (const CAToken_t token, uint8_t tok return out; } } - OIC_LOG(ERROR, TAG, "Server Request not found!!"); + OIC_LOG(INFO, TAG, "Server Request not found!!"); return NULL; } @@ -222,12 +222,12 @@ OCServerRequest * GetServerRequestUsingToken (const CAToken_t token, uint8_t tok * @return * OCServerRequest* */ -OCServerRequest * GetServerRequestUsingHandle (const OCServerRequest * handle) +OCServerRequest * GetServerRequestUsingHandle (const OCRequestHandle handle) { OCServerRequest * out = NULL; LL_FOREACH (serverRequestList, out) { - if(out == handle) + if(out->requestId == handle) { return out; } @@ -244,7 +244,7 @@ OCServerRequest * GetServerRequestUsingHandle (const OCServerRequest * handle) * @return * OCServerResponse* */ -OCServerResponse * GetServerResponseUsingHandle (const OCServerRequest * handle) +OCServerResponse * GetServerResponseUsingHandle (const OCRequestHandle handle) { OCServerResponse * out = NULL; LL_FOREACH (serverResponseList, out) @@ -254,7 +254,7 @@ OCServerResponse * GetServerResponseUsingHandle (const OCServerRequest * handle) return out; } } - OIC_LOG(ERROR, TAG, "Server Response not found!!"); + OIC_LOG(INFO, TAG, "Server Response not found!!"); return NULL; } @@ -293,6 +293,7 @@ OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID, serverRequest->acceptFormat = acceptFormat; serverRequest->ehResponseHandler = HandleSingleResponse; serverRequest->numResponses = 1; + serverRequest->requestId = OCGetRandom(); if(query) { @@ -306,7 +307,7 @@ OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID, } if(payload && reqTotalSize) { - // destination is at least 1 greater than the source, so a NULL always exists in the + // destination is at least 1 greater than the source, so a NULL always exists in the // last character memcpy(serverRequest->payload, payload, reqTotalSize); serverRequest->payloadSize = reqTotalSize; @@ -315,15 +316,14 @@ OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID, serverRequest->requestComplete = 0; if(requestToken) { - // If tokenLength is zero, the return value depends on the - // particular library implementation (it may or may not be a null pointer). + // If tokenLength is zero, the return value depends on the + // particular library implementation (it may or may not be a null pointer). if (tokenLength) { serverRequest->requestToken = (CAToken_t) OICMalloc(tokenLength); VERIFY_NON_NULL(serverRequest->requestToken); memcpy(serverRequest->requestToken, requestToken, tokenLength); } - } serverRequest->tokenLength = tokenLength; @@ -343,6 +343,7 @@ OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID, exit: if (serverRequest) { + OICFree(serverRequest->requestToken); OICFree(serverRequest); serverRequest = NULL; } @@ -442,7 +443,9 @@ CAResponseResult_t ConvertEHResultToCAResult (OCEntityHandlerResult result, OCMe case OC_EH_SLOW: // 2.05 caResult = CA_CONTENT; break; - case OC_EH_OK: // 2.04/2.05 + case OC_EH_OK: + case OC_EH_CHANGED: // 2.04 + case OC_EH_CONTENT: // 2.05 if (method == OC_REST_POST || method == OC_REST_PUT) { caResult = CA_CHANGED; @@ -455,9 +458,6 @@ CAResponseResult_t ConvertEHResultToCAResult (OCEntityHandlerResult result, OCMe case OC_EH_VALID: // 2.03 caResult = CA_VALID; break; - case OC_EH_CHANGED: // 2.04 - caResult = CA_CHANGED; - break; // Unsuccessful Client Request case OC_EH_UNAUTHORIZED_REQ: // 4.01 caResult = CA_UNAUTHORIZED_REQ; @@ -480,9 +480,21 @@ CAResponseResult_t ConvertEHResultToCAResult (OCEntityHandlerResult result, OCMe case OC_EH_INTERNAL_SERVER_ERROR: // 5.00 caResult = CA_INTERNAL_SERVER_ERROR; break; + case OC_EH_NOT_IMPLEMENTED: // 5.01 + caResult = CA_NOT_IMPLEMENTED; + break; + case OC_EH_BAD_GATEWAY: // 5.02 + caResult = CA_BAD_GATEWAY; + break; + case OC_EH_SERVICE_UNAVAILABLE: // 5.03 + caResult = CA_SERVICE_UNAVAILABLE; + break; case OC_EH_RETRANSMIT_TIMEOUT: // 5.04 caResult = CA_RETRANSMIT_TIMEOUT; break; + case OC_EH_PROXY_NOT_SUPPORTED: // 5.05 + caResult = CA_PROXY_NOT_SUPPORTED; + break; default: caResult = CA_BAD_REQ; break; @@ -512,7 +524,12 @@ OCStackResult HandleSingleResponse(OCEntityHandlerResponse * ehResponse) return OC_STACK_ERROR; } - OCServerRequest *serverRequest = (OCServerRequest *)ehResponse->requestHandle; + OCServerRequest *serverRequest = GetServerRequestUsingHandle(ehResponse->requestHandle); + if (NULL == serverRequest) + { + OIC_LOG(ERROR, TAG, "No serverRequest matching with ehResponse"); + return OC_STACK_ERROR; + } CopyDevAddrToEndpoint(&serverRequest->devAddr, &responseEndpoint); @@ -622,11 +639,13 @@ OCStackResult HandleSingleResponse(OCEntityHandlerResponse * ehResponse) // Put the JSON prefix and suffix around the payload if(ehResponse->payload) { +#ifdef WITH_PRESENCE if (ehResponse->payload->type == PAYLOAD_TYPE_PRESENCE) { responseInfo.isMulticast = true; } else +#endif { responseInfo.isMulticast = false; } @@ -644,7 +663,7 @@ OCStackResult HandleSingleResponse(OCEntityHandlerResponse * ehResponse) OICFree(responseInfo.info.options); return result; } - //Add CONTENT_FORMAT OPT if payload exist + // Add CONTENT_FORMAT OPT if payload exist if (responseInfo.info.payloadSize > 0) { responseInfo.info.payloadFormat = CA_FORMAT_APPLICATION_CBOR; @@ -743,10 +762,8 @@ OCStackResult HandleAggregateResponse(OCEntityHandlerResponse * ehResponse) OIC_LOG(INFO, TAG, "Inside HandleAggregateResponse"); - OCServerRequest *serverRequest = GetServerRequestUsingHandle((OCServerRequest *) - ehResponse->requestHandle); - OCServerResponse *serverResponse = GetServerResponseUsingHandle((OCServerRequest *) - ehResponse->requestHandle); + OCServerRequest *serverRequest = GetServerRequestUsingHandle(ehResponse->requestHandle); + OCServerResponse *serverResponse = GetServerResponseUsingHandle(ehResponse->requestHandle); OCStackResult stackRet = OC_STACK_ERROR; if(serverRequest) @@ -770,7 +787,7 @@ OCStackResult HandleAggregateResponse(OCEntityHandlerResponse * ehResponse) goto exit; } - OCRepPayload *newPayload = OCRepPayloadClone((OCRepPayload *)ehResponse->payload); + OCRepPayload *newPayload = OCRepPayloadBatchClone((OCRepPayload *)ehResponse->payload); if(!serverResponse->payload) { @@ -788,6 +805,7 @@ OCStackResult HandleAggregateResponse(OCEntityHandlerResponse * ehResponse) { OIC_LOG(INFO, TAG, "This is the last response fragment"); ehResponse->payload = serverResponse->payload; + ehResponse->ehResult = OC_EH_OK; stackRet = HandleSingleResponse(ehResponse); //Delete the request and response FindAndDeleteServerRequest(serverRequest); @@ -800,5 +818,6 @@ OCStackResult HandleAggregateResponse(OCEntityHandlerResponse * ehResponse) } } exit: + return stackRet; }