in src/mqtt_client.c [1250:1296]
int mqtt_client_unsubscribe(MQTT_CLIENT_HANDLE handle, uint16_t packetId, const char** unsubscribeList, size_t count)
{
int result;
MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
if (mqtt_client == NULL || unsubscribeList == NULL || count == 0 || packetId == 0)
{
/*Codes_SRS_MQTT_CLIENT_07_016: [If any of the parameters handle, unsubscribeList is NULL or count is 0 then mqtt_client_unsubscribe shall return a non-zero value.]*/
LogError("Invalid parameter specified mqtt_client: %p, unsubscribeList: %p, count: %lu, packetId: %d", mqtt_client, unsubscribeList, (unsigned long)count, packetId);
result = MU_FAILURE;
}
else
{
STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client);
BUFFER_HANDLE unsubPacket = mqtt_codec_unsubscribe(packetId, unsubscribeList, count, trace_log);
if (unsubPacket == NULL)
{
/*Codes_SRS_MQTT_CLIENT_07_017: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/
LogError("Error: mqtt_codec_unsubscribe failed");
result = MU_FAILURE;
}
else
{
mqtt_client->packetState = UNSUBSCRIBE_TYPE;
size_t size = BUFFER_length(unsubPacket);
/*Codes_SRS_MQTT_CLIENT_07_018: [On success mqtt_client_unsubscribe shall send the MQTT SUBCRIBE packet to the endpoint.]*/
if (sendPacketItem(mqtt_client, BUFFER_u_char(unsubPacket), size) != 0)
{
/*Codes_SRS_MQTT_CLIENT_07_017: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.].]*/
LogError("Error: mqtt_client_unsubscribe send failed");
result = MU_FAILURE;
}
else
{
log_outgoing_trace(mqtt_client, trace_log);
result = 0;
}
BUFFER_delete(unsubPacket);
}
if (trace_log != NULL)
{
STRING_delete(trace_log);
}
}
return result;
}