+ if (!clone->options)
+ {
+ OIC_LOG(ERROR, TAG, "CACloneInfo Out of memory");
+ CADestroyInfoInternal(clone);
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+ memcpy(clone->options, info->options, sizeof(CAHeaderOption_t) * info->numOptions);
+ clone->numOptions = info->numOptions;
+ }
+
+ if ((info->payload) && (0 < info->payloadSize))
+ {
+ // allocate payload field
+ uint8_t *temp = OICMalloc(info->payloadSize);
+ if (!temp)
+ {
+ OIC_LOG(ERROR, TAG, "CACloneInfo Out of memory");
+ CADestroyInfoInternal(clone);
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+ memcpy(temp, info->payload, info->payloadSize);
+
+ // save the payload
+ clone->payload = temp;
+ clone->payloadSize = info->payloadSize;
+ }
+ clone->payloadFormat = info->payloadFormat;
+ clone->acceptFormat = info->acceptFormat;
+
+ if (info->resourceUri)
+ {
+ // allocate payload field
+ char *temp = OICStrdup(info->resourceUri);
+ if (!temp)
+ {
+ OIC_LOG(ERROR, TAG, "CACloneInfo Out of memory");
+ CADestroyInfoInternal(clone);
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+
+ // save the resourceUri
+ clone->resourceUri = temp;
+ }
+
+#ifdef ROUTING_GATEWAY
+ clone->skipRetransmission = info->skipRetransmission;
+#endif
+
+ clone->messageId = info->messageId;
+ clone->type = info->type;
+
+ return CA_STATUS_OK;
+
+}