in src/mqtt_client.c [640:688]
static void SendMessageAck(MQTT_CLIENT* mqtt_client, uint16_t packetId, QOS_VALUE qosValue)
{
CONTROL_PACKET_TYPE response_packet_type = UNKNOWN_TYPE;
BUFFER_HANDLE pubRel = NULL;
if (qosValue == DELIVER_EXACTLY_ONCE)
{
pubRel = mqtt_codec_publishReceived(packetId);
if (pubRel == NULL)
{
LogError("Failed to allocate publish receive message.");
set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
}
response_packet_type = PUBREC_TYPE;
}
else if (qosValue == DELIVER_AT_LEAST_ONCE)
{
pubRel = mqtt_codec_publishAck(packetId);
if (pubRel == NULL)
{
LogError("Failed to allocate publish ack message.");
set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
}
response_packet_type = PUBACK_TYPE;
}
if (pubRel != NULL)
{
size_t size = BUFFER_length(pubRel);
if (sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), size) != 0)
{
LogError("Failed sending publish reply.");
set_error_callback(mqtt_client, MQTT_CLIENT_COMMUNICATION_ERROR);
}
#ifndef NO_LOGGING
else if (is_trace_enabled(mqtt_client))
{
STRING_HANDLE ack_trace_log = STRING_construct_sprintf("%s | PACKET_ID: %"PRIu16,
response_packet_type == PUBACK_TYPE ? "PUBACK" : ((response_packet_type == PUBREC_TYPE) ? "PUBREC" : "UNDEFINED"),
packetId);
log_outgoing_trace(mqtt_client, ack_trace_log);
STRING_delete(ack_trace_log);
}
#endif
BUFFER_delete(pubRel);
}
}