in src/mqtt_message.c [78:134]
MQTT_MESSAGE_HANDLE mqttmessage_create(uint16_t packetId, const char* topicName, QOS_VALUE qosValue, const uint8_t* appMsg, size_t appMsgLength)
{
/* Codes_SRS_MQTTMESSAGE_07_001:[If the parameters topicName is NULL is zero then mqttmessage_create shall return NULL.] */
MQTT_MESSAGE* result;
if (topicName == NULL)
{
LogError("Invalid Parameter topicName: %p, packetId: %d.", topicName, packetId);
result = NULL;
}
else
{
/* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */
result = create_msg_object(packetId, qosValue);
if (result == NULL)
{
/* Codes_SRS_MQTTMESSAGE_07_028: [If any memory allocation fails mqttmessage_create_in_place shall free any allocated memory and return NULL.] */
LogError("Failure creating message object");
}
else
{
if (mallocAndStrcpy_s(&result->topicName, topicName) != 0)
{
/* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */
LogError("Failure allocating topic name");
free(result);
result = NULL;
}
else
{
/* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */
result->appPayload.length = appMsgLength;
if (result->appPayload.length > 0)
{
result->appPayload.message = malloc(appMsgLength);
if (result->appPayload.message == NULL)
{
/* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */
LogError("Failure allocating message value of %lu", (unsigned long)appMsgLength);
free(result->topicName);
free(result);
result = NULL;
}
else
{
(void)memcpy(result->appPayload.message, appMsg, appMsgLength);
}
}
else
{
result->appPayload.message = NULL;
}
}
}
}
/* Codes_SRS_MQTTMESSAGE_07_004: [If mqttmessage_createMessage succeeds the it shall return a NON-NULL MQTT_MESSAGE_HANDLE value.] */
return (MQTT_MESSAGE_HANDLE)result;
}