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@20:a8254fa69b6c, 2017-10-21 (annotated)
- Committer:
- AzureIoTClient
- Date:
- Sat Oct 21 20:12:49 2017 +0000
- Revision:
- 20:a8254fa69b6c
- Parent:
- 18:6d13ad04e8a0
- Child:
- 30:712bcbf21afa
1.1.26
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.] */ |
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 | 20:a8254fa69b6c | 102 | LogError("Failure allocating message value of %uz", 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 | } |