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