+static CAData_t* CAGenerateHandlerData(const CAEndpoint_t *endpoint, const void *data, CADataType_t dataType)
+{
+ OIC_LOG(DEBUG, TAG, "CAGenerateHandlerData IN");
+ CAInfo_t *info = NULL;
+ CAData_t *cadata = (CAData_t *) OICCalloc(1, sizeof(CAData_t));
+ if (!cadata)
+ {
+ OIC_LOG(ERROR, TAG, "memory allocation failed");
+ return NULL;
+ }
+
+ CAEndpoint_t* ep = CACloneEndpoint(endpoint);
+ if (!ep)
+ {
+ OIC_LOG(ERROR, TAG, "endpoint clone failed");
+ OICFree(cadata);
+ return NULL;
+ }
+
+ OIC_LOG_V(DEBUG, TAG, "address : %s", ep->addr);
+ CAResult_t result;
+
+ if(CA_RESPONSE_DATA == dataType)
+ {
+ CAResponseInfo_t* resInfo = (CAResponseInfo_t*)OICCalloc(1, sizeof(CAResponseInfo_t));
+ if (!resInfo)
+ {
+ OIC_LOG(ERROR, TAG, "memory allocation failed");
+ OICFree(cadata);
+ CAFreeEndpoint(ep);
+ return NULL;
+ }
+
+ result = CAGetResponseInfoFromPDU(data, resInfo);
+ if (CA_STATUS_OK != result)
+ {
+ OIC_LOG(ERROR, TAG, "CAGetResponseInfoFromPDU Failed");
+ CAFreeEndpoint(ep);
+ CADestroyResponseInfoInternal(resInfo);
+ OICFree(cadata);
+ return NULL;
+ }
+ cadata->responseInfo = resInfo;
+ info = &resInfo->info;
+ OIC_LOG(DEBUG, TAG, "Response Info :");
+ CALogPayloadInfo(info);
+ }
+ else if (CA_REQUEST_DATA == dataType)
+ {
+ CARequestInfo_t* reqInfo = (CARequestInfo_t*)OICCalloc(1, sizeof(CARequestInfo_t));
+ if (!reqInfo)
+ {
+ OIC_LOG(ERROR, TAG, "memory allocation failed");
+ OICFree(cadata);
+ CAFreeEndpoint(ep);
+ return NULL;
+ }
+
+ result = CAGetRequestInfoFromPDU(data, reqInfo);
+ if (CA_STATUS_OK != result)
+ {
+ OIC_LOG(ERROR, TAG, "CAGetRequestInfoFromPDU failed");
+ CAFreeEndpoint(ep);
+ CADestroyRequestInfoInternal(reqInfo);
+ OICFree(cadata);
+ return NULL;
+ }
+
+ if (CADropSecondRequest(endpoint, reqInfo->info.messageId))
+ {
+ OIC_LOG(ERROR, TAG, "Second Request with same Token, Drop it");
+ CAFreeEndpoint(ep);
+ CADestroyRequestInfoInternal(reqInfo);
+ OICFree(cadata);
+ return NULL;
+ }
+
+ cadata->requestInfo = reqInfo;
+ info = &reqInfo->info;
+ OIC_LOG(DEBUG, TAG, "Request Info :");
+ CALogPayloadInfo(info);
+ }
+ else if (CA_ERROR_DATA == dataType)
+ {
+ CAErrorInfo_t *errorInfo = (CAErrorInfo_t *)OICCalloc(1, sizeof (CAErrorInfo_t));
+ if (!errorInfo)
+ {
+ OIC_LOG(ERROR, TAG, "Memory allocation failed!");
+ OICFree(cadata);
+ CAFreeEndpoint(ep);
+ return NULL;
+ }
+
+ CAResult_t result = CAGetErrorInfoFromPDU(data, errorInfo);
+ if (CA_STATUS_OK != result)
+ {
+ OIC_LOG(ERROR, TAG, "CAGetErrorInfoFromPDU failed");
+ CAFreeEndpoint(ep);
+ OICFree(errorInfo);
+ OICFree(cadata);
+ return NULL;
+ }
+
+ cadata->errorInfo = errorInfo;
+ info = &errorInfo->info;
+ OIC_LOG(DEBUG, TAG, "error Info :");
+ CALogPayloadInfo(info);
+ }
+
+ cadata->remoteEndpoint = ep;
+ cadata->dataType = dataType;
+
+ return cadata;
+
+ OIC_LOG(DEBUG, TAG, "CAGenerateHandlerData OUT");
+}
+