A small footprint MQTT library
Dependents: STM32F746_iothub_client_sample_mqtt FXOS8700CQ_To_Azure_IoT f767zi_mqtt FXOS8700CQ_To_Azure_IoT ... more
mqtt_message.c@18:6d13ad04e8a0, 2017-08-11 (annotated)
- Committer:
- AzureIoTClient
- Date:
- Fri Aug 11 14:02:56 2017 -0700
- Revision:
- 18:6d13ad04e8a0
- Parent:
- 15:ec5a36121959
- Child:
- 20:a8254fa69b6c
1.1.21
Who changed what in which revision?
User | Revision | Line number | New 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.] */ |
Azure.IoT Build | 0:ef4901974abc | 83 | free(result); |
Azure.IoT Build | 0:ef4901974abc | 84 | result = NULL; |
Azure.IoT Build | 0:ef4901974abc | 85 | } |
Azure.IoT Build | 0:ef4901974abc | 86 | else |
Azure.IoT Build | 0:ef4901974abc | 87 | { |
Azure.IoT Build | 0:ef4901974abc | 88 | result->packetId = packetId; |
Azure.IoT Build | 0:ef4901974abc | 89 | result->isDuplicateMsg = false; |
Azure.IoT Build | 0:ef4901974abc | 90 | result->isMessageRetained = false; |
Azure.IoT Build | 0:ef4901974abc | 91 | result->qosInfo = qosValue; |
Azure.IoT Build | 0:ef4901974abc | 92 | |
Azure.IoT Build | 0:ef4901974abc | 93 | /* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */ |
Azure.IoT Build | 0:ef4901974abc | 94 | result->appPayload.length = appMsgLength; |
Azure.IoT Build | 0:ef4901974abc | 95 | if (result->appPayload.length > 0) |
Azure.IoT Build | 0:ef4901974abc | 96 | { |
Azure.IoT Build | 0:ef4901974abc | 97 | result->appPayload.message = malloc(appMsgLength); |
Azure.IoT Build | 0:ef4901974abc | 98 | if (result->appPayload.message == NULL) |
Azure.IoT Build | 0:ef4901974abc | 99 | { |
Azure.IoT Build | 0:ef4901974abc | 100 | /* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */ |
Azure.IoT Build | 0:ef4901974abc | 101 | free(result->topicName); |
Azure.IoT Build | 0:ef4901974abc | 102 | free(result); |
Azure.IoT Build | 0:ef4901974abc | 103 | result = NULL; |
Azure.IoT Build | 0:ef4901974abc | 104 | } |
Azure.IoT Build | 0:ef4901974abc | 105 | else |
Azure.IoT Build | 0:ef4901974abc | 106 | { |
AzureIoTClient | 13:3c202001e4ba | 107 | (void)memcpy(result->appPayload.message, appMsg, appMsgLength); |
Azure.IoT Build | 0:ef4901974abc | 108 | } |
Azure.IoT Build | 0:ef4901974abc | 109 | } |
Azure.IoT Build | 0:ef4901974abc | 110 | else |
Azure.IoT Build | 0:ef4901974abc | 111 | { |
Azure.IoT Build | 0:ef4901974abc | 112 | result->appPayload.message = NULL; |
Azure.IoT Build | 0:ef4901974abc | 113 | } |
Azure.IoT Build | 0:ef4901974abc | 114 | } |
Azure.IoT Build | 0:ef4901974abc | 115 | } |
Azure.IoT Build | 0:ef4901974abc | 116 | } |
Azure.IoT Build | 0:ef4901974abc | 117 | /* Codes_SRS_MQTTMESSAGE_07_004: [If mqttmessage_createMessage succeeds the it shall return a NON-NULL MQTT_MESSAGE_HANDLE value.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 118 | return (MQTT_MESSAGE_HANDLE)result; |
Azure.IoT Build | 0:ef4901974abc | 119 | } |
Azure.IoT Build | 0:ef4901974abc | 120 | |
Azure.IoT Build | 0:ef4901974abc | 121 | void mqttmessage_destroy(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 122 | { |
Azure.IoT Build | 0:ef4901974abc | 123 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 124 | /* Codes_SRS_MQTTMESSAGE_07_005: [If the handle parameter is NULL then mqttmessage_destroyMessage shall do nothing] */ |
Azure.IoT Build | 0:ef4901974abc | 125 | if (msgInfo != NULL) |
Azure.IoT Build | 0:ef4901974abc | 126 | { |
Azure.IoT Build | 0:ef4901974abc | 127 | /* Codes_SRS_MQTTMESSAGE_07_006: [mqttmessage_destroyMessage shall free all resources associated with the MQTT_MESSAGE_HANDLE value] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 128 | if (msgInfo->topicName != NULL) |
AzureIoTClient | 18:6d13ad04e8a0 | 129 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 130 | free(msgInfo->topicName); |
AzureIoTClient | 18:6d13ad04e8a0 | 131 | } |
Azure.IoT Build | 0:ef4901974abc | 132 | if (msgInfo->appPayload.message != NULL) |
Azure.IoT Build | 0:ef4901974abc | 133 | { |
Azure.IoT Build | 0:ef4901974abc | 134 | free(msgInfo->appPayload.message); |
Azure.IoT Build | 0:ef4901974abc | 135 | } |
Azure.IoT Build | 0:ef4901974abc | 136 | free(msgInfo); |
Azure.IoT Build | 0:ef4901974abc | 137 | } |
Azure.IoT Build | 0:ef4901974abc | 138 | } |
Azure.IoT Build | 0:ef4901974abc | 139 | |
Azure.IoT Build | 0:ef4901974abc | 140 | MQTT_MESSAGE_HANDLE mqttmessage_clone(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 141 | { |
Azure.IoT Build | 0:ef4901974abc | 142 | MQTT_MESSAGE_HANDLE result; |
Azure.IoT Build | 0:ef4901974abc | 143 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 144 | { |
Azure.IoT Build | 0:ef4901974abc | 145 | /* Codes_SRS_MQTTMESSAGE_07_007: [If handle parameter is NULL then mqttmessage_clone shall return NULL.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 146 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 147 | result = NULL; |
Azure.IoT Build | 0:ef4901974abc | 148 | } |
Azure.IoT Build | 0:ef4901974abc | 149 | else |
Azure.IoT Build | 0:ef4901974abc | 150 | { |
Azure.IoT Build | 0:ef4901974abc | 151 | /* 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 | 152 | MQTT_MESSAGE* mqtt_message = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 153 | 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 | 154 | if (result != NULL) |
Azure.IoT Build | 0:ef4901974abc | 155 | { |
Azure.IoT Build | 0:ef4901974abc | 156 | (void)mqttmessage_setIsDuplicateMsg(result, mqtt_message->isDuplicateMsg); |
Azure.IoT Build | 0:ef4901974abc | 157 | (void)mqttmessage_setIsRetained(result, mqtt_message->isMessageRetained); |
Azure.IoT Build | 0:ef4901974abc | 158 | } |
Azure.IoT Build | 0:ef4901974abc | 159 | } |
Azure.IoT Build | 0:ef4901974abc | 160 | return result; |
Azure.IoT Build | 0:ef4901974abc | 161 | } |
Azure.IoT Build | 0:ef4901974abc | 162 | |
Azure.IoT Build | 0:ef4901974abc | 163 | uint16_t mqttmessage_getPacketId(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 164 | { |
Azure.IoT Build | 0:ef4901974abc | 165 | uint16_t result; |
Azure.IoT Build | 0:ef4901974abc | 166 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 167 | { |
Azure.IoT Build | 0:ef4901974abc | 168 | /* Codes_SRS_MQTTMESSAGE_07_010: [If handle is NULL then mqttmessage_getPacketId shall return 0.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 169 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 170 | result = 0; |
Azure.IoT Build | 0:ef4901974abc | 171 | } |
Azure.IoT Build | 0:ef4901974abc | 172 | else |
Azure.IoT Build | 0:ef4901974abc | 173 | { |
Azure.IoT Build | 0:ef4901974abc | 174 | /* Codes_SRS_MQTTMESSAGE_07_011: [mqttmessage_getPacketId shall return the packetId value contained in MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 175 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 176 | result = msgInfo->packetId; |
Azure.IoT Build | 0:ef4901974abc | 177 | } |
Azure.IoT Build | 0:ef4901974abc | 178 | return result; |
Azure.IoT Build | 0:ef4901974abc | 179 | } |
Azure.IoT Build | 0:ef4901974abc | 180 | |
Azure.IoT Build | 0:ef4901974abc | 181 | const char* mqttmessage_getTopicName(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 182 | { |
Azure.IoT Build | 0:ef4901974abc | 183 | const char* result; |
Azure.IoT Build | 0:ef4901974abc | 184 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 185 | { |
Azure.IoT Build | 0:ef4901974abc | 186 | /* Codes_SRS_MQTTMESSAGE_07_012: [If handle is NULL then mqttmessage_getTopicName shall return a NULL string.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 187 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 188 | result = NULL; |
Azure.IoT Build | 0:ef4901974abc | 189 | } |
Azure.IoT Build | 0:ef4901974abc | 190 | else |
Azure.IoT Build | 0:ef4901974abc | 191 | { |
Azure.IoT Build | 0:ef4901974abc | 192 | /* Codes_SRS_MQTTMESSAGE_07_013: [mqttmessage_getTopicName shall return the topicName contained in MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 193 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
AzureIoTClient | 18:6d13ad04e8a0 | 194 | if (msgInfo->topicName == NULL) |
AzureIoTClient | 18:6d13ad04e8a0 | 195 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 196 | result = msgInfo->const_topic_name; |
AzureIoTClient | 18:6d13ad04e8a0 | 197 | } |
AzureIoTClient | 18:6d13ad04e8a0 | 198 | else |
AzureIoTClient | 18:6d13ad04e8a0 | 199 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 200 | result = msgInfo->topicName; |
AzureIoTClient | 18:6d13ad04e8a0 | 201 | } |
Azure.IoT Build | 0:ef4901974abc | 202 | } |
Azure.IoT Build | 0:ef4901974abc | 203 | return result; |
Azure.IoT Build | 0:ef4901974abc | 204 | } |
Azure.IoT Build | 0:ef4901974abc | 205 | |
Azure.IoT Build | 0:ef4901974abc | 206 | QOS_VALUE mqttmessage_getQosType(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 207 | { |
Azure.IoT Build | 0:ef4901974abc | 208 | QOS_VALUE result; |
Azure.IoT Build | 0:ef4901974abc | 209 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 210 | { |
Azure.IoT Build | 0:ef4901974abc | 211 | /* Codes_SRS_MQTTMESSAGE_07_014: [If handle is NULL then mqttmessage_getQosType shall return the default DELIVER_AT_MOST_ONCE value.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 212 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 213 | result = DELIVER_AT_MOST_ONCE; |
Azure.IoT Build | 0:ef4901974abc | 214 | } |
Azure.IoT Build | 0:ef4901974abc | 215 | else |
Azure.IoT Build | 0:ef4901974abc | 216 | { |
Azure.IoT Build | 0:ef4901974abc | 217 | /* Codes_SRS_MQTTMESSAGE_07_015: [mqttmessage_getQosType shall return the QOS Type value contained in MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 218 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 219 | result = msgInfo->qosInfo; |
Azure.IoT Build | 0:ef4901974abc | 220 | } |
Azure.IoT Build | 0:ef4901974abc | 221 | return result; |
Azure.IoT Build | 0:ef4901974abc | 222 | } |
Azure.IoT Build | 0:ef4901974abc | 223 | |
Azure.IoT Build | 0:ef4901974abc | 224 | bool mqttmessage_getIsDuplicateMsg(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 225 | { |
Azure.IoT Build | 0:ef4901974abc | 226 | bool result; |
Azure.IoT Build | 0:ef4901974abc | 227 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 228 | { |
Azure.IoT Build | 0:ef4901974abc | 229 | /* Codes_SRS_MQTTMESSAGE_07_016: [If handle is NULL then mqttmessage_getIsDuplicateMsg shall return false.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 230 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 231 | result = false; |
Azure.IoT Build | 0:ef4901974abc | 232 | } |
Azure.IoT Build | 0:ef4901974abc | 233 | else |
Azure.IoT Build | 0:ef4901974abc | 234 | { |
Azure.IoT Build | 0:ef4901974abc | 235 | /* Codes_SRS_MQTTMESSAGE_07_017: [mqttmessage_getIsDuplicateMsg shall return the isDuplicateMsg value contained in MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 236 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 237 | result = msgInfo->isDuplicateMsg; |
Azure.IoT Build | 0:ef4901974abc | 238 | } |
Azure.IoT Build | 0:ef4901974abc | 239 | return result; |
Azure.IoT Build | 0:ef4901974abc | 240 | } |
Azure.IoT Build | 0:ef4901974abc | 241 | |
Azure.IoT Build | 0:ef4901974abc | 242 | bool mqttmessage_getIsRetained(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 243 | { |
Azure.IoT Build | 0:ef4901974abc | 244 | bool result; |
Azure.IoT Build | 0:ef4901974abc | 245 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 246 | { |
Azure.IoT Build | 0:ef4901974abc | 247 | /* Codes_SRS_MQTTMESSAGE_07_018: [If handle is NULL then mqttmessage_getIsRetained shall return false.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 248 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 249 | result = false; |
Azure.IoT Build | 0:ef4901974abc | 250 | } |
Azure.IoT Build | 0:ef4901974abc | 251 | else |
Azure.IoT Build | 0:ef4901974abc | 252 | { |
Azure.IoT Build | 0:ef4901974abc | 253 | /* Codes_SRS_MQTTMESSAGE_07_019: [mqttmessage_getIsRetained shall return the isRetained value contained in MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 254 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 255 | result = msgInfo->isMessageRetained; |
Azure.IoT Build | 0:ef4901974abc | 256 | } |
Azure.IoT Build | 0:ef4901974abc | 257 | return result; |
Azure.IoT Build | 0:ef4901974abc | 258 | } |
Azure.IoT Build | 0:ef4901974abc | 259 | |
Azure.IoT Build | 0:ef4901974abc | 260 | int mqttmessage_setIsDuplicateMsg(MQTT_MESSAGE_HANDLE handle, bool duplicateMsg) |
Azure.IoT Build | 0:ef4901974abc | 261 | { |
Azure.IoT Build | 0:ef4901974abc | 262 | int result; |
Azure.IoT Build | 0:ef4901974abc | 263 | /* Codes_SRS_MQTTMESSAGE_07_022: [If handle is NULL then mqttmessage_setIsDuplicateMsg shall return a non-zero value.] */ |
Azure.IoT Build | 0:ef4901974abc | 264 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 265 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 266 | LogError("Invalid Parameter handle: %p.", handle); |
AzureIoTClient | 15:ec5a36121959 | 267 | result = __FAILURE__; |
Azure.IoT Build | 0:ef4901974abc | 268 | } |
Azure.IoT Build | 0:ef4901974abc | 269 | else |
Azure.IoT Build | 0:ef4901974abc | 270 | { |
Azure.IoT Build | 0:ef4901974abc | 271 | /* Codes_SRS_MQTTMESSAGE_07_023: [mqttmessage_setIsDuplicateMsg shall store the duplicateMsg value in the MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 272 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 273 | msgInfo->isDuplicateMsg = duplicateMsg; |
Azure.IoT Build | 0:ef4901974abc | 274 | result = 0; |
Azure.IoT Build | 0:ef4901974abc | 275 | } |
Azure.IoT Build | 0:ef4901974abc | 276 | return result; |
Azure.IoT Build | 0:ef4901974abc | 277 | } |
Azure.IoT Build | 0:ef4901974abc | 278 | |
Azure.IoT Build | 0:ef4901974abc | 279 | int mqttmessage_setIsRetained(MQTT_MESSAGE_HANDLE handle, bool retainMsg) |
Azure.IoT Build | 0:ef4901974abc | 280 | { |
Azure.IoT Build | 0:ef4901974abc | 281 | int result; |
Azure.IoT Build | 0:ef4901974abc | 282 | /* Codes_SRS_MQTTMESSAGE_07_024: [If handle is NULL then mqttmessage_setIsRetained shall return a non-zero value.] */ |
Azure.IoT Build | 0:ef4901974abc | 283 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 284 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 285 | LogError("Invalid Parameter handle: %p.", handle); |
AzureIoTClient | 15:ec5a36121959 | 286 | result = __FAILURE__; |
Azure.IoT Build | 0:ef4901974abc | 287 | } |
Azure.IoT Build | 0:ef4901974abc | 288 | else |
Azure.IoT Build | 0:ef4901974abc | 289 | { |
Azure.IoT Build | 0:ef4901974abc | 290 | /* Codes_SRS_MQTTMESSAGE_07_025: [mqttmessage_setIsRetained shall store the retainMsg value in the MQTT_MESSAGE_HANDLE handle.] */ |
Azure.IoT Build | 0:ef4901974abc | 291 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
Azure.IoT Build | 0:ef4901974abc | 292 | msgInfo->isMessageRetained = retainMsg; |
Azure.IoT Build | 0:ef4901974abc | 293 | result = 0; |
Azure.IoT Build | 0:ef4901974abc | 294 | } |
Azure.IoT Build | 0:ef4901974abc | 295 | return result; |
Azure.IoT Build | 0:ef4901974abc | 296 | } |
Azure.IoT Build | 0:ef4901974abc | 297 | |
Azure.IoT Build | 0:ef4901974abc | 298 | const APP_PAYLOAD* mqttmessage_getApplicationMsg(MQTT_MESSAGE_HANDLE handle) |
Azure.IoT Build | 0:ef4901974abc | 299 | { |
Azure.IoT Build | 0:ef4901974abc | 300 | const APP_PAYLOAD* result; |
Azure.IoT Build | 0:ef4901974abc | 301 | if (handle == NULL) |
Azure.IoT Build | 0:ef4901974abc | 302 | { |
Azure.IoT Build | 0:ef4901974abc | 303 | /* Codes_SRS_MQTTMESSAGE_07_020: [If handle is NULL or if msgLen is 0 then mqttmessage_getApplicationMsg shall return NULL.] */ |
AzureIoTClient | 18:6d13ad04e8a0 | 304 | LogError("Invalid Parameter handle: %p.", handle); |
Azure.IoT Build | 0:ef4901974abc | 305 | result = NULL; |
Azure.IoT Build | 0:ef4901974abc | 306 | } |
Azure.IoT Build | 0:ef4901974abc | 307 | else |
Azure.IoT Build | 0:ef4901974abc | 308 | { |
Azure.IoT Build | 0:ef4901974abc | 309 | /* 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 | 310 | MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle; |
AzureIoTClient | 18:6d13ad04e8a0 | 311 | if (msgInfo->const_payload.length > 0) |
AzureIoTClient | 18:6d13ad04e8a0 | 312 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 313 | result = &msgInfo->const_payload; |
AzureIoTClient | 18:6d13ad04e8a0 | 314 | } |
AzureIoTClient | 18:6d13ad04e8a0 | 315 | else |
AzureIoTClient | 18:6d13ad04e8a0 | 316 | { |
AzureIoTClient | 18:6d13ad04e8a0 | 317 | result = &msgInfo->appPayload; |
AzureIoTClient | 18:6d13ad04e8a0 | 318 | } |
Azure.IoT Build | 0:ef4901974abc | 319 | } |
Azure.IoT Build | 0:ef4901974abc | 320 | return result; |
Azure.IoT Build | 0:ef4901974abc | 321 | } |