A small footprint MQTT library

Dependents:   STM32F746_iothub_client_sample_mqtt FXOS8700CQ_To_Azure_IoT f767zi_mqtt FXOS8700CQ_To_Azure_IoT ... more

Committer:
AzureIoTClient
Date:
Thu Oct 04 09:16:34 2018 -0700
Revision:
30:712bcbf21afa
Parent:
20:a8254fa69b6c
1.2.10

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Azure.IoT Build 0:ef4901974abc 1 // Copyright (c) Microsoft. All rights reserved.
Azure.IoT Build 0:ef4901974abc 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
Azure.IoT Build 0:ef4901974abc 3
Azure.IoT Build 0:ef4901974abc 4 #include <stdlib.h>
Azure.IoT Build 0:ef4901974abc 5 #include "azure_umqtt_c/mqtt_message.h"
AzureIoTClient 15:ec5a36121959 6 #include "azure_c_shared_utility/optimize_size.h"
Azure.IoT Build 0:ef4901974abc 7 #include "azure_c_shared_utility/gballoc.h"
AzureIoTClient 18:6d13ad04e8a0 8 #include "azure_c_shared_utility/xlogging.h"
Azure.IoT Build 0:ef4901974abc 9
Azure.IoT Build 0:ef4901974abc 10 typedef struct MQTT_MESSAGE_TAG
Azure.IoT Build 0:ef4901974abc 11 {
Azure.IoT Build 0:ef4901974abc 12 uint16_t packetId;
AzureIoTClient 18:6d13ad04e8a0 13 QOS_VALUE qosInfo;
AzureIoTClient 18:6d13ad04e8a0 14
Azure.IoT Build 0:ef4901974abc 15 char* topicName;
Azure.IoT Build 0:ef4901974abc 16 APP_PAYLOAD appPayload;
AzureIoTClient 18:6d13ad04e8a0 17
AzureIoTClient 18:6d13ad04e8a0 18 const char* const_topic_name;
AzureIoTClient 18:6d13ad04e8a0 19 APP_PAYLOAD const_payload;
AzureIoTClient 18:6d13ad04e8a0 20
Azure.IoT Build 0:ef4901974abc 21 bool isDuplicateMsg;
Azure.IoT Build 0:ef4901974abc 22 bool isMessageRetained;
Azure.IoT Build 0:ef4901974abc 23 } MQTT_MESSAGE;
Azure.IoT Build 0:ef4901974abc 24
AzureIoTClient 18:6d13ad04e8a0 25 MQTT_MESSAGE_HANDLE mqttmessage_create_in_place(uint16_t packetId, const char* topicName, QOS_VALUE qosValue, const uint8_t* appMsg, size_t appMsgLength)
AzureIoTClient 18:6d13ad04e8a0 26 {
AzureIoTClient 18:6d13ad04e8a0 27 /* Codes_SRS_MQTTMESSAGE_07_026: [If the parameters topicName is NULL then mqttmessage_create_in_place shall return NULL.].] */
AzureIoTClient 18:6d13ad04e8a0 28 MQTT_MESSAGE* result;
AzureIoTClient 18:6d13ad04e8a0 29 if (topicName == NULL)
AzureIoTClient 18:6d13ad04e8a0 30 {
AzureIoTClient 18:6d13ad04e8a0 31 LogError("Invalid Parameter topicName: %p, packetId: %d.", topicName, packetId);
AzureIoTClient 18:6d13ad04e8a0 32 result = NULL;
AzureIoTClient 18:6d13ad04e8a0 33 }
AzureIoTClient 18:6d13ad04e8a0 34 else
AzureIoTClient 18:6d13ad04e8a0 35 {
AzureIoTClient 18:6d13ad04e8a0 36 result = malloc(sizeof(MQTT_MESSAGE));
AzureIoTClient 18:6d13ad04e8a0 37 if (result != NULL)
AzureIoTClient 18:6d13ad04e8a0 38 {
AzureIoTClient 18:6d13ad04e8a0 39 memset(result, 0, sizeof(MQTT_MESSAGE) );
AzureIoTClient 18:6d13ad04e8a0 40 result->const_topic_name = topicName;
AzureIoTClient 18:6d13ad04e8a0 41
AzureIoTClient 18:6d13ad04e8a0 42 result->packetId = packetId;
AzureIoTClient 18:6d13ad04e8a0 43 result->isDuplicateMsg = false;
AzureIoTClient 18:6d13ad04e8a0 44 result->isMessageRetained = false;
AzureIoTClient 18:6d13ad04e8a0 45 result->qosInfo = qosValue;
AzureIoTClient 18:6d13ad04e8a0 46
AzureIoTClient 18:6d13ad04e8a0 47 /* Codes_SRS_MQTTMESSAGE_07_027: [mqttmessage_create_in_place shall use the a pointer to topicName or appMsg .] */
AzureIoTClient 18:6d13ad04e8a0 48 result->const_payload.length = appMsgLength;
AzureIoTClient 18:6d13ad04e8a0 49 if (result->const_payload.length > 0)
AzureIoTClient 18:6d13ad04e8a0 50 {
AzureIoTClient 18:6d13ad04e8a0 51 result->const_payload.message = (uint8_t*)appMsg;
AzureIoTClient 18:6d13ad04e8a0 52 }
AzureIoTClient 18:6d13ad04e8a0 53 }
AzureIoTClient 18:6d13ad04e8a0 54 else
AzureIoTClient 18:6d13ad04e8a0 55 {
AzureIoTClient 18:6d13ad04e8a0 56 /* Codes_SRS_MQTTMESSAGE_07_028: [If any memory allocation fails mqttmessage_create_in_place shall free any allocated memory and return NULL.] */
AzureIoTClient 18:6d13ad04e8a0 57 LogError("Failure unable to allocate MQTT Message.");
AzureIoTClient 18:6d13ad04e8a0 58 }
AzureIoTClient 18:6d13ad04e8a0 59 }
AzureIoTClient 18:6d13ad04e8a0 60 /* Codes_SRS_MQTTMESSAGE_07_029: [ Upon success, mqttmessage_create_in_place shall return a NON-NULL MQTT_MESSAGE_HANDLE value.] */
AzureIoTClient 18:6d13ad04e8a0 61 return (MQTT_MESSAGE_HANDLE)result;
AzureIoTClient 18:6d13ad04e8a0 62 }
AzureIoTClient 18:6d13ad04e8a0 63
Azure.IoT Build 0:ef4901974abc 64 MQTT_MESSAGE_HANDLE mqttmessage_create(uint16_t packetId, const char* topicName, QOS_VALUE qosValue, const uint8_t* appMsg, size_t appMsgLength)
Azure.IoT Build 0:ef4901974abc 65 {
Azure.IoT Build 0:ef4901974abc 66 /* Codes_SRS_MQTTMESSAGE_07_001:[If the parameters topicName is NULL is zero then mqttmessage_create shall return NULL.] */
Azure.IoT Build 0:ef4901974abc 67 MQTT_MESSAGE* result;
Azure.IoT Build 0:ef4901974abc 68 if (topicName == NULL)
Azure.IoT Build 0:ef4901974abc 69 {
AzureIoTClient 18:6d13ad04e8a0 70 LogError("Invalid Parameter topicName: %p, packetId: %d.", topicName, packetId);
Azure.IoT Build 0:ef4901974abc 71 result = NULL;
Azure.IoT Build 0:ef4901974abc 72 }
Azure.IoT Build 0:ef4901974abc 73 else
Azure.IoT Build 0:ef4901974abc 74 {
Azure.IoT Build 0:ef4901974abc 75 /* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */
Azure.IoT Build 0:ef4901974abc 76 result = malloc(sizeof(MQTT_MESSAGE));
Azure.IoT Build 0:ef4901974abc 77 if (result != NULL)
Azure.IoT Build 0:ef4901974abc 78 {
AzureIoTClient 18:6d13ad04e8a0 79 memset(result, 0, sizeof(MQTT_MESSAGE));
Azure.IoT Build 0:ef4901974abc 80 if (mallocAndStrcpy_s(&result->topicName, topicName) != 0)
Azure.IoT Build 0:ef4901974abc 81 {
Azure.IoT Build 0:ef4901974abc 82 /* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */
AzureIoTClient 20:a8254fa69b6c 83 LogError("Failure allocating topic name");
Azure.IoT Build 0:ef4901974abc 84 free(result);
Azure.IoT Build 0:ef4901974abc 85 result = NULL;
Azure.IoT Build 0:ef4901974abc 86 }
Azure.IoT Build 0:ef4901974abc 87 else
Azure.IoT Build 0:ef4901974abc 88 {
Azure.IoT Build 0:ef4901974abc 89 result->packetId = packetId;
Azure.IoT Build 0:ef4901974abc 90 result->isDuplicateMsg = false;
Azure.IoT Build 0:ef4901974abc 91 result->isMessageRetained = false;
Azure.IoT Build 0:ef4901974abc 92 result->qosInfo = qosValue;
Azure.IoT Build 0:ef4901974abc 93
Azure.IoT Build 0:ef4901974abc 94 /* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */
Azure.IoT Build 0:ef4901974abc 95 result->appPayload.length = appMsgLength;
Azure.IoT Build 0:ef4901974abc 96 if (result->appPayload.length > 0)
Azure.IoT Build 0:ef4901974abc 97 {
Azure.IoT Build 0:ef4901974abc 98 result->appPayload.message = malloc(appMsgLength);
Azure.IoT Build 0:ef4901974abc 99 if (result->appPayload.message == NULL)
Azure.IoT Build 0:ef4901974abc 100 {
Azure.IoT Build 0:ef4901974abc 101 /* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */
AzureIoTClient 30:712bcbf21afa 102 LogError("Failure allocating message value of %zu", appMsgLength);
Azure.IoT Build 0:ef4901974abc 103 free(result->topicName);
Azure.IoT Build 0:ef4901974abc 104 free(result);
Azure.IoT Build 0:ef4901974abc 105 result = NULL;
Azure.IoT Build 0:ef4901974abc 106 }
Azure.IoT Build 0:ef4901974abc 107 else
Azure.IoT Build 0:ef4901974abc 108 {
AzureIoTClient 13:3c202001e4ba 109 (void)memcpy(result->appPayload.message, appMsg, appMsgLength);
Azure.IoT Build 0:ef4901974abc 110 }
Azure.IoT Build 0:ef4901974abc 111 }
Azure.IoT Build 0:ef4901974abc 112 else
Azure.IoT Build 0:ef4901974abc 113 {
Azure.IoT Build 0:ef4901974abc 114 result->appPayload.message = NULL;
Azure.IoT Build 0:ef4901974abc 115 }
Azure.IoT Build 0:ef4901974abc 116 }
Azure.IoT Build 0:ef4901974abc 117 }
Azure.IoT Build 0:ef4901974abc 118 }
Azure.IoT Build 0:ef4901974abc 119 /* Codes_SRS_MQTTMESSAGE_07_004: [If mqttmessage_createMessage succeeds the it shall return a NON-NULL MQTT_MESSAGE_HANDLE value.] */
AzureIoTClient 18:6d13ad04e8a0 120 return (MQTT_MESSAGE_HANDLE)result;
Azure.IoT Build 0:ef4901974abc 121 }
Azure.IoT Build 0:ef4901974abc 122
Azure.IoT Build 0:ef4901974abc 123 void mqttmessage_destroy(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 124 {
Azure.IoT Build 0:ef4901974abc 125 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 126 /* Codes_SRS_MQTTMESSAGE_07_005: [If the handle parameter is NULL then mqttmessage_destroyMessage shall do nothing] */
Azure.IoT Build 0:ef4901974abc 127 if (msgInfo != NULL)
Azure.IoT Build 0:ef4901974abc 128 {
Azure.IoT Build 0:ef4901974abc 129 /* Codes_SRS_MQTTMESSAGE_07_006: [mqttmessage_destroyMessage shall free all resources associated with the MQTT_MESSAGE_HANDLE value] */
AzureIoTClient 18:6d13ad04e8a0 130 if (msgInfo->topicName != NULL)
AzureIoTClient 18:6d13ad04e8a0 131 {
AzureIoTClient 18:6d13ad04e8a0 132 free(msgInfo->topicName);
AzureIoTClient 18:6d13ad04e8a0 133 }
Azure.IoT Build 0:ef4901974abc 134 if (msgInfo->appPayload.message != NULL)
Azure.IoT Build 0:ef4901974abc 135 {
Azure.IoT Build 0:ef4901974abc 136 free(msgInfo->appPayload.message);
Azure.IoT Build 0:ef4901974abc 137 }
Azure.IoT Build 0:ef4901974abc 138 free(msgInfo);
Azure.IoT Build 0:ef4901974abc 139 }
Azure.IoT Build 0:ef4901974abc 140 }
Azure.IoT Build 0:ef4901974abc 141
Azure.IoT Build 0:ef4901974abc 142 MQTT_MESSAGE_HANDLE mqttmessage_clone(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 143 {
Azure.IoT Build 0:ef4901974abc 144 MQTT_MESSAGE_HANDLE result;
Azure.IoT Build 0:ef4901974abc 145 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 146 {
Azure.IoT Build 0:ef4901974abc 147 /* Codes_SRS_MQTTMESSAGE_07_007: [If handle parameter is NULL then mqttmessage_clone shall return NULL.] */
AzureIoTClient 18:6d13ad04e8a0 148 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 149 result = NULL;
Azure.IoT Build 0:ef4901974abc 150 }
Azure.IoT Build 0:ef4901974abc 151 else
Azure.IoT Build 0:ef4901974abc 152 {
Azure.IoT Build 0:ef4901974abc 153 /* Codes_SRS_MQTTMESSAGE_07_008: [mqttmessage_clone shall create a new MQTT_MESSAGE_HANDLE with data content identical of the handle value.] */
Azure.IoT Build 0:ef4901974abc 154 MQTT_MESSAGE* mqtt_message = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 155 result = mqttmessage_create(mqtt_message->packetId, mqtt_message->topicName, mqtt_message->qosInfo, mqtt_message->appPayload.message, mqtt_message->appPayload.length);
Azure.IoT Build 0:ef4901974abc 156 if (result != NULL)
Azure.IoT Build 0:ef4901974abc 157 {
Azure.IoT Build 0:ef4901974abc 158 (void)mqttmessage_setIsDuplicateMsg(result, mqtt_message->isDuplicateMsg);
Azure.IoT Build 0:ef4901974abc 159 (void)mqttmessage_setIsRetained(result, mqtt_message->isMessageRetained);
Azure.IoT Build 0:ef4901974abc 160 }
Azure.IoT Build 0:ef4901974abc 161 }
Azure.IoT Build 0:ef4901974abc 162 return result;
Azure.IoT Build 0:ef4901974abc 163 }
Azure.IoT Build 0:ef4901974abc 164
Azure.IoT Build 0:ef4901974abc 165 uint16_t mqttmessage_getPacketId(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 166 {
Azure.IoT Build 0:ef4901974abc 167 uint16_t result;
Azure.IoT Build 0:ef4901974abc 168 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 169 {
Azure.IoT Build 0:ef4901974abc 170 /* Codes_SRS_MQTTMESSAGE_07_010: [If handle is NULL then mqttmessage_getPacketId shall return 0.] */
AzureIoTClient 18:6d13ad04e8a0 171 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 172 result = 0;
Azure.IoT Build 0:ef4901974abc 173 }
Azure.IoT Build 0:ef4901974abc 174 else
Azure.IoT Build 0:ef4901974abc 175 {
Azure.IoT Build 0:ef4901974abc 176 /* Codes_SRS_MQTTMESSAGE_07_011: [mqttmessage_getPacketId shall return the packetId value contained in MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 177 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 178 result = msgInfo->packetId;
Azure.IoT Build 0:ef4901974abc 179 }
Azure.IoT Build 0:ef4901974abc 180 return result;
Azure.IoT Build 0:ef4901974abc 181 }
Azure.IoT Build 0:ef4901974abc 182
Azure.IoT Build 0:ef4901974abc 183 const char* mqttmessage_getTopicName(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 184 {
Azure.IoT Build 0:ef4901974abc 185 const char* result;
Azure.IoT Build 0:ef4901974abc 186 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 187 {
Azure.IoT Build 0:ef4901974abc 188 /* Codes_SRS_MQTTMESSAGE_07_012: [If handle is NULL then mqttmessage_getTopicName shall return a NULL string.] */
AzureIoTClient 18:6d13ad04e8a0 189 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 190 result = NULL;
Azure.IoT Build 0:ef4901974abc 191 }
Azure.IoT Build 0:ef4901974abc 192 else
Azure.IoT Build 0:ef4901974abc 193 {
Azure.IoT Build 0:ef4901974abc 194 /* Codes_SRS_MQTTMESSAGE_07_013: [mqttmessage_getTopicName shall return the topicName contained in MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 195 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
AzureIoTClient 18:6d13ad04e8a0 196 if (msgInfo->topicName == NULL)
AzureIoTClient 18:6d13ad04e8a0 197 {
AzureIoTClient 18:6d13ad04e8a0 198 result = msgInfo->const_topic_name;
AzureIoTClient 18:6d13ad04e8a0 199 }
AzureIoTClient 18:6d13ad04e8a0 200 else
AzureIoTClient 18:6d13ad04e8a0 201 {
AzureIoTClient 18:6d13ad04e8a0 202 result = msgInfo->topicName;
AzureIoTClient 18:6d13ad04e8a0 203 }
Azure.IoT Build 0:ef4901974abc 204 }
Azure.IoT Build 0:ef4901974abc 205 return result;
Azure.IoT Build 0:ef4901974abc 206 }
Azure.IoT Build 0:ef4901974abc 207
Azure.IoT Build 0:ef4901974abc 208 QOS_VALUE mqttmessage_getQosType(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 209 {
Azure.IoT Build 0:ef4901974abc 210 QOS_VALUE result;
Azure.IoT Build 0:ef4901974abc 211 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 212 {
Azure.IoT Build 0:ef4901974abc 213 /* Codes_SRS_MQTTMESSAGE_07_014: [If handle is NULL then mqttmessage_getQosType shall return the default DELIVER_AT_MOST_ONCE value.] */
AzureIoTClient 18:6d13ad04e8a0 214 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 215 result = DELIVER_AT_MOST_ONCE;
Azure.IoT Build 0:ef4901974abc 216 }
Azure.IoT Build 0:ef4901974abc 217 else
Azure.IoT Build 0:ef4901974abc 218 {
Azure.IoT Build 0:ef4901974abc 219 /* Codes_SRS_MQTTMESSAGE_07_015: [mqttmessage_getQosType shall return the QOS Type value contained in MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 220 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 221 result = msgInfo->qosInfo;
Azure.IoT Build 0:ef4901974abc 222 }
Azure.IoT Build 0:ef4901974abc 223 return result;
Azure.IoT Build 0:ef4901974abc 224 }
Azure.IoT Build 0:ef4901974abc 225
Azure.IoT Build 0:ef4901974abc 226 bool mqttmessage_getIsDuplicateMsg(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 227 {
Azure.IoT Build 0:ef4901974abc 228 bool result;
Azure.IoT Build 0:ef4901974abc 229 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 230 {
Azure.IoT Build 0:ef4901974abc 231 /* Codes_SRS_MQTTMESSAGE_07_016: [If handle is NULL then mqttmessage_getIsDuplicateMsg shall return false.] */
AzureIoTClient 18:6d13ad04e8a0 232 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 233 result = false;
Azure.IoT Build 0:ef4901974abc 234 }
Azure.IoT Build 0:ef4901974abc 235 else
Azure.IoT Build 0:ef4901974abc 236 {
Azure.IoT Build 0:ef4901974abc 237 /* Codes_SRS_MQTTMESSAGE_07_017: [mqttmessage_getIsDuplicateMsg shall return the isDuplicateMsg value contained in MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 238 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 239 result = msgInfo->isDuplicateMsg;
Azure.IoT Build 0:ef4901974abc 240 }
Azure.IoT Build 0:ef4901974abc 241 return result;
Azure.IoT Build 0:ef4901974abc 242 }
Azure.IoT Build 0:ef4901974abc 243
Azure.IoT Build 0:ef4901974abc 244 bool mqttmessage_getIsRetained(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 245 {
Azure.IoT Build 0:ef4901974abc 246 bool result;
Azure.IoT Build 0:ef4901974abc 247 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 248 {
Azure.IoT Build 0:ef4901974abc 249 /* Codes_SRS_MQTTMESSAGE_07_018: [If handle is NULL then mqttmessage_getIsRetained shall return false.] */
AzureIoTClient 18:6d13ad04e8a0 250 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 251 result = false;
Azure.IoT Build 0:ef4901974abc 252 }
Azure.IoT Build 0:ef4901974abc 253 else
Azure.IoT Build 0:ef4901974abc 254 {
Azure.IoT Build 0:ef4901974abc 255 /* Codes_SRS_MQTTMESSAGE_07_019: [mqttmessage_getIsRetained shall return the isRetained value contained in MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 256 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 257 result = msgInfo->isMessageRetained;
Azure.IoT Build 0:ef4901974abc 258 }
Azure.IoT Build 0:ef4901974abc 259 return result;
Azure.IoT Build 0:ef4901974abc 260 }
Azure.IoT Build 0:ef4901974abc 261
Azure.IoT Build 0:ef4901974abc 262 int mqttmessage_setIsDuplicateMsg(MQTT_MESSAGE_HANDLE handle, bool duplicateMsg)
Azure.IoT Build 0:ef4901974abc 263 {
Azure.IoT Build 0:ef4901974abc 264 int result;
Azure.IoT Build 0:ef4901974abc 265 /* Codes_SRS_MQTTMESSAGE_07_022: [If handle is NULL then mqttmessage_setIsDuplicateMsg shall return a non-zero value.] */
Azure.IoT Build 0:ef4901974abc 266 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 267 {
AzureIoTClient 18:6d13ad04e8a0 268 LogError("Invalid Parameter handle: %p.", handle);
AzureIoTClient 15:ec5a36121959 269 result = __FAILURE__;
Azure.IoT Build 0:ef4901974abc 270 }
Azure.IoT Build 0:ef4901974abc 271 else
Azure.IoT Build 0:ef4901974abc 272 {
Azure.IoT Build 0:ef4901974abc 273 /* Codes_SRS_MQTTMESSAGE_07_023: [mqttmessage_setIsDuplicateMsg shall store the duplicateMsg value in the MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 274 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 275 msgInfo->isDuplicateMsg = duplicateMsg;
Azure.IoT Build 0:ef4901974abc 276 result = 0;
Azure.IoT Build 0:ef4901974abc 277 }
Azure.IoT Build 0:ef4901974abc 278 return result;
Azure.IoT Build 0:ef4901974abc 279 }
Azure.IoT Build 0:ef4901974abc 280
Azure.IoT Build 0:ef4901974abc 281 int mqttmessage_setIsRetained(MQTT_MESSAGE_HANDLE handle, bool retainMsg)
Azure.IoT Build 0:ef4901974abc 282 {
Azure.IoT Build 0:ef4901974abc 283 int result;
Azure.IoT Build 0:ef4901974abc 284 /* Codes_SRS_MQTTMESSAGE_07_024: [If handle is NULL then mqttmessage_setIsRetained shall return a non-zero value.] */
Azure.IoT Build 0:ef4901974abc 285 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 286 {
AzureIoTClient 18:6d13ad04e8a0 287 LogError("Invalid Parameter handle: %p.", handle);
AzureIoTClient 15:ec5a36121959 288 result = __FAILURE__;
Azure.IoT Build 0:ef4901974abc 289 }
Azure.IoT Build 0:ef4901974abc 290 else
Azure.IoT Build 0:ef4901974abc 291 {
Azure.IoT Build 0:ef4901974abc 292 /* Codes_SRS_MQTTMESSAGE_07_025: [mqttmessage_setIsRetained shall store the retainMsg value in the MQTT_MESSAGE_HANDLE handle.] */
Azure.IoT Build 0:ef4901974abc 293 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
Azure.IoT Build 0:ef4901974abc 294 msgInfo->isMessageRetained = retainMsg;
Azure.IoT Build 0:ef4901974abc 295 result = 0;
Azure.IoT Build 0:ef4901974abc 296 }
Azure.IoT Build 0:ef4901974abc 297 return result;
Azure.IoT Build 0:ef4901974abc 298 }
Azure.IoT Build 0:ef4901974abc 299
Azure.IoT Build 0:ef4901974abc 300 const APP_PAYLOAD* mqttmessage_getApplicationMsg(MQTT_MESSAGE_HANDLE handle)
Azure.IoT Build 0:ef4901974abc 301 {
Azure.IoT Build 0:ef4901974abc 302 const APP_PAYLOAD* result;
Azure.IoT Build 0:ef4901974abc 303 if (handle == NULL)
Azure.IoT Build 0:ef4901974abc 304 {
Azure.IoT Build 0:ef4901974abc 305 /* Codes_SRS_MQTTMESSAGE_07_020: [If handle is NULL or if msgLen is 0 then mqttmessage_getApplicationMsg shall return NULL.] */
AzureIoTClient 18:6d13ad04e8a0 306 LogError("Invalid Parameter handle: %p.", handle);
Azure.IoT Build 0:ef4901974abc 307 result = NULL;
Azure.IoT Build 0:ef4901974abc 308 }
Azure.IoT Build 0:ef4901974abc 309 else
Azure.IoT Build 0:ef4901974abc 310 {
Azure.IoT Build 0:ef4901974abc 311 /* Codes_SRS_MQTTMESSAGE_07_021: [mqttmessage_getApplicationMsg shall return the applicationMsg value contained in MQTT_MESSAGE_HANDLE handle and the length of the appMsg in the msgLen parameter.] */
Azure.IoT Build 0:ef4901974abc 312 MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
AzureIoTClient 18:6d13ad04e8a0 313 if (msgInfo->const_payload.length > 0)
AzureIoTClient 18:6d13ad04e8a0 314 {
AzureIoTClient 18:6d13ad04e8a0 315 result = &msgInfo->const_payload;
AzureIoTClient 18:6d13ad04e8a0 316 }
AzureIoTClient 18:6d13ad04e8a0 317 else
AzureIoTClient 18:6d13ad04e8a0 318 {
AzureIoTClient 18:6d13ad04e8a0 319 result = &msgInfo->appPayload;
AzureIoTClient 18:6d13ad04e8a0 320 }
Azure.IoT Build 0:ef4901974abc 321 }
Azure.IoT Build 0:ef4901974abc 322 return result;
Azure.IoT Build 0:ef4901974abc 323 }