in src/mqtt_codec.c [925:988]
BUFFER_HANDLE mqtt_codec_subscribe(uint16_t packetId, SUBSCRIBE_PAYLOAD* subscribeList, size_t count, STRING_HANDLE trace_log)
{
BUFFER_HANDLE result;
/* Codes_SRS_MQTT_CODEC_07_023: [If the parameters subscribeList is NULL or if count is 0 then mqtt_codec_subscribe shall return NULL.] */
if (subscribeList == NULL || count == 0)
{
result = NULL;
}
else
{
/* Codes_SRS_MQTT_CODEC_07_026: [mqtt_codec_subscribe shall return a BUFFER_HANDLE that represents a MQTT SUBSCRIBE message.]*/
result = BUFFER_new();
if (result != NULL)
{
if (constructSubscibeTypeVariableHeader(result, packetId) != 0)
{
/* Codes_SRS_MQTT_CODEC_07_025: [If any error is encountered then mqtt_codec_subscribe shall return NULL.] */
BUFFER_delete(result);
result = NULL;
}
else
{
STRING_HANDLE sub_trace = NULL;
if (trace_log != NULL)
{
sub_trace = STRING_construct_sprintf(" | PACKET_ID: %"PRIu16, packetId);
}
/* Codes_SRS_MQTT_CODEC_07_024: [mqtt_codec_subscribe shall iterate through count items in the subscribeList.] */
if (addListItemsToSubscribePacket(result, subscribeList, count, sub_trace) != 0)
{
/* Codes_SRS_MQTT_CODEC_07_025: [If any error is encountered then mqtt_codec_subscribe shall return NULL.] */
BUFFER_delete(result);
result = NULL;
}
else
{
if (trace_log != NULL)
{
STRING_concat(trace_log, "SUBSCRIBE");
}
if (constructFixedHeader(result, SUBSCRIBE_TYPE, SUBSCRIBE_FIXED_HEADER_FLAG) != 0)
{
/* Codes_SRS_MQTT_CODEC_07_025: [If any error is encountered then mqtt_codec_subscribe shall return NULL.] */
BUFFER_delete(result);
result = NULL;
}
else
{
if (trace_log != NULL)
{
(void)STRING_concat_with_STRING(trace_log, sub_trace);
}
}
}
if (sub_trace != NULL)
{
STRING_delete(sub_trace);
}
}
}
}
return result;
}