in src/mqtt_client.c [1202:1248]
int mqtt_client_subscribe(MQTT_CLIENT_HANDLE handle, uint16_t packetId, SUBSCRIBE_PAYLOAD* subscribeList, size_t count)
{
int result;
MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
if (mqtt_client == NULL || subscribeList == NULL || count == 0 || packetId == 0)
{
/*Codes_SRS_MQTT_CLIENT_07_013: [If any of the parameters handle, subscribeList is NULL or count is 0 then mqtt_client_subscribe shall return a non-zero value.]*/
LogError("Invalid parameter specified mqtt_client: %p, subscribeList: %p, count: %lu, packetId: %d", mqtt_client, subscribeList, (unsigned long)count, packetId);
result = MU_FAILURE;
}
else
{
STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client);
BUFFER_HANDLE subPacket = mqtt_codec_subscribe(packetId, subscribeList, count, trace_log);
if (subPacket == NULL)
{
/*Codes_SRS_MQTT_CLIENT_07_014: [If any failure is encountered then mqtt_client_subscribe shall return a non-zero value.]*/
LogError("Error: mqtt_codec_subscribe failed");
result = MU_FAILURE;
}
else
{
mqtt_client->packetState = SUBSCRIBE_TYPE;
size_t size = BUFFER_length(subPacket);
/*Codes_SRS_MQTT_CLIENT_07_015: [On success mqtt_client_subscribe shall send the MQTT SUBCRIBE packet to the endpoint.]*/
if (sendPacketItem(mqtt_client, BUFFER_u_char(subPacket), size) != 0)
{
/*Codes_SRS_MQTT_CLIENT_07_014: [If any failure is encountered then mqtt_client_subscribe shall return a non-zero value.]*/
LogError("Error: mqtt_client_subscribe send failed");
result = MU_FAILURE;
}
else
{
log_outgoing_trace(mqtt_client, trace_log);
result = 0;
}
BUFFER_delete(subPacket);
}
if (trace_log != NULL)
{
STRING_delete(trace_log);
}
}
return result;
}