OCStackResult UpdateAmsMgrContext(PEContext_t *context, const CAEndpoint_t *endpoint, const CARequestInfo_t *requestInfo) { OCStackResult ret = OC_STACK_ERROR; //The AmsMgr context endpoint and requestInfo will be free from , //AmsMgrAclReqCallback function if(context->amsMgrContext->endpoint) { OICFree(context->amsMgrContext->endpoint); context->amsMgrContext->endpoint = NULL; } context->amsMgrContext->endpoint = (CAEndpoint_t *)OICCalloc(1, sizeof(CAEndpoint_t )); VERIFY_NON_NULL(TAG, context->amsMgrContext->endpoint, ERROR); *context->amsMgrContext->endpoint = *endpoint; if(context->amsMgrContext->requestInfo) { FreeCARequestInfo(context->amsMgrContext->requestInfo); context->amsMgrContext->requestInfo = NULL; } context->amsMgrContext->requestInfo = CACloneRequestInfo(requestInfo); VERIFY_NON_NULL(TAG, context->amsMgrContext->requestInfo, ERROR); ret = OC_STACK_OK; exit: return ret; }
static CAData_t* CAPrepareSendData(const CAEndpoint_t *endpoint, const void *sendData, CADataType_t dataType) { OIC_LOG(DEBUG, TAG, "CAPrepareSendData IN"); CAData_t *cadata = (CAData_t *) OICCalloc(1, sizeof(CAData_t)); if (!cadata) { OIC_LOG(ERROR, TAG, "memory allocation failed"); return NULL; } if(CA_REQUEST_DATA == dataType) { // clone request info CARequestInfo_t *request = CACloneRequestInfo((CARequestInfo_t *)sendData); if(!request) { OIC_LOG(ERROR, TAG, "CACloneRequestInfo failed"); OICFree(cadata); return NULL; } cadata->type = request->isMulticast ? SEND_TYPE_MULTICAST : SEND_TYPE_UNICAST; cadata->requestInfo = request; } else if(CA_RESPONSE_DATA == dataType) { // clone response info CAResponseInfo_t *response = CACloneResponseInfo((CAResponseInfo_t *)sendData); if(!response) { OIC_LOG(ERROR, TAG, "CACloneResponseInfo failed"); OICFree(cadata); return NULL; } cadata->type = response->isMulticast ? SEND_TYPE_MULTICAST : SEND_TYPE_UNICAST; cadata->responseInfo = response; } else { OIC_LOG(ERROR, TAG, "CAPrepareSendData unknown data type"); OICFree(cadata); return NULL; } CAEndpoint_t* ep = CACloneEndpoint(endpoint); if (!ep) { OIC_LOG(ERROR, TAG, "endpoint clone failed"); CADestroyData(cadata, sizeof(CAData_t)); return NULL; } cadata->remoteEndpoint = ep; cadata->dataType = dataType; return cadata; }