in iothub_client/src/iothub_message.c [327:455]
IOTHUB_MESSAGE_HANDLE IoTHubMessage_Clone(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
{
IOTHUB_MESSAGE_HANDLE_DATA* result;
const IOTHUB_MESSAGE_HANDLE_DATA* source = (const IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
if (source == NULL)
{
result = NULL;
LogError("iotHubMessageHandle parameter cannot be NULL for IoTHubMessage_Clone");
}
else
{
result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
if (result == NULL)
{
/*do nothing and return as is*/
LogError("unable to malloc");
}
else
{
memset(result, 0, sizeof(*result));
result->contentType = source->contentType;
result->is_security_message = source->is_security_message;
if (source->messageId != NULL && mallocAndStrcpy_s(&result->messageId, source->messageId) != 0)
{
LogError("unable to Copy messageId");
DestroyMessageData(result);
result = NULL;
}
else if (source->correlationId != NULL && mallocAndStrcpy_s(&result->correlationId, source->correlationId) != 0)
{
LogError("unable to Copy correlationId");
DestroyMessageData(result);
result = NULL;
}
else if (source->userDefinedContentType != NULL && mallocAndStrcpy_s(&result->userDefinedContentType, source->userDefinedContentType) != 0)
{
LogError("unable to copy contentType");
DestroyMessageData(result);
result = NULL;
}
else if (source->contentEncoding != NULL && mallocAndStrcpy_s(&result->contentEncoding, source->contentEncoding) != 0)
{
LogError("unable to copy contentEncoding");
DestroyMessageData(result);
result = NULL;
}
else if (source->diagnosticData != NULL && (result->diagnosticData = CloneDiagnosticPropertyData(source->diagnosticData)) == NULL)
{
LogError("unable to copy CloneDiagnosticPropertyData");
DestroyMessageData(result);
result = NULL;
}
else if (source->outputName != NULL && mallocAndStrcpy_s(&result->outputName, source->outputName) != 0)
{
LogError("unable to copy outputName");
DestroyMessageData(result);
result = NULL;
}
else if (source->inputName != NULL && mallocAndStrcpy_s(&result->inputName, source->inputName) != 0)
{
LogError("unable to copy inputName");
DestroyMessageData(result);
result = NULL;
}
else if (source->creationTimeUtc != NULL && mallocAndStrcpy_s(&result->creationTimeUtc, source->creationTimeUtc) != 0)
{
LogError("unable to copy creationTimeUtc");
DestroyMessageData(result);
result = NULL;
}
else if (source->userId != NULL && mallocAndStrcpy_s(&result->userId, source->userId) != 0)
{
LogError("unable to copy userId");
DestroyMessageData(result);
result = NULL;
}
else if (source->connectionModuleId != NULL && mallocAndStrcpy_s(&result->connectionModuleId, source->connectionModuleId) != 0)
{
LogError("unable to copy inputName");
DestroyMessageData(result);
result = NULL;
}
else if (source->connectionDeviceId != NULL && mallocAndStrcpy_s(&result->connectionDeviceId, source->connectionDeviceId) != 0)
{
LogError("unable to copy inputName");
DestroyMessageData(result);
result = NULL;
}
else if (source->componentName != NULL && mallocAndStrcpy_s(&result->componentName, source->componentName) != 0)
{
LogError("unable to copy componentName");
DestroyMessageData(result);
result = NULL;
}
else if (source->contentType == IOTHUBMESSAGE_BYTEARRAY)
{
if ((result->value.byteArray = BUFFER_clone(source->value.byteArray)) == NULL)
{
LogError("unable to BUFFER_clone");
DestroyMessageData(result);
result = NULL;
}
else if ((result->properties = Map_Clone(source->properties)) == NULL)
{
LogError("unable to Map_Clone");
DestroyMessageData(result);
result = NULL;
}
}
else /*can only be STRING*/
{
if ((result->value.string = STRING_clone(source->value.string)) == NULL)
{
LogError("failed to STRING_clone");
DestroyMessageData(result);
result = NULL;
}
else if ((result->properties = Map_Clone(source->properties)) == NULL)
{
LogError("unable to Map_Clone");
DestroyMessageData(result);
result = NULL;
}
}
}
}
return result;
}