Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

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?

UserRevisionLine numberNew 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_c_shared_utility/optimize_size.h"
XinZhangMS 0:f7f1f0d76dd6 6 #include "azure_c_shared_utility/gballoc.h"
XinZhangMS 0:f7f1f0d76dd6 7 #include "azure_c_shared_utility/xlogging.h"
XinZhangMS 0:f7f1f0d76dd6 8 #include "azure_c_shared_utility/buffer_.h"
XinZhangMS 0:f7f1f0d76dd6 9
XinZhangMS 0:f7f1f0d76dd6 10 #include "iothub_message.h"
XinZhangMS 0:f7f1f0d76dd6 11
XinZhangMS 0:f7f1f0d76dd6 12 DEFINE_ENUM_STRINGS(IOTHUB_MESSAGE_RESULT, IOTHUB_MESSAGE_RESULT_VALUES);
XinZhangMS 0:f7f1f0d76dd6 13 DEFINE_ENUM_STRINGS(IOTHUBMESSAGE_CONTENT_TYPE, IOTHUBMESSAGE_CONTENT_TYPE_VALUES);
XinZhangMS 0:f7f1f0d76dd6 14
XinZhangMS 0:f7f1f0d76dd6 15 #define LOG_IOTHUB_MESSAGE_ERROR() \
XinZhangMS 0:f7f1f0d76dd6 16 LogError("(result = %s)", ENUM_TO_STRING(IOTHUB_MESSAGE_RESULT, result));
XinZhangMS 0:f7f1f0d76dd6 17
XinZhangMS 0:f7f1f0d76dd6 18 typedef struct IOTHUB_MESSAGE_HANDLE_DATA_TAG
XinZhangMS 0:f7f1f0d76dd6 19 {
XinZhangMS 0:f7f1f0d76dd6 20 IOTHUBMESSAGE_CONTENT_TYPE contentType;
XinZhangMS 0:f7f1f0d76dd6 21 union
XinZhangMS 0:f7f1f0d76dd6 22 {
XinZhangMS 0:f7f1f0d76dd6 23 BUFFER_HANDLE byteArray;
XinZhangMS 0:f7f1f0d76dd6 24 STRING_HANDLE string;
XinZhangMS 0:f7f1f0d76dd6 25 } value;
XinZhangMS 0:f7f1f0d76dd6 26 MAP_HANDLE properties;
XinZhangMS 0:f7f1f0d76dd6 27 char* messageId;
XinZhangMS 0:f7f1f0d76dd6 28 char* correlationId;
XinZhangMS 0:f7f1f0d76dd6 29 char* userDefinedContentType;
XinZhangMS 0:f7f1f0d76dd6 30 char* contentEncoding;
XinZhangMS 0:f7f1f0d76dd6 31 char* outputName;
XinZhangMS 0:f7f1f0d76dd6 32 char* inputName;
XinZhangMS 0:f7f1f0d76dd6 33 char* connectionModuleId;
XinZhangMS 0:f7f1f0d76dd6 34 char* connectionDeviceId;
XinZhangMS 0:f7f1f0d76dd6 35 IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE diagnosticData;
XinZhangMS 0:f7f1f0d76dd6 36 }IOTHUB_MESSAGE_HANDLE_DATA;
XinZhangMS 0:f7f1f0d76dd6 37
XinZhangMS 0:f7f1f0d76dd6 38 static bool ContainsOnlyUsAscii(const char* asciiValue)
XinZhangMS 0:f7f1f0d76dd6 39 {
XinZhangMS 0:f7f1f0d76dd6 40 bool result = true;
XinZhangMS 0:f7f1f0d76dd6 41 const char* iterator = asciiValue;
XinZhangMS 0:f7f1f0d76dd6 42 while (iterator != NULL && *iterator != '\0')
XinZhangMS 0:f7f1f0d76dd6 43 {
XinZhangMS 0:f7f1f0d76dd6 44 // Allow only printable ascii char
XinZhangMS 0:f7f1f0d76dd6 45 if (*iterator < ' ' || *iterator > '~')
XinZhangMS 0:f7f1f0d76dd6 46 {
XinZhangMS 0:f7f1f0d76dd6 47 result = false;
XinZhangMS 0:f7f1f0d76dd6 48 break;
XinZhangMS 0:f7f1f0d76dd6 49 }
XinZhangMS 0:f7f1f0d76dd6 50 iterator++;
XinZhangMS 0:f7f1f0d76dd6 51 }
XinZhangMS 0:f7f1f0d76dd6 52 return result;
XinZhangMS 0:f7f1f0d76dd6 53 }
XinZhangMS 0:f7f1f0d76dd6 54
XinZhangMS 0:f7f1f0d76dd6 55 /* Codes_SRS_IOTHUBMESSAGE_07_008: [ValidateAsciiCharactersFilter shall loop through the mapKey and mapValue strings to ensure that they only contain valid US-Ascii characters Ascii value 32 - 126.] */
XinZhangMS 0:f7f1f0d76dd6 56 static int ValidateAsciiCharactersFilter(const char* mapKey, const char* mapValue)
XinZhangMS 0:f7f1f0d76dd6 57 {
XinZhangMS 0:f7f1f0d76dd6 58 int result;
XinZhangMS 0:f7f1f0d76dd6 59 if (!ContainsOnlyUsAscii(mapKey) || !ContainsOnlyUsAscii(mapValue))
XinZhangMS 0:f7f1f0d76dd6 60 {
XinZhangMS 0:f7f1f0d76dd6 61 result = __FAILURE__;
XinZhangMS 0:f7f1f0d76dd6 62 }
XinZhangMS 0:f7f1f0d76dd6 63 else
XinZhangMS 0:f7f1f0d76dd6 64 {
XinZhangMS 0:f7f1f0d76dd6 65 result = 0;
XinZhangMS 0:f7f1f0d76dd6 66 }
XinZhangMS 0:f7f1f0d76dd6 67 return result;
XinZhangMS 0:f7f1f0d76dd6 68 }
XinZhangMS 0:f7f1f0d76dd6 69
XinZhangMS 0:f7f1f0d76dd6 70 static void DestroyDiagnosticPropertyData(IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE diagnosticHandle)
XinZhangMS 0:f7f1f0d76dd6 71 {
XinZhangMS 0:f7f1f0d76dd6 72 if (diagnosticHandle != NULL)
XinZhangMS 0:f7f1f0d76dd6 73 {
XinZhangMS 0:f7f1f0d76dd6 74 free(diagnosticHandle->diagnosticId);
XinZhangMS 0:f7f1f0d76dd6 75 free(diagnosticHandle->diagnosticCreationTimeUtc);
XinZhangMS 0:f7f1f0d76dd6 76 }
XinZhangMS 0:f7f1f0d76dd6 77 free(diagnosticHandle);
XinZhangMS 0:f7f1f0d76dd6 78 }
XinZhangMS 0:f7f1f0d76dd6 79
XinZhangMS 0:f7f1f0d76dd6 80 static void DestroyMessageData(IOTHUB_MESSAGE_HANDLE_DATA* handleData)
XinZhangMS 0:f7f1f0d76dd6 81 {
XinZhangMS 0:f7f1f0d76dd6 82 if (handleData->contentType == IOTHUBMESSAGE_BYTEARRAY)
XinZhangMS 0:f7f1f0d76dd6 83 {
XinZhangMS 0:f7f1f0d76dd6 84 BUFFER_delete(handleData->value.byteArray);
XinZhangMS 0:f7f1f0d76dd6 85 }
XinZhangMS 0:f7f1f0d76dd6 86 else if (handleData->contentType == IOTHUBMESSAGE_STRING)
XinZhangMS 0:f7f1f0d76dd6 87 {
XinZhangMS 0:f7f1f0d76dd6 88 STRING_delete(handleData->value.string);
XinZhangMS 0:f7f1f0d76dd6 89 }
XinZhangMS 0:f7f1f0d76dd6 90
XinZhangMS 0:f7f1f0d76dd6 91 Map_Destroy(handleData->properties);
XinZhangMS 0:f7f1f0d76dd6 92 free(handleData->messageId);
XinZhangMS 0:f7f1f0d76dd6 93 handleData->messageId = NULL;
XinZhangMS 0:f7f1f0d76dd6 94 free(handleData->correlationId);
XinZhangMS 0:f7f1f0d76dd6 95 handleData->correlationId = NULL;
XinZhangMS 0:f7f1f0d76dd6 96 free(handleData->userDefinedContentType);
XinZhangMS 0:f7f1f0d76dd6 97 free(handleData->contentEncoding);
XinZhangMS 0:f7f1f0d76dd6 98 DestroyDiagnosticPropertyData(handleData->diagnosticData);
XinZhangMS 0:f7f1f0d76dd6 99 free(handleData->outputName);
XinZhangMS 0:f7f1f0d76dd6 100 free(handleData->inputName);
XinZhangMS 0:f7f1f0d76dd6 101 free(handleData->connectionModuleId);
XinZhangMS 0:f7f1f0d76dd6 102 free(handleData->connectionDeviceId);
XinZhangMS 0:f7f1f0d76dd6 103 free(handleData);
XinZhangMS 0:f7f1f0d76dd6 104 }
XinZhangMS 0:f7f1f0d76dd6 105
XinZhangMS 0:f7f1f0d76dd6 106 static IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE CloneDiagnosticPropertyData(const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* source)
XinZhangMS 0:f7f1f0d76dd6 107 {
XinZhangMS 0:f7f1f0d76dd6 108 IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE result = NULL;
XinZhangMS 0:f7f1f0d76dd6 109 if (source == NULL)
XinZhangMS 0:f7f1f0d76dd6 110 {
XinZhangMS 0:f7f1f0d76dd6 111 LogError("Invalid argument - source is NULL");
XinZhangMS 0:f7f1f0d76dd6 112 }
XinZhangMS 0:f7f1f0d76dd6 113 else
XinZhangMS 0:f7f1f0d76dd6 114 {
XinZhangMS 0:f7f1f0d76dd6 115 result = (IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE)malloc(sizeof(IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA));
XinZhangMS 0:f7f1f0d76dd6 116 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 117 {
XinZhangMS 0:f7f1f0d76dd6 118 LogError("malloc failed");
XinZhangMS 0:f7f1f0d76dd6 119 }
XinZhangMS 0:f7f1f0d76dd6 120 else
XinZhangMS 0:f7f1f0d76dd6 121 {
XinZhangMS 0:f7f1f0d76dd6 122 result->diagnosticCreationTimeUtc = NULL;
XinZhangMS 0:f7f1f0d76dd6 123 result->diagnosticId = NULL;
XinZhangMS 0:f7f1f0d76dd6 124 if (source->diagnosticCreationTimeUtc != NULL && mallocAndStrcpy_s(&result->diagnosticCreationTimeUtc, source->diagnosticCreationTimeUtc) != 0)
XinZhangMS 0:f7f1f0d76dd6 125 {
XinZhangMS 0:f7f1f0d76dd6 126 LogError("mallocAndStrcpy_s for diagnosticCreationTimeUtc failed");
XinZhangMS 0:f7f1f0d76dd6 127 free(result);
XinZhangMS 0:f7f1f0d76dd6 128 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 129 }
XinZhangMS 0:f7f1f0d76dd6 130 else if (source->diagnosticId != NULL && mallocAndStrcpy_s(&result->diagnosticId, source->diagnosticId) != 0)
XinZhangMS 0:f7f1f0d76dd6 131 {
XinZhangMS 0:f7f1f0d76dd6 132 LogError("mallocAndStrcpy_s for diagnosticId failed");
XinZhangMS 0:f7f1f0d76dd6 133 free(result->diagnosticCreationTimeUtc);
XinZhangMS 0:f7f1f0d76dd6 134 free(result);
XinZhangMS 0:f7f1f0d76dd6 135 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 136 }
XinZhangMS 0:f7f1f0d76dd6 137 }
XinZhangMS 0:f7f1f0d76dd6 138 }
XinZhangMS 0:f7f1f0d76dd6 139 return result;
XinZhangMS 0:f7f1f0d76dd6 140 }
XinZhangMS 0:f7f1f0d76dd6 141
XinZhangMS 0:f7f1f0d76dd6 142 IOTHUB_MESSAGE_HANDLE IoTHubMessage_CreateFromByteArray(const unsigned char* byteArray, size_t size)
XinZhangMS 0:f7f1f0d76dd6 143 {
XinZhangMS 0:f7f1f0d76dd6 144 IOTHUB_MESSAGE_HANDLE_DATA* result;
XinZhangMS 0:f7f1f0d76dd6 145 if ((byteArray == NULL) && (size != 0))
XinZhangMS 0:f7f1f0d76dd6 146 {
XinZhangMS 0:f7f1f0d76dd6 147 LogError("Invalid argument - byteArray is NULL");
XinZhangMS 0:f7f1f0d76dd6 148 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 149 }
XinZhangMS 0:f7f1f0d76dd6 150 else
XinZhangMS 0:f7f1f0d76dd6 151 {
XinZhangMS 0:f7f1f0d76dd6 152 result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
XinZhangMS 0:f7f1f0d76dd6 153 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 154 {
XinZhangMS 0:f7f1f0d76dd6 155 LogError("unable to malloc");
XinZhangMS 0:f7f1f0d76dd6 156 /*Codes_SRS_IOTHUBMESSAGE_02_024: [If there are any errors then IoTHubMessage_CreateFromByteArray shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 157 /*let it go through*/
XinZhangMS 0:f7f1f0d76dd6 158 }
XinZhangMS 0:f7f1f0d76dd6 159 else
XinZhangMS 0:f7f1f0d76dd6 160 {
XinZhangMS 0:f7f1f0d76dd6 161 const unsigned char* source;
XinZhangMS 0:f7f1f0d76dd6 162 unsigned char temp = 0x00;
XinZhangMS 0:f7f1f0d76dd6 163
XinZhangMS 0:f7f1f0d76dd6 164 memset(result, 0, sizeof(*result));
XinZhangMS 0:f7f1f0d76dd6 165 /*Codes_SRS_IOTHUBMESSAGE_02_026: [The type of the new message shall be IOTHUBMESSAGE_BYTEARRAY.] */
XinZhangMS 0:f7f1f0d76dd6 166 result->contentType = IOTHUBMESSAGE_BYTEARRAY;
XinZhangMS 0:f7f1f0d76dd6 167
XinZhangMS 0:f7f1f0d76dd6 168 if (size != 0)
XinZhangMS 0:f7f1f0d76dd6 169 {
XinZhangMS 0:f7f1f0d76dd6 170 /*Codes_SRS_IOTHUBMESSAGE_06_002: [If size is NOT zero then byteArray MUST NOT be NULL*/
XinZhangMS 0:f7f1f0d76dd6 171 if (byteArray == NULL)
XinZhangMS 0:f7f1f0d76dd6 172 {
XinZhangMS 0:f7f1f0d76dd6 173 LogError("Attempted to create a Hub Message from a NULL pointer!");
XinZhangMS 0:f7f1f0d76dd6 174 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 175 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 176 source = NULL;
XinZhangMS 0:f7f1f0d76dd6 177 }
XinZhangMS 0:f7f1f0d76dd6 178 else
XinZhangMS 0:f7f1f0d76dd6 179 {
XinZhangMS 0:f7f1f0d76dd6 180 source = byteArray;
XinZhangMS 0:f7f1f0d76dd6 181 }
XinZhangMS 0:f7f1f0d76dd6 182 }
XinZhangMS 0:f7f1f0d76dd6 183 else
XinZhangMS 0:f7f1f0d76dd6 184 {
XinZhangMS 0:f7f1f0d76dd6 185 /*Codes_SRS_IOTHUBMESSAGE_06_001: [If size is zero then byteArray may be NULL.]*/
XinZhangMS 0:f7f1f0d76dd6 186 source = &temp;
XinZhangMS 0:f7f1f0d76dd6 187 }
XinZhangMS 0:f7f1f0d76dd6 188 if (result != NULL)
XinZhangMS 0:f7f1f0d76dd6 189 {
XinZhangMS 0:f7f1f0d76dd6 190 /*Codes_SRS_IOTHUBMESSAGE_02_022: [IoTHubMessage_CreateFromByteArray shall call BUFFER_create passing byteArray and size as parameters.] */
XinZhangMS 0:f7f1f0d76dd6 191 if ((result->value.byteArray = BUFFER_create(source, size)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 192 {
XinZhangMS 0:f7f1f0d76dd6 193 LogError("BUFFER_create failed");
XinZhangMS 0:f7f1f0d76dd6 194 /*Codes_SRS_IOTHUBMESSAGE_02_024: [If there are any errors then IoTHubMessage_CreateFromByteArray shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 195 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 196 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 197 }
XinZhangMS 0:f7f1f0d76dd6 198 /*Codes_SRS_IOTHUBMESSAGE_02_023: [IoTHubMessage_CreateFromByteArray shall call Map_Create to create the message properties.] */
XinZhangMS 0:f7f1f0d76dd6 199 else if ((result->properties = Map_Create(ValidateAsciiCharactersFilter)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 200 {
XinZhangMS 0:f7f1f0d76dd6 201 LogError("Map_Create for properties failed");
XinZhangMS 0:f7f1f0d76dd6 202 /*Codes_SRS_IOTHUBMESSAGE_02_024: [If there are any errors then IoTHubMessage_CreateFromByteArray shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 203 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 204 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 205 }
XinZhangMS 0:f7f1f0d76dd6 206 /*Codes_SRS_IOTHUBMESSAGE_02_025: [Otherwise, IoTHubMessage_CreateFromByteArray shall return a non-NULL handle.] */
XinZhangMS 0:f7f1f0d76dd6 207 }
XinZhangMS 0:f7f1f0d76dd6 208 }
XinZhangMS 0:f7f1f0d76dd6 209 }
XinZhangMS 0:f7f1f0d76dd6 210 return result;
XinZhangMS 0:f7f1f0d76dd6 211 }
XinZhangMS 0:f7f1f0d76dd6 212
XinZhangMS 0:f7f1f0d76dd6 213 IOTHUB_MESSAGE_HANDLE IoTHubMessage_CreateFromString(const char* source)
XinZhangMS 0:f7f1f0d76dd6 214 {
XinZhangMS 0:f7f1f0d76dd6 215 IOTHUB_MESSAGE_HANDLE_DATA* result;
XinZhangMS 0:f7f1f0d76dd6 216 if (source == NULL)
XinZhangMS 0:f7f1f0d76dd6 217 {
XinZhangMS 0:f7f1f0d76dd6 218 LogError("Invalid argument - source is NULL");
XinZhangMS 0:f7f1f0d76dd6 219 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 220 }
XinZhangMS 0:f7f1f0d76dd6 221 else
XinZhangMS 0:f7f1f0d76dd6 222 {
XinZhangMS 0:f7f1f0d76dd6 223 result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
XinZhangMS 0:f7f1f0d76dd6 224 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 225 {
XinZhangMS 0:f7f1f0d76dd6 226 LogError("malloc failed");
XinZhangMS 0:f7f1f0d76dd6 227 /*Codes_SRS_IOTHUBMESSAGE_02_029: [If there are any encountered in the execution of IoTHubMessage_CreateFromString then IoTHubMessage_CreateFromString shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 228 /*let it go through*/
XinZhangMS 0:f7f1f0d76dd6 229 }
XinZhangMS 0:f7f1f0d76dd6 230 else
XinZhangMS 0:f7f1f0d76dd6 231 {
XinZhangMS 0:f7f1f0d76dd6 232 memset(result, 0, sizeof(*result));
XinZhangMS 0:f7f1f0d76dd6 233 /*Codes_SRS_IOTHUBMESSAGE_02_032: [The type of the new message shall be IOTHUBMESSAGE_STRING.] */
XinZhangMS 0:f7f1f0d76dd6 234 result->contentType = IOTHUBMESSAGE_STRING;
XinZhangMS 0:f7f1f0d76dd6 235
XinZhangMS 0:f7f1f0d76dd6 236 /*Codes_SRS_IOTHUBMESSAGE_02_027: [IoTHubMessage_CreateFromString shall call STRING_construct passing source as parameter.] */
XinZhangMS 0:f7f1f0d76dd6 237 if ((result->value.string = STRING_construct(source)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 238 {
XinZhangMS 0:f7f1f0d76dd6 239 LogError("STRING_construct failed");
XinZhangMS 0:f7f1f0d76dd6 240 /*Codes_SRS_IOTHUBMESSAGE_02_029: [If there are any encountered in the execution of IoTHubMessage_CreateFromString then IoTHubMessage_CreateFromString shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 241 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 242 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 243 }
XinZhangMS 0:f7f1f0d76dd6 244 /*Codes_SRS_IOTHUBMESSAGE_02_028: [IoTHubMessage_CreateFromString shall call Map_Create to create the message properties.] */
XinZhangMS 0:f7f1f0d76dd6 245 else if ((result->properties = Map_Create(ValidateAsciiCharactersFilter)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 246 {
XinZhangMS 0:f7f1f0d76dd6 247 LogError("Map_Create for properties failed");
XinZhangMS 0:f7f1f0d76dd6 248 /*Codes_SRS_IOTHUBMESSAGE_02_029: [If there are any encountered in the execution of IoTHubMessage_CreateFromString then IoTHubMessage_CreateFromString shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 249 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 250 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 251 }
XinZhangMS 0:f7f1f0d76dd6 252 /*Codes_SRS_IOTHUBMESSAGE_02_031: [Otherwise, IoTHubMessage_CreateFromString shall return a non-NULL handle.] */
XinZhangMS 0:f7f1f0d76dd6 253 }
XinZhangMS 0:f7f1f0d76dd6 254 }
XinZhangMS 0:f7f1f0d76dd6 255 return result;
XinZhangMS 0:f7f1f0d76dd6 256 }
XinZhangMS 0:f7f1f0d76dd6 257
XinZhangMS 0:f7f1f0d76dd6 258 /*Codes_SRS_IOTHUBMESSAGE_03_001: [IoTHubMessage_Clone shall create a new IoT hub message with data content identical to that of the iotHubMessageHandle parameter.]*/
XinZhangMS 0:f7f1f0d76dd6 259 IOTHUB_MESSAGE_HANDLE IoTHubMessage_Clone(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 260 {
XinZhangMS 0:f7f1f0d76dd6 261 IOTHUB_MESSAGE_HANDLE_DATA* result;
XinZhangMS 0:f7f1f0d76dd6 262 const IOTHUB_MESSAGE_HANDLE_DATA* source = (const IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 263 /* Codes_SRS_IOTHUBMESSAGE_03_005: [IoTHubMessage_Clone shall return NULL if iotHubMessageHandle is NULL.] */
XinZhangMS 0:f7f1f0d76dd6 264 if (source == NULL)
XinZhangMS 0:f7f1f0d76dd6 265 {
XinZhangMS 0:f7f1f0d76dd6 266 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 267 LogError("iotHubMessageHandle parameter cannot be NULL for IoTHubMessage_Clone");
XinZhangMS 0:f7f1f0d76dd6 268 }
XinZhangMS 0:f7f1f0d76dd6 269 else
XinZhangMS 0:f7f1f0d76dd6 270 {
XinZhangMS 0:f7f1f0d76dd6 271 result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
XinZhangMS 0:f7f1f0d76dd6 272 /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
XinZhangMS 0:f7f1f0d76dd6 273 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 274 {
XinZhangMS 0:f7f1f0d76dd6 275 /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
XinZhangMS 0:f7f1f0d76dd6 276 /*do nothing and return as is*/
XinZhangMS 0:f7f1f0d76dd6 277 LogError("unable to malloc");
XinZhangMS 0:f7f1f0d76dd6 278 }
XinZhangMS 0:f7f1f0d76dd6 279 else
XinZhangMS 0:f7f1f0d76dd6 280 {
XinZhangMS 0:f7f1f0d76dd6 281 memset(result, 0, sizeof(*result));
XinZhangMS 0:f7f1f0d76dd6 282 result->contentType = source->contentType;
XinZhangMS 0:f7f1f0d76dd6 283
XinZhangMS 0:f7f1f0d76dd6 284 if (source->messageId != NULL && mallocAndStrcpy_s(&result->messageId, source->messageId) != 0)
XinZhangMS 0:f7f1f0d76dd6 285 {
XinZhangMS 0:f7f1f0d76dd6 286 LogError("unable to Copy messageId");
XinZhangMS 0:f7f1f0d76dd6 287 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 288 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 289 }
XinZhangMS 0:f7f1f0d76dd6 290 else if (source->correlationId != NULL && mallocAndStrcpy_s(&result->correlationId, source->correlationId) != 0)
XinZhangMS 0:f7f1f0d76dd6 291 {
XinZhangMS 0:f7f1f0d76dd6 292 LogError("unable to Copy correlationId");
XinZhangMS 0:f7f1f0d76dd6 293 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 294 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 295 }
XinZhangMS 0:f7f1f0d76dd6 296 else if (source->userDefinedContentType != NULL && mallocAndStrcpy_s(&result->userDefinedContentType, source->userDefinedContentType) != 0)
XinZhangMS 0:f7f1f0d76dd6 297 {
XinZhangMS 0:f7f1f0d76dd6 298 LogError("unable to copy contentType");
XinZhangMS 0:f7f1f0d76dd6 299 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 300 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 301 }
XinZhangMS 0:f7f1f0d76dd6 302 else if (source->contentEncoding != NULL && mallocAndStrcpy_s(&result->contentEncoding, source->contentEncoding) != 0)
XinZhangMS 0:f7f1f0d76dd6 303 {
XinZhangMS 0:f7f1f0d76dd6 304 LogError("unable to copy contentEncoding");
XinZhangMS 0:f7f1f0d76dd6 305 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 306 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 307 }
XinZhangMS 0:f7f1f0d76dd6 308 else if (source->diagnosticData != NULL && (result->diagnosticData = CloneDiagnosticPropertyData(source->diagnosticData)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 309 {
XinZhangMS 0:f7f1f0d76dd6 310 LogError("unable to copy CloneDiagnosticPropertyData");
XinZhangMS 0:f7f1f0d76dd6 311 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 312 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 313 }
XinZhangMS 0:f7f1f0d76dd6 314 else if (source->outputName != NULL && mallocAndStrcpy_s(&result->outputName, source->outputName) != 0)
XinZhangMS 0:f7f1f0d76dd6 315 {
XinZhangMS 0:f7f1f0d76dd6 316 LogError("unable to copy outputName");
XinZhangMS 0:f7f1f0d76dd6 317 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 318 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 319 }
XinZhangMS 0:f7f1f0d76dd6 320 else if (source->inputName != NULL && mallocAndStrcpy_s(&result->inputName, source->inputName) != 0)
XinZhangMS 0:f7f1f0d76dd6 321 {
XinZhangMS 0:f7f1f0d76dd6 322 LogError("unable to copy inputName");
XinZhangMS 0:f7f1f0d76dd6 323 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 324 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 325 }
XinZhangMS 0:f7f1f0d76dd6 326 else if (source->connectionModuleId != NULL && mallocAndStrcpy_s(&result->connectionModuleId, source->connectionModuleId) != 0)
XinZhangMS 0:f7f1f0d76dd6 327 {
XinZhangMS 0:f7f1f0d76dd6 328 LogError("unable to copy inputName");
XinZhangMS 0:f7f1f0d76dd6 329 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 330 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 331 }
XinZhangMS 0:f7f1f0d76dd6 332 else if (source->connectionDeviceId != NULL && mallocAndStrcpy_s(&result->connectionDeviceId, source->connectionDeviceId) != 0)
XinZhangMS 0:f7f1f0d76dd6 333 {
XinZhangMS 0:f7f1f0d76dd6 334 LogError("unable to copy inputName");
XinZhangMS 0:f7f1f0d76dd6 335 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 336 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 337 }
XinZhangMS 0:f7f1f0d76dd6 338 else if (source->contentType == IOTHUBMESSAGE_BYTEARRAY)
XinZhangMS 0:f7f1f0d76dd6 339 {
XinZhangMS 0:f7f1f0d76dd6 340 /*Codes_SRS_IOTHUBMESSAGE_02_006: [IoTHubMessage_Clone shall clone to content by a call to BUFFER_clone] */
XinZhangMS 0:f7f1f0d76dd6 341 if ((result->value.byteArray = BUFFER_clone(source->value.byteArray)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 342 {
XinZhangMS 0:f7f1f0d76dd6 343 /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
XinZhangMS 0:f7f1f0d76dd6 344 LogError("unable to BUFFER_clone");
XinZhangMS 0:f7f1f0d76dd6 345 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 346 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 347 }
XinZhangMS 0:f7f1f0d76dd6 348 /*Codes_SRS_IOTHUBMESSAGE_02_005: [IoTHubMessage_Clone shall clone the properties map by using Map_Clone.] */
XinZhangMS 0:f7f1f0d76dd6 349 else if ((result->properties = Map_Clone(source->properties)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 350 {
XinZhangMS 0:f7f1f0d76dd6 351 /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
XinZhangMS 0:f7f1f0d76dd6 352 LogError("unable to Map_Clone");
XinZhangMS 0:f7f1f0d76dd6 353 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 354 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 355 }
XinZhangMS 0:f7f1f0d76dd6 356 /*Codes_SRS_IOTHUBMESSAGE_03_002: [IoTHubMessage_Clone shall return upon success a non-NULL handle to the newly created IoT hub message.]*/
XinZhangMS 0:f7f1f0d76dd6 357 }
XinZhangMS 0:f7f1f0d76dd6 358 else /*can only be STRING*/
XinZhangMS 0:f7f1f0d76dd6 359 {
XinZhangMS 0:f7f1f0d76dd6 360 /*Codes_SRS_IOTHUBMESSAGE_02_006: [IoTHubMessage_Clone shall clone the content by a call to BUFFER_clone or STRING_clone] */
XinZhangMS 0:f7f1f0d76dd6 361 if ((result->value.string = STRING_clone(source->value.string)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 362 {
XinZhangMS 0:f7f1f0d76dd6 363 /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
XinZhangMS 0:f7f1f0d76dd6 364 LogError("failed to STRING_clone");
XinZhangMS 0:f7f1f0d76dd6 365 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 366 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 367 }
XinZhangMS 0:f7f1f0d76dd6 368 /*Codes_SRS_IOTHUBMESSAGE_02_005: [IoTHubMessage_Clone shall clone the properties map by using Map_Clone.] */
XinZhangMS 0:f7f1f0d76dd6 369 else if ((result->properties = Map_Clone(source->properties)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 370 {
XinZhangMS 0:f7f1f0d76dd6 371 /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
XinZhangMS 0:f7f1f0d76dd6 372 LogError("unable to Map_Clone");
XinZhangMS 0:f7f1f0d76dd6 373 DestroyMessageData(result);
XinZhangMS 0:f7f1f0d76dd6 374 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 375 }
XinZhangMS 0:f7f1f0d76dd6 376 }
XinZhangMS 0:f7f1f0d76dd6 377 }
XinZhangMS 0:f7f1f0d76dd6 378 }
XinZhangMS 0:f7f1f0d76dd6 379 return result;
XinZhangMS 0:f7f1f0d76dd6 380 }
XinZhangMS 0:f7f1f0d76dd6 381
XinZhangMS 0:f7f1f0d76dd6 382 IOTHUB_MESSAGE_RESULT IoTHubMessage_GetByteArray(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const unsigned char** buffer, size_t* size)
XinZhangMS 0:f7f1f0d76dd6 383 {
XinZhangMS 0:f7f1f0d76dd6 384 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 385 if (
XinZhangMS 0:f7f1f0d76dd6 386 (iotHubMessageHandle == NULL) ||
XinZhangMS 0:f7f1f0d76dd6 387 (buffer == NULL) ||
XinZhangMS 0:f7f1f0d76dd6 388 (size == NULL)
XinZhangMS 0:f7f1f0d76dd6 389 )
XinZhangMS 0:f7f1f0d76dd6 390 {
XinZhangMS 0:f7f1f0d76dd6 391 /*Codes_SRS_IOTHUBMESSAGE_01_014: [If any of the arguments passed to IoTHubMessage_GetByteArray is NULL IoTHubMessage_GetByteArray shall return IOTHUBMESSAGE_INVALID_ARG.] */
XinZhangMS 0:f7f1f0d76dd6 392 LogError("invalid parameter (NULL) to IoTHubMessage_GetByteArray IOTHUB_MESSAGE_HANDLE iotHubMessageHandle=%p, const unsigned char** buffer=%p, size_t* size=%p", iotHubMessageHandle, buffer, size);
XinZhangMS 0:f7f1f0d76dd6 393 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 394 }
XinZhangMS 0:f7f1f0d76dd6 395 else
XinZhangMS 0:f7f1f0d76dd6 396 {
XinZhangMS 0:f7f1f0d76dd6 397 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 398 if (handleData->contentType != IOTHUBMESSAGE_BYTEARRAY)
XinZhangMS 0:f7f1f0d76dd6 399 {
XinZhangMS 0:f7f1f0d76dd6 400 /*Codes_SRS_IOTHUBMESSAGE_02_021: [If iotHubMessageHandle is not a iothubmessage containing BYTEARRAY data, then IoTHubMessage_GetData shall write in *buffer NULL and shall set *size to 0.] */
XinZhangMS 0:f7f1f0d76dd6 401 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 402 LogError("invalid type of message %s", ENUM_TO_STRING(IOTHUBMESSAGE_CONTENT_TYPE, handleData->contentType));
XinZhangMS 0:f7f1f0d76dd6 403 }
XinZhangMS 0:f7f1f0d76dd6 404 else
XinZhangMS 0:f7f1f0d76dd6 405 {
XinZhangMS 0:f7f1f0d76dd6 406 /*Codes_SRS_IOTHUBMESSAGE_01_011: [The pointer shall be obtained by using BUFFER_u_char and it shall be copied in the buffer argument.]*/
XinZhangMS 0:f7f1f0d76dd6 407 *buffer = BUFFER_u_char(handleData->value.byteArray);
XinZhangMS 0:f7f1f0d76dd6 408 /*Codes_SRS_IOTHUBMESSAGE_01_012: [The size of the associated data shall be obtained by using BUFFER_length and it shall be copied to the size argument.]*/
XinZhangMS 0:f7f1f0d76dd6 409 *size = BUFFER_length(handleData->value.byteArray);
XinZhangMS 0:f7f1f0d76dd6 410 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 411 }
XinZhangMS 0:f7f1f0d76dd6 412 }
XinZhangMS 0:f7f1f0d76dd6 413 return result;
XinZhangMS 0:f7f1f0d76dd6 414 }
XinZhangMS 0:f7f1f0d76dd6 415
XinZhangMS 0:f7f1f0d76dd6 416 const char* IoTHubMessage_GetString(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 417 {
XinZhangMS 0:f7f1f0d76dd6 418 const char* result;
XinZhangMS 0:f7f1f0d76dd6 419 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 420 {
XinZhangMS 0:f7f1f0d76dd6 421 /*Codes_SRS_IOTHUBMESSAGE_02_016: [If any parameter is NULL then IoTHubMessage_GetString shall return NULL.] */
XinZhangMS 0:f7f1f0d76dd6 422 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 423 }
XinZhangMS 0:f7f1f0d76dd6 424 else
XinZhangMS 0:f7f1f0d76dd6 425 {
XinZhangMS 0:f7f1f0d76dd6 426 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 427 if (handleData->contentType != IOTHUBMESSAGE_STRING)
XinZhangMS 0:f7f1f0d76dd6 428 {
XinZhangMS 0:f7f1f0d76dd6 429 /*Codes_SRS_IOTHUBMESSAGE_02_017: [IoTHubMessage_GetString shall return NULL if the iotHubMessageHandle does not refer to a IOTHUBMESSAGE of type STRING.] */
XinZhangMS 0:f7f1f0d76dd6 430 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 431 }
XinZhangMS 0:f7f1f0d76dd6 432 else
XinZhangMS 0:f7f1f0d76dd6 433 {
XinZhangMS 0:f7f1f0d76dd6 434 /*Codes_SRS_IOTHUBMESSAGE_02_018: [IoTHubMessage_GetStringData shall return the currently stored null terminated string.] */
XinZhangMS 0:f7f1f0d76dd6 435 result = STRING_c_str(handleData->value.string);
XinZhangMS 0:f7f1f0d76dd6 436 }
XinZhangMS 0:f7f1f0d76dd6 437 }
XinZhangMS 0:f7f1f0d76dd6 438 return result;
XinZhangMS 0:f7f1f0d76dd6 439 }
XinZhangMS 0:f7f1f0d76dd6 440
XinZhangMS 0:f7f1f0d76dd6 441 IOTHUBMESSAGE_CONTENT_TYPE IoTHubMessage_GetContentType(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 442 {
XinZhangMS 0:f7f1f0d76dd6 443 IOTHUBMESSAGE_CONTENT_TYPE result;
XinZhangMS 0:f7f1f0d76dd6 444 /*Codes_SRS_IOTHUBMESSAGE_02_008: [If any parameter is NULL then IoTHubMessage_GetContentType shall return IOTHUBMESSAGE_UNKNOWN.] */
XinZhangMS 0:f7f1f0d76dd6 445 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 446 {
XinZhangMS 0:f7f1f0d76dd6 447 result = IOTHUBMESSAGE_UNKNOWN;
XinZhangMS 0:f7f1f0d76dd6 448 }
XinZhangMS 0:f7f1f0d76dd6 449 else
XinZhangMS 0:f7f1f0d76dd6 450 {
XinZhangMS 0:f7f1f0d76dd6 451 /*Codes_SRS_IOTHUBMESSAGE_02_009: [Otherwise IoTHubMessage_GetContentType shall return the type of the message.] */
XinZhangMS 0:f7f1f0d76dd6 452 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 453 result = handleData->contentType;
XinZhangMS 0:f7f1f0d76dd6 454 }
XinZhangMS 0:f7f1f0d76dd6 455 return result;
XinZhangMS 0:f7f1f0d76dd6 456 }
XinZhangMS 0:f7f1f0d76dd6 457
XinZhangMS 0:f7f1f0d76dd6 458 MAP_HANDLE IoTHubMessage_Properties(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 459 {
XinZhangMS 0:f7f1f0d76dd6 460 MAP_HANDLE result;
XinZhangMS 0:f7f1f0d76dd6 461 /*Codes_SRS_IOTHUBMESSAGE_02_001: [If iotHubMessageHandle is NULL then IoTHubMessage_Properties shall return NULL.]*/
XinZhangMS 0:f7f1f0d76dd6 462 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 463 {
XinZhangMS 0:f7f1f0d76dd6 464 LogError("invalid arg (NULL) passed to IoTHubMessage_Properties");
XinZhangMS 0:f7f1f0d76dd6 465 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 466 }
XinZhangMS 0:f7f1f0d76dd6 467 else
XinZhangMS 0:f7f1f0d76dd6 468 {
XinZhangMS 0:f7f1f0d76dd6 469 /*Codes_SRS_IOTHUBMESSAGE_02_002: [Otherwise, for any non-NULL iotHubMessageHandle it shall return a non-NULL MAP_HANDLE.]*/
XinZhangMS 0:f7f1f0d76dd6 470 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 471 result = handleData->properties;
XinZhangMS 0:f7f1f0d76dd6 472 }
XinZhangMS 0:f7f1f0d76dd6 473 return result;
XinZhangMS 0:f7f1f0d76dd6 474 }
XinZhangMS 0:f7f1f0d76dd6 475
XinZhangMS 0:f7f1f0d76dd6 476 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetProperty(IOTHUB_MESSAGE_HANDLE msg_handle, const char* key, const char* value)
XinZhangMS 0:f7f1f0d76dd6 477 {
XinZhangMS 0:f7f1f0d76dd6 478 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 479 if (msg_handle == NULL || key == NULL || value == NULL)
XinZhangMS 0:f7f1f0d76dd6 480 {
XinZhangMS 0:f7f1f0d76dd6 481 LogError("invalid parameter (NULL) to IoTHubMessage_SetProperty iotHubMessageHandle=%p, key=%p, value=%p", msg_handle, key, value);
XinZhangMS 0:f7f1f0d76dd6 482 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 483 }
XinZhangMS 0:f7f1f0d76dd6 484 else
XinZhangMS 0:f7f1f0d76dd6 485 {
XinZhangMS 0:f7f1f0d76dd6 486 if (Map_AddOrUpdate(msg_handle->properties, key, value) != MAP_OK)
XinZhangMS 0:f7f1f0d76dd6 487 {
XinZhangMS 0:f7f1f0d76dd6 488 LogError("Failure adding property to internal map");
XinZhangMS 0:f7f1f0d76dd6 489 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 490 }
XinZhangMS 0:f7f1f0d76dd6 491 else
XinZhangMS 0:f7f1f0d76dd6 492 {
XinZhangMS 0:f7f1f0d76dd6 493 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 494 }
XinZhangMS 0:f7f1f0d76dd6 495 }
XinZhangMS 0:f7f1f0d76dd6 496 return result;
XinZhangMS 0:f7f1f0d76dd6 497 }
XinZhangMS 0:f7f1f0d76dd6 498
XinZhangMS 0:f7f1f0d76dd6 499 const char* IoTHubMessage_GetProperty(IOTHUB_MESSAGE_HANDLE msg_handle, const char* key)
XinZhangMS 0:f7f1f0d76dd6 500 {
XinZhangMS 0:f7f1f0d76dd6 501 const char* result;
XinZhangMS 0:f7f1f0d76dd6 502 if (msg_handle == NULL || key == NULL)
XinZhangMS 0:f7f1f0d76dd6 503 {
XinZhangMS 0:f7f1f0d76dd6 504 LogError("invalid parameter (NULL) to IoTHubMessage_GetProperty iotHubMessageHandle=%p, key=%p", msg_handle, key);
XinZhangMS 0:f7f1f0d76dd6 505 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 506 }
XinZhangMS 0:f7f1f0d76dd6 507 else
XinZhangMS 0:f7f1f0d76dd6 508 {
XinZhangMS 0:f7f1f0d76dd6 509 bool key_exists = false;
XinZhangMS 0:f7f1f0d76dd6 510 // The return value is not neccessary, just check the key_exist variable
XinZhangMS 0:f7f1f0d76dd6 511 if ((Map_ContainsKey(msg_handle->properties, key, &key_exists) == MAP_OK) && key_exists)
XinZhangMS 0:f7f1f0d76dd6 512 {
XinZhangMS 0:f7f1f0d76dd6 513 result = Map_GetValueFromKey(msg_handle->properties, key);
XinZhangMS 0:f7f1f0d76dd6 514 }
XinZhangMS 0:f7f1f0d76dd6 515 else
XinZhangMS 0:f7f1f0d76dd6 516 {
XinZhangMS 0:f7f1f0d76dd6 517 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 518 }
XinZhangMS 0:f7f1f0d76dd6 519 }
XinZhangMS 0:f7f1f0d76dd6 520 return result;
XinZhangMS 0:f7f1f0d76dd6 521 }
XinZhangMS 0:f7f1f0d76dd6 522
XinZhangMS 0:f7f1f0d76dd6 523 const char* IoTHubMessage_GetCorrelationId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 524 {
XinZhangMS 0:f7f1f0d76dd6 525 const char* result;
XinZhangMS 0:f7f1f0d76dd6 526 /* Codes_SRS_IOTHUBMESSAGE_07_016: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetCorrelationId shall return a NULL value.] */
XinZhangMS 0:f7f1f0d76dd6 527 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 528 {
XinZhangMS 0:f7f1f0d76dd6 529 LogError("invalid arg (NULL) passed to IoTHubMessage_GetCorrelationId");
XinZhangMS 0:f7f1f0d76dd6 530 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 531 }
XinZhangMS 0:f7f1f0d76dd6 532 else
XinZhangMS 0:f7f1f0d76dd6 533 {
XinZhangMS 0:f7f1f0d76dd6 534 /* Codes_SRS_IOTHUBMESSAGE_07_017: [IoTHubMessage_GetCorrelationId shall return the correlationId as a const char*.] */
XinZhangMS 0:f7f1f0d76dd6 535 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 536 result = handleData->correlationId;
XinZhangMS 0:f7f1f0d76dd6 537 }
XinZhangMS 0:f7f1f0d76dd6 538 return result;
XinZhangMS 0:f7f1f0d76dd6 539 }
XinZhangMS 0:f7f1f0d76dd6 540
XinZhangMS 0:f7f1f0d76dd6 541 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetCorrelationId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* correlationId)
XinZhangMS 0:f7f1f0d76dd6 542 {
XinZhangMS 0:f7f1f0d76dd6 543 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 544 /* Codes_SRS_IOTHUBMESSAGE_07_018: [if any of the parameters are NULL then IoTHubMessage_SetCorrelationId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]*/
XinZhangMS 0:f7f1f0d76dd6 545 if (iotHubMessageHandle == NULL || correlationId == NULL)
XinZhangMS 0:f7f1f0d76dd6 546 {
XinZhangMS 0:f7f1f0d76dd6 547 LogError("invalid arg (NULL) passed to IoTHubMessage_SetCorrelationId");
XinZhangMS 0:f7f1f0d76dd6 548 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 549 }
XinZhangMS 0:f7f1f0d76dd6 550 else
XinZhangMS 0:f7f1f0d76dd6 551 {
XinZhangMS 0:f7f1f0d76dd6 552 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 553 /* Codes_SRS_IOTHUBMESSAGE_07_019: [If the IOTHUB_MESSAGE_HANDLE correlationId is not NULL, then the IOTHUB_MESSAGE_HANDLE correlationId will be deallocated.] */
XinZhangMS 0:f7f1f0d76dd6 554 if (handleData->correlationId != NULL)
XinZhangMS 0:f7f1f0d76dd6 555 {
XinZhangMS 0:f7f1f0d76dd6 556 free(handleData->correlationId);
XinZhangMS 0:f7f1f0d76dd6 557 handleData->correlationId = NULL;
XinZhangMS 0:f7f1f0d76dd6 558 }
XinZhangMS 0:f7f1f0d76dd6 559
XinZhangMS 0:f7f1f0d76dd6 560 if (mallocAndStrcpy_s(&handleData->correlationId, correlationId) != 0)
XinZhangMS 0:f7f1f0d76dd6 561 {
XinZhangMS 0:f7f1f0d76dd6 562 /* Codes_SRS_IOTHUBMESSAGE_07_020: [If the allocation or the copying of the correlationId fails, then IoTHubMessage_SetCorrelationId shall return IOTHUB_MESSAGE_ERROR.] */
XinZhangMS 0:f7f1f0d76dd6 563 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 564 }
XinZhangMS 0:f7f1f0d76dd6 565 else
XinZhangMS 0:f7f1f0d76dd6 566 {
XinZhangMS 0:f7f1f0d76dd6 567 /* Codes_SRS_IOTHUBMESSAGE_07_021: [IoTHubMessage_SetCorrelationId finishes successfully it shall return IOTHUB_MESSAGE_OK.] */
XinZhangMS 0:f7f1f0d76dd6 568 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 569 }
XinZhangMS 0:f7f1f0d76dd6 570 }
XinZhangMS 0:f7f1f0d76dd6 571 return result;
XinZhangMS 0:f7f1f0d76dd6 572 }
XinZhangMS 0:f7f1f0d76dd6 573
XinZhangMS 0:f7f1f0d76dd6 574 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetMessageId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* messageId)
XinZhangMS 0:f7f1f0d76dd6 575 {
XinZhangMS 0:f7f1f0d76dd6 576 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 577 /* Codes_SRS_IOTHUBMESSAGE_07_012: [if any of the parameters are NULL then IoTHubMessage_SetMessageId shall return a IOTHUB_MESSAGE_INVALID_ARG value.] */
XinZhangMS 0:f7f1f0d76dd6 578 if (iotHubMessageHandle == NULL || messageId == NULL)
XinZhangMS 0:f7f1f0d76dd6 579 {
XinZhangMS 0:f7f1f0d76dd6 580 LogError("invalid arg (NULL) passed to IoTHubMessage_SetMessageId");
XinZhangMS 0:f7f1f0d76dd6 581 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 582 }
XinZhangMS 0:f7f1f0d76dd6 583 else
XinZhangMS 0:f7f1f0d76dd6 584 {
XinZhangMS 0:f7f1f0d76dd6 585 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 586 /* Codes_SRS_IOTHUBMESSAGE_07_013: [If the IOTHUB_MESSAGE_HANDLE messageId is not NULL, then the IOTHUB_MESSAGE_HANDLE messageId will be freed] */
XinZhangMS 0:f7f1f0d76dd6 587 if (handleData->messageId != NULL)
XinZhangMS 0:f7f1f0d76dd6 588 {
XinZhangMS 0:f7f1f0d76dd6 589 free(handleData->messageId);
XinZhangMS 0:f7f1f0d76dd6 590 handleData->messageId = NULL;
XinZhangMS 0:f7f1f0d76dd6 591 }
XinZhangMS 0:f7f1f0d76dd6 592
XinZhangMS 0:f7f1f0d76dd6 593 /* Codes_SRS_IOTHUBMESSAGE_07_014: [If the allocation or the copying of the messageId fails, then IoTHubMessage_SetMessageId shall return IOTHUB_MESSAGE_ERROR.] */
XinZhangMS 0:f7f1f0d76dd6 594 if (mallocAndStrcpy_s(&handleData->messageId, messageId) != 0)
XinZhangMS 0:f7f1f0d76dd6 595 {
XinZhangMS 0:f7f1f0d76dd6 596 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 597 }
XinZhangMS 0:f7f1f0d76dd6 598 else
XinZhangMS 0:f7f1f0d76dd6 599 {
XinZhangMS 0:f7f1f0d76dd6 600 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 601 }
XinZhangMS 0:f7f1f0d76dd6 602 }
XinZhangMS 0:f7f1f0d76dd6 603 return result;
XinZhangMS 0:f7f1f0d76dd6 604 }
XinZhangMS 0:f7f1f0d76dd6 605
XinZhangMS 0:f7f1f0d76dd6 606 const char* IoTHubMessage_GetMessageId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 607 {
XinZhangMS 0:f7f1f0d76dd6 608 const char* result;
XinZhangMS 0:f7f1f0d76dd6 609 /* Codes_SRS_IOTHUBMESSAGE_07_010: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_MessageId shall return a NULL value.] */
XinZhangMS 0:f7f1f0d76dd6 610 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 611 {
XinZhangMS 0:f7f1f0d76dd6 612 LogError("invalid arg (NULL) passed to IoTHubMessage_GetMessageId");
XinZhangMS 0:f7f1f0d76dd6 613 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 614 }
XinZhangMS 0:f7f1f0d76dd6 615 else
XinZhangMS 0:f7f1f0d76dd6 616 {
XinZhangMS 0:f7f1f0d76dd6 617 /* Codes_SRS_IOTHUBMESSAGE_07_011: [IoTHubMessage_MessageId shall return the messageId as a const char*.] */
XinZhangMS 0:f7f1f0d76dd6 618 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 619 result = handleData->messageId;
XinZhangMS 0:f7f1f0d76dd6 620 }
XinZhangMS 0:f7f1f0d76dd6 621 return result;
XinZhangMS 0:f7f1f0d76dd6 622 }
XinZhangMS 0:f7f1f0d76dd6 623
XinZhangMS 0:f7f1f0d76dd6 624 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetContentTypeSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* contentType)
XinZhangMS 0:f7f1f0d76dd6 625 {
XinZhangMS 0:f7f1f0d76dd6 626 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 627
XinZhangMS 0:f7f1f0d76dd6 628 // Codes_SRS_IOTHUBMESSAGE_09_001: [If any of the parameters are NULL then IoTHubMessage_SetContentTypeSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 629 if (iotHubMessageHandle == NULL || contentType == NULL)
XinZhangMS 0:f7f1f0d76dd6 630 {
XinZhangMS 0:f7f1f0d76dd6 631 LogError("Invalid argument (iotHubMessageHandle=%p, contentType=%p)", iotHubMessageHandle, contentType);
XinZhangMS 0:f7f1f0d76dd6 632 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 633 }
XinZhangMS 0:f7f1f0d76dd6 634 else
XinZhangMS 0:f7f1f0d76dd6 635 {
XinZhangMS 0:f7f1f0d76dd6 636 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 637
XinZhangMS 0:f7f1f0d76dd6 638 // Codes_SRS_IOTHUBMESSAGE_09_002: [If the IOTHUB_MESSAGE_HANDLE `contentType` is not NULL it shall be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 639 if (handleData->userDefinedContentType != NULL)
XinZhangMS 0:f7f1f0d76dd6 640 {
XinZhangMS 0:f7f1f0d76dd6 641 free(handleData->userDefinedContentType);
XinZhangMS 0:f7f1f0d76dd6 642 handleData->userDefinedContentType = NULL;
XinZhangMS 0:f7f1f0d76dd6 643 }
XinZhangMS 0:f7f1f0d76dd6 644
XinZhangMS 0:f7f1f0d76dd6 645 if (mallocAndStrcpy_s(&handleData->userDefinedContentType, contentType) != 0)
XinZhangMS 0:f7f1f0d76dd6 646 {
XinZhangMS 0:f7f1f0d76dd6 647 LogError("Failed saving a copy of contentType");
XinZhangMS 0:f7f1f0d76dd6 648 // Codes_SRS_IOTHUBMESSAGE_09_003: [If the allocation or the copying of `contentType` fails, then IoTHubMessage_SetContentTypeSystemProperty shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 649 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 650 }
XinZhangMS 0:f7f1f0d76dd6 651 else
XinZhangMS 0:f7f1f0d76dd6 652 {
XinZhangMS 0:f7f1f0d76dd6 653 // Codes_SRS_IOTHUBMESSAGE_09_004: [If IoTHubMessage_SetContentTypeSystemProperty finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 654 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 655 }
XinZhangMS 0:f7f1f0d76dd6 656 }
XinZhangMS 0:f7f1f0d76dd6 657
XinZhangMS 0:f7f1f0d76dd6 658 return result;
XinZhangMS 0:f7f1f0d76dd6 659 }
XinZhangMS 0:f7f1f0d76dd6 660
XinZhangMS 0:f7f1f0d76dd6 661 const char* IoTHubMessage_GetContentTypeSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 662 {
XinZhangMS 0:f7f1f0d76dd6 663 const char* result;
XinZhangMS 0:f7f1f0d76dd6 664
XinZhangMS 0:f7f1f0d76dd6 665 // Codes_SRS_IOTHUBMESSAGE_09_005: [If any of the parameters are NULL then IoTHubMessage_GetContentTypeSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 666 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 667 {
XinZhangMS 0:f7f1f0d76dd6 668 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 669 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 670 }
XinZhangMS 0:f7f1f0d76dd6 671 else
XinZhangMS 0:f7f1f0d76dd6 672 {
XinZhangMS 0:f7f1f0d76dd6 673 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 674
XinZhangMS 0:f7f1f0d76dd6 675 // Codes_SRS_IOTHUBMESSAGE_09_006: [IoTHubMessage_GetContentTypeSystemProperty shall return the `contentType` as a const char* ]
XinZhangMS 0:f7f1f0d76dd6 676 result = (const char*)handleData->userDefinedContentType;
XinZhangMS 0:f7f1f0d76dd6 677 }
XinZhangMS 0:f7f1f0d76dd6 678
XinZhangMS 0:f7f1f0d76dd6 679 return result;
XinZhangMS 0:f7f1f0d76dd6 680 }
XinZhangMS 0:f7f1f0d76dd6 681
XinZhangMS 0:f7f1f0d76dd6 682 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetContentEncodingSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* contentEncoding)
XinZhangMS 0:f7f1f0d76dd6 683 {
XinZhangMS 0:f7f1f0d76dd6 684 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 685
XinZhangMS 0:f7f1f0d76dd6 686 // Codes_SRS_IOTHUBMESSAGE_09_006: [If any of the parameters are NULL then IoTHubMessage_SetContentEncodingSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 687 if (iotHubMessageHandle == NULL || contentEncoding == NULL)
XinZhangMS 0:f7f1f0d76dd6 688 {
XinZhangMS 0:f7f1f0d76dd6 689 LogError("Invalid argument (iotHubMessageHandle=%p, contentEncoding=%p)", iotHubMessageHandle, contentEncoding);
XinZhangMS 0:f7f1f0d76dd6 690 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 691 }
XinZhangMS 0:f7f1f0d76dd6 692 else
XinZhangMS 0:f7f1f0d76dd6 693 {
XinZhangMS 0:f7f1f0d76dd6 694 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 695
XinZhangMS 0:f7f1f0d76dd6 696 // Codes_SRS_IOTHUBMESSAGE_09_007: [If the IOTHUB_MESSAGE_HANDLE `contentEncoding` is not NULL it shall be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 697 if (handleData->contentEncoding != NULL)
XinZhangMS 0:f7f1f0d76dd6 698 {
XinZhangMS 0:f7f1f0d76dd6 699 free(handleData->contentEncoding);
XinZhangMS 0:f7f1f0d76dd6 700 handleData->contentEncoding = NULL;
XinZhangMS 0:f7f1f0d76dd6 701 }
XinZhangMS 0:f7f1f0d76dd6 702
XinZhangMS 0:f7f1f0d76dd6 703 if (mallocAndStrcpy_s(&handleData->contentEncoding, contentEncoding) != 0)
XinZhangMS 0:f7f1f0d76dd6 704 {
XinZhangMS 0:f7f1f0d76dd6 705 LogError("Failed saving a copy of contentEncoding");
XinZhangMS 0:f7f1f0d76dd6 706 // Codes_SRS_IOTHUBMESSAGE_09_008: [If the allocation or the copying of `contentEncoding` fails, then IoTHubMessage_SetContentEncodingSystemProperty shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 707 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 708 }
XinZhangMS 0:f7f1f0d76dd6 709 else
XinZhangMS 0:f7f1f0d76dd6 710 {
XinZhangMS 0:f7f1f0d76dd6 711 // Codes_SRS_IOTHUBMESSAGE_09_009: [If IoTHubMessage_SetContentEncodingSystemProperty finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 712 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 713 }
XinZhangMS 0:f7f1f0d76dd6 714 }
XinZhangMS 0:f7f1f0d76dd6 715
XinZhangMS 0:f7f1f0d76dd6 716 return result;
XinZhangMS 0:f7f1f0d76dd6 717 }
XinZhangMS 0:f7f1f0d76dd6 718
XinZhangMS 0:f7f1f0d76dd6 719 const char* IoTHubMessage_GetContentEncodingSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 720 {
XinZhangMS 0:f7f1f0d76dd6 721 const char* result;
XinZhangMS 0:f7f1f0d76dd6 722
XinZhangMS 0:f7f1f0d76dd6 723 // Codes_SRS_IOTHUBMESSAGE_09_010: [If any of the parameters are NULL then IoTHubMessage_GetContentEncodingSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 724 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 725 {
XinZhangMS 0:f7f1f0d76dd6 726 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 727 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 728 }
XinZhangMS 0:f7f1f0d76dd6 729 else
XinZhangMS 0:f7f1f0d76dd6 730 {
XinZhangMS 0:f7f1f0d76dd6 731 IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 732
XinZhangMS 0:f7f1f0d76dd6 733 // Codes_SRS_IOTHUBMESSAGE_09_011: [IoTHubMessage_GetContentEncodingSystemProperty shall return the `contentEncoding` as a const char* ]
XinZhangMS 0:f7f1f0d76dd6 734 result = (const char*)handleData->contentEncoding;
XinZhangMS 0:f7f1f0d76dd6 735 }
XinZhangMS 0:f7f1f0d76dd6 736
XinZhangMS 0:f7f1f0d76dd6 737 return result;
XinZhangMS 0:f7f1f0d76dd6 738 }
XinZhangMS 0:f7f1f0d76dd6 739
XinZhangMS 0:f7f1f0d76dd6 740 const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* IoTHubMessage_GetDiagnosticPropertyData(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 741 {
XinZhangMS 0:f7f1f0d76dd6 742 const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* result;
XinZhangMS 0:f7f1f0d76dd6 743 // Codes_SRS_IOTHUBMESSAGE_10_001: [If any of the parameters are NULL then IoTHubMessage_GetDiagnosticPropertyData shall return a NULL value.]
XinZhangMS 0:f7f1f0d76dd6 744 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 745 {
XinZhangMS 0:f7f1f0d76dd6 746 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 747 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 748 }
XinZhangMS 0:f7f1f0d76dd6 749 else
XinZhangMS 0:f7f1f0d76dd6 750 {
XinZhangMS 0:f7f1f0d76dd6 751 /* Codes_SRS_IOTHUBMESSAGE_10_002: [IoTHubMessage_GetDiagnosticPropertyData shall return the diagnosticData as a const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA*.] */
XinZhangMS 0:f7f1f0d76dd6 752 result = iotHubMessageHandle->diagnosticData;
XinZhangMS 0:f7f1f0d76dd6 753 }
XinZhangMS 0:f7f1f0d76dd6 754 return result;
XinZhangMS 0:f7f1f0d76dd6 755 }
XinZhangMS 0:f7f1f0d76dd6 756
XinZhangMS 0:f7f1f0d76dd6 757 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetDiagnosticPropertyData(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* diagnosticData)
XinZhangMS 0:f7f1f0d76dd6 758 {
XinZhangMS 0:f7f1f0d76dd6 759 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 760 // Codes_SRS_IOTHUBMESSAGE_10_003: [If any of the parameters are NULL then IoTHubMessage_SetDiagnosticId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 761 if (iotHubMessageHandle == NULL ||
XinZhangMS 0:f7f1f0d76dd6 762 diagnosticData == NULL ||
XinZhangMS 0:f7f1f0d76dd6 763 diagnosticData->diagnosticCreationTimeUtc == NULL ||
XinZhangMS 0:f7f1f0d76dd6 764 diagnosticData->diagnosticId == NULL)
XinZhangMS 0:f7f1f0d76dd6 765 {
XinZhangMS 0:f7f1f0d76dd6 766 LogError("Invalid argument (iotHubMessageHandle=%p, diagnosticData=%p, diagnosticData->diagnosticId=%p, diagnosticData->diagnosticCreationTimeUtc=%p)",
XinZhangMS 0:f7f1f0d76dd6 767 iotHubMessageHandle, diagnosticData,
XinZhangMS 0:f7f1f0d76dd6 768 diagnosticData == NULL ? NULL : diagnosticData->diagnosticId,
XinZhangMS 0:f7f1f0d76dd6 769 diagnosticData == NULL ? NULL : diagnosticData->diagnosticCreationTimeUtc);
XinZhangMS 0:f7f1f0d76dd6 770 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 771 }
XinZhangMS 0:f7f1f0d76dd6 772 else
XinZhangMS 0:f7f1f0d76dd6 773 {
XinZhangMS 0:f7f1f0d76dd6 774 // Codes_SRS_IOTHUBMESSAGE_10_004: [If the IOTHUB_MESSAGE_HANDLE `diagnosticData` is not NULL it shall be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 775 if (iotHubMessageHandle->diagnosticData != NULL)
XinZhangMS 0:f7f1f0d76dd6 776 {
XinZhangMS 0:f7f1f0d76dd6 777 DestroyDiagnosticPropertyData(iotHubMessageHandle->diagnosticData);
XinZhangMS 0:f7f1f0d76dd6 778 iotHubMessageHandle->diagnosticData = NULL;
XinZhangMS 0:f7f1f0d76dd6 779 }
XinZhangMS 0:f7f1f0d76dd6 780
XinZhangMS 0:f7f1f0d76dd6 781 // Codes_SRS_IOTHUBMESSAGE_10_005: [If the allocation or the copying of `diagnosticData` fails, then IoTHubMessage_SetDiagnosticPropertyData shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 782 if ((iotHubMessageHandle->diagnosticData = CloneDiagnosticPropertyData(diagnosticData)) == NULL)
XinZhangMS 0:f7f1f0d76dd6 783 {
XinZhangMS 0:f7f1f0d76dd6 784 LogError("Failed saving a copy of diagnosticData");
XinZhangMS 0:f7f1f0d76dd6 785 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 786 }
XinZhangMS 0:f7f1f0d76dd6 787 else
XinZhangMS 0:f7f1f0d76dd6 788 {
XinZhangMS 0:f7f1f0d76dd6 789 // Codes_SRS_IOTHUBMESSAGE_10_006: [If IoTHubMessage_SetDiagnosticPropertyData finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 790 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 791 }
XinZhangMS 0:f7f1f0d76dd6 792 }
XinZhangMS 0:f7f1f0d76dd6 793 return result;
XinZhangMS 0:f7f1f0d76dd6 794 }
XinZhangMS 0:f7f1f0d76dd6 795
XinZhangMS 0:f7f1f0d76dd6 796
XinZhangMS 0:f7f1f0d76dd6 797 const char* IoTHubMessage_GetOutputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 798 {
XinZhangMS 0:f7f1f0d76dd6 799 const char* result;
XinZhangMS 0:f7f1f0d76dd6 800 // Codes_SRS_IOTHUBMESSAGE_31_034: [If the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetOutputName shall return a NULL value.]
XinZhangMS 0:f7f1f0d76dd6 801 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 802 {
XinZhangMS 0:f7f1f0d76dd6 803 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 804 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 805 }
XinZhangMS 0:f7f1f0d76dd6 806 else
XinZhangMS 0:f7f1f0d76dd6 807 {
XinZhangMS 0:f7f1f0d76dd6 808 // Codes_SRS_IOTHUBMESSAGE_31_035: [IoTHubMessage_GetOutputName shall return the OutputName as a const char*.]
XinZhangMS 0:f7f1f0d76dd6 809 result = iotHubMessageHandle->outputName;
XinZhangMS 0:f7f1f0d76dd6 810 }
XinZhangMS 0:f7f1f0d76dd6 811 return result;
XinZhangMS 0:f7f1f0d76dd6 812 }
XinZhangMS 0:f7f1f0d76dd6 813
XinZhangMS 0:f7f1f0d76dd6 814 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetOutputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* outputName)
XinZhangMS 0:f7f1f0d76dd6 815 {
XinZhangMS 0:f7f1f0d76dd6 816 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 817
XinZhangMS 0:f7f1f0d76dd6 818 // Codes_SRS_IOTHUBMESSAGE_31_036: [If any of the parameters are NULL then IoTHubMessage_SetOutputName shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 819 if ((iotHubMessageHandle == NULL) || (outputName == NULL))
XinZhangMS 0:f7f1f0d76dd6 820 {
XinZhangMS 0:f7f1f0d76dd6 821 LogError("Invalid argument (iotHubMessageHandle=%p, outputName=%p)", iotHubMessageHandle, outputName);
XinZhangMS 0:f7f1f0d76dd6 822 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 823 }
XinZhangMS 0:f7f1f0d76dd6 824 else
XinZhangMS 0:f7f1f0d76dd6 825 {
XinZhangMS 0:f7f1f0d76dd6 826 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 827
XinZhangMS 0:f7f1f0d76dd6 828 // Codes_SRS_IOTHUBMESSAGE_31_037: [If the IOTHUB_MESSAGE_HANDLE OutputName is not NULL, then the IOTHUB_MESSAGE_HANDLE OutputName will be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 829 if (handleData->outputName != NULL)
XinZhangMS 0:f7f1f0d76dd6 830 {
XinZhangMS 0:f7f1f0d76dd6 831 free(handleData->outputName);
XinZhangMS 0:f7f1f0d76dd6 832 handleData->outputName = NULL;
XinZhangMS 0:f7f1f0d76dd6 833 }
XinZhangMS 0:f7f1f0d76dd6 834
XinZhangMS 0:f7f1f0d76dd6 835 if (mallocAndStrcpy_s(&handleData->outputName, outputName) != 0)
XinZhangMS 0:f7f1f0d76dd6 836 {
XinZhangMS 0:f7f1f0d76dd6 837 // Codes_SRS_IOTHUBMESSAGE_31_038: [If the allocation or the copying of the OutputName fails, then IoTHubMessage_SetOutputName shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 838 LogError("Failed saving a copy of outputName");
XinZhangMS 0:f7f1f0d76dd6 839 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 840 }
XinZhangMS 0:f7f1f0d76dd6 841 else
XinZhangMS 0:f7f1f0d76dd6 842 {
XinZhangMS 0:f7f1f0d76dd6 843 // Codes_SRS_IOTHUBMESSAGE_31_039: [IoTHubMessage_SetOutputName finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 844 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 845 }
XinZhangMS 0:f7f1f0d76dd6 846
XinZhangMS 0:f7f1f0d76dd6 847 }
XinZhangMS 0:f7f1f0d76dd6 848
XinZhangMS 0:f7f1f0d76dd6 849 return result;
XinZhangMS 0:f7f1f0d76dd6 850 }
XinZhangMS 0:f7f1f0d76dd6 851
XinZhangMS 0:f7f1f0d76dd6 852 const char* IoTHubMessage_GetInputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 853 {
XinZhangMS 0:f7f1f0d76dd6 854 const char* result;
XinZhangMS 0:f7f1f0d76dd6 855 // Codes_SRS_IOTHUBMESSAGE_31_040: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetInputName shall return a NULL value.]
XinZhangMS 0:f7f1f0d76dd6 856 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 857 {
XinZhangMS 0:f7f1f0d76dd6 858 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 859 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 860 }
XinZhangMS 0:f7f1f0d76dd6 861 else
XinZhangMS 0:f7f1f0d76dd6 862 {
XinZhangMS 0:f7f1f0d76dd6 863 // Codes_SRS_IOTHUBMESSAGE_31_041: [IoTHubMessage_GetInputName shall return the InputName as a const char*.]
XinZhangMS 0:f7f1f0d76dd6 864 result = iotHubMessageHandle->inputName;
XinZhangMS 0:f7f1f0d76dd6 865 }
XinZhangMS 0:f7f1f0d76dd6 866 return result;
XinZhangMS 0:f7f1f0d76dd6 867 }
XinZhangMS 0:f7f1f0d76dd6 868
XinZhangMS 0:f7f1f0d76dd6 869 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetInputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* inputName)
XinZhangMS 0:f7f1f0d76dd6 870 {
XinZhangMS 0:f7f1f0d76dd6 871 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 872
XinZhangMS 0:f7f1f0d76dd6 873 // Codes_SRS_IOTHUBMESSAGE_31_042: [if any of the parameters are NULL then IoTHubMessage_SetInputName shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 874 if ((iotHubMessageHandle == NULL) || (inputName == NULL))
XinZhangMS 0:f7f1f0d76dd6 875 {
XinZhangMS 0:f7f1f0d76dd6 876 LogError("Invalid argument (iotHubMessageHandle=%p, inputName=%p)", iotHubMessageHandle, inputName);
XinZhangMS 0:f7f1f0d76dd6 877 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 878 }
XinZhangMS 0:f7f1f0d76dd6 879 else
XinZhangMS 0:f7f1f0d76dd6 880 {
XinZhangMS 0:f7f1f0d76dd6 881 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 882
XinZhangMS 0:f7f1f0d76dd6 883 // Codes_SRS_IOTHUBMESSAGE_31_043: [If the IOTHUB_MESSAGE_HANDLE InputName is not NULL, then the IOTHUB_MESSAGE_HANDLE InputName will be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 884 if (handleData->inputName != NULL)
XinZhangMS 0:f7f1f0d76dd6 885 {
XinZhangMS 0:f7f1f0d76dd6 886 free(handleData->inputName);
XinZhangMS 0:f7f1f0d76dd6 887 handleData->inputName = NULL;
XinZhangMS 0:f7f1f0d76dd6 888 }
XinZhangMS 0:f7f1f0d76dd6 889
XinZhangMS 0:f7f1f0d76dd6 890 if (mallocAndStrcpy_s(&handleData->inputName, inputName) != 0)
XinZhangMS 0:f7f1f0d76dd6 891 {
XinZhangMS 0:f7f1f0d76dd6 892 // Codes_SRS_IOTHUBMESSAGE_31_044: [If the allocation or the copying of the InputName fails, then IoTHubMessage_SetInputName shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 893 LogError("Failed saving a copy of inputName");
XinZhangMS 0:f7f1f0d76dd6 894 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 895 }
XinZhangMS 0:f7f1f0d76dd6 896 else
XinZhangMS 0:f7f1f0d76dd6 897 {
XinZhangMS 0:f7f1f0d76dd6 898 // Codes_SRS_IOTHUBMESSAGE_31_045: [IoTHubMessage_SetInputName finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 899 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 900 }
XinZhangMS 0:f7f1f0d76dd6 901
XinZhangMS 0:f7f1f0d76dd6 902 }
XinZhangMS 0:f7f1f0d76dd6 903
XinZhangMS 0:f7f1f0d76dd6 904 return result;
XinZhangMS 0:f7f1f0d76dd6 905 }
XinZhangMS 0:f7f1f0d76dd6 906
XinZhangMS 0:f7f1f0d76dd6 907
XinZhangMS 0:f7f1f0d76dd6 908 const char* IoTHubMessage_GetConnectionModuleId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 909 {
XinZhangMS 0:f7f1f0d76dd6 910 const char* result;
XinZhangMS 0:f7f1f0d76dd6 911 // Codes_SRS_IOTHUBMESSAGE_31_046: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetConnectionModuleId shall return a NULL value.]
XinZhangMS 0:f7f1f0d76dd6 912 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 913 {
XinZhangMS 0:f7f1f0d76dd6 914 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 915 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 916 }
XinZhangMS 0:f7f1f0d76dd6 917 else
XinZhangMS 0:f7f1f0d76dd6 918 {
XinZhangMS 0:f7f1f0d76dd6 919 // Codes_SRS_IOTHUBMESSAGE_31_047: [IoTHubMessage_GetConnectionModuleId shall return the ConnectionModuleId as a const char*.]
XinZhangMS 0:f7f1f0d76dd6 920 result = iotHubMessageHandle->connectionModuleId;
XinZhangMS 0:f7f1f0d76dd6 921 }
XinZhangMS 0:f7f1f0d76dd6 922 return result;
XinZhangMS 0:f7f1f0d76dd6 923 }
XinZhangMS 0:f7f1f0d76dd6 924
XinZhangMS 0:f7f1f0d76dd6 925 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetConnectionModuleId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* connectionModuleId)
XinZhangMS 0:f7f1f0d76dd6 926 {
XinZhangMS 0:f7f1f0d76dd6 927 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 928
XinZhangMS 0:f7f1f0d76dd6 929 // Codes_SRS_IOTHUBMESSAGE_31_048: [if any of the parameters are NULL then IoTHubMessage_SetConnectionModuleId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 930 if ((iotHubMessageHandle == NULL) || (connectionModuleId == NULL))
XinZhangMS 0:f7f1f0d76dd6 931 {
XinZhangMS 0:f7f1f0d76dd6 932 LogError("Invalid argument (iotHubMessageHandle=%p, connectionModuleId=%p)", iotHubMessageHandle, connectionModuleId);
XinZhangMS 0:f7f1f0d76dd6 933 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 934 }
XinZhangMS 0:f7f1f0d76dd6 935 else
XinZhangMS 0:f7f1f0d76dd6 936 {
XinZhangMS 0:f7f1f0d76dd6 937 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 938
XinZhangMS 0:f7f1f0d76dd6 939 // Codes_SRS_IOTHUBMESSAGE_31_049: [If the IOTHUB_MESSAGE_HANDLE ConnectionModuleId is not NULL, then the IOTHUB_MESSAGE_HANDLE ConnectionModuleId will be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 940 if (handleData->connectionModuleId != NULL)
XinZhangMS 0:f7f1f0d76dd6 941 {
XinZhangMS 0:f7f1f0d76dd6 942 free(handleData->connectionModuleId);
XinZhangMS 0:f7f1f0d76dd6 943 handleData->connectionModuleId = NULL;
XinZhangMS 0:f7f1f0d76dd6 944 }
XinZhangMS 0:f7f1f0d76dd6 945
XinZhangMS 0:f7f1f0d76dd6 946 if (mallocAndStrcpy_s(&handleData->connectionModuleId, connectionModuleId) != 0)
XinZhangMS 0:f7f1f0d76dd6 947 {
XinZhangMS 0:f7f1f0d76dd6 948 // Codes_SRS_IOTHUBMESSAGE_31_050: [If the allocation or the copying of the ConnectionModuleId fails, then IoTHubMessage_SetConnectionModuleId shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 949 LogError("Failed saving a copy of connectionModuleId");
XinZhangMS 0:f7f1f0d76dd6 950 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 951 }
XinZhangMS 0:f7f1f0d76dd6 952 else
XinZhangMS 0:f7f1f0d76dd6 953 {
XinZhangMS 0:f7f1f0d76dd6 954 // Codes_SRS_IOTHUBMESSAGE_31_051: [IoTHubMessage_SetConnectionModuleId finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 955 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 956 }
XinZhangMS 0:f7f1f0d76dd6 957
XinZhangMS 0:f7f1f0d76dd6 958 }
XinZhangMS 0:f7f1f0d76dd6 959
XinZhangMS 0:f7f1f0d76dd6 960 return result;
XinZhangMS 0:f7f1f0d76dd6 961 }
XinZhangMS 0:f7f1f0d76dd6 962
XinZhangMS 0:f7f1f0d76dd6 963
XinZhangMS 0:f7f1f0d76dd6 964 const char* IoTHubMessage_GetConnectionDeviceId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 965 {
XinZhangMS 0:f7f1f0d76dd6 966 const char* result;
XinZhangMS 0:f7f1f0d76dd6 967 // Codes_SRS_IOTHUBMESSAGE_31_052: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetConnectionDeviceId shall return a NULL value.]
XinZhangMS 0:f7f1f0d76dd6 968 if (iotHubMessageHandle == NULL)
XinZhangMS 0:f7f1f0d76dd6 969 {
XinZhangMS 0:f7f1f0d76dd6 970 LogError("Invalid argument (iotHubMessageHandle is NULL)");
XinZhangMS 0:f7f1f0d76dd6 971 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 972 }
XinZhangMS 0:f7f1f0d76dd6 973 else
XinZhangMS 0:f7f1f0d76dd6 974 {
XinZhangMS 0:f7f1f0d76dd6 975 // Codes_SRS_IOTHUBMESSAGE_31_053: [IoTHubMessage_GetConnectionDeviceId shall return the ConnectionDeviceId as a const char*.]
XinZhangMS 0:f7f1f0d76dd6 976 result = iotHubMessageHandle->connectionDeviceId;
XinZhangMS 0:f7f1f0d76dd6 977 }
XinZhangMS 0:f7f1f0d76dd6 978 return result;
XinZhangMS 0:f7f1f0d76dd6 979 }
XinZhangMS 0:f7f1f0d76dd6 980
XinZhangMS 0:f7f1f0d76dd6 981 IOTHUB_MESSAGE_RESULT IoTHubMessage_SetConnectionDeviceId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* connectionDeviceId)
XinZhangMS 0:f7f1f0d76dd6 982 {
XinZhangMS 0:f7f1f0d76dd6 983 IOTHUB_MESSAGE_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 984
XinZhangMS 0:f7f1f0d76dd6 985 // Codes_SRS_IOTHUBMESSAGE_31_054: [if any of the parameters are NULL then IoTHubMessage_SetConnectionDeviceId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
XinZhangMS 0:f7f1f0d76dd6 986 if ((iotHubMessageHandle == NULL) || (connectionDeviceId == NULL))
XinZhangMS 0:f7f1f0d76dd6 987 {
XinZhangMS 0:f7f1f0d76dd6 988 LogError("Invalid argument (iotHubMessageHandle=%p, connectionDeviceId=%p)", iotHubMessageHandle, connectionDeviceId);
XinZhangMS 0:f7f1f0d76dd6 989 result = IOTHUB_MESSAGE_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 990 }
XinZhangMS 0:f7f1f0d76dd6 991 else
XinZhangMS 0:f7f1f0d76dd6 992 {
XinZhangMS 0:f7f1f0d76dd6 993 IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
XinZhangMS 0:f7f1f0d76dd6 994
XinZhangMS 0:f7f1f0d76dd6 995 // Codes_SRS_IOTHUBMESSAGE_31_055: [If the IOTHUB_MESSAGE_HANDLE ConnectionDeviceId is not NULL, then the IOTHUB_MESSAGE_HANDLE ConnectionDeviceId will be deallocated.]
XinZhangMS 0:f7f1f0d76dd6 996 if (handleData->connectionDeviceId != NULL)
XinZhangMS 0:f7f1f0d76dd6 997 {
XinZhangMS 0:f7f1f0d76dd6 998 free(handleData->connectionDeviceId);
XinZhangMS 0:f7f1f0d76dd6 999 handleData->connectionDeviceId = NULL;
XinZhangMS 0:f7f1f0d76dd6 1000 }
XinZhangMS 0:f7f1f0d76dd6 1001
XinZhangMS 0:f7f1f0d76dd6 1002 if (mallocAndStrcpy_s(&handleData->connectionDeviceId, connectionDeviceId) != 0)
XinZhangMS 0:f7f1f0d76dd6 1003 {
XinZhangMS 0:f7f1f0d76dd6 1004 // Codes_SRS_IOTHUBMESSAGE_31_056: [If the allocation or the copying of the ConnectionDeviceId fails, then IoTHubMessage_SetConnectionDeviceId shall return IOTHUB_MESSAGE_ERROR.]
XinZhangMS 0:f7f1f0d76dd6 1005 LogError("Failed saving a copy of connectionDeviceId");
XinZhangMS 0:f7f1f0d76dd6 1006 result = IOTHUB_MESSAGE_ERROR;
XinZhangMS 0:f7f1f0d76dd6 1007 }
XinZhangMS 0:f7f1f0d76dd6 1008 else
XinZhangMS 0:f7f1f0d76dd6 1009 {
XinZhangMS 0:f7f1f0d76dd6 1010 // Codes_SRS_IOTHUBMESSAGE_31_057: [IoTHubMessage_SetConnectionDeviceId finishes successfully it shall return IOTHUB_MESSAGE_OK.]
XinZhangMS 0:f7f1f0d76dd6 1011 result = IOTHUB_MESSAGE_OK;
XinZhangMS 0:f7f1f0d76dd6 1012 }
XinZhangMS 0:f7f1f0d76dd6 1013
XinZhangMS 0:f7f1f0d76dd6 1014 }
XinZhangMS 0:f7f1f0d76dd6 1015
XinZhangMS 0:f7f1f0d76dd6 1016 return result;
XinZhangMS 0:f7f1f0d76dd6 1017 }
XinZhangMS 0:f7f1f0d76dd6 1018
XinZhangMS 0:f7f1f0d76dd6 1019 void IoTHubMessage_Destroy(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
XinZhangMS 0:f7f1f0d76dd6 1020 {
XinZhangMS 0:f7f1f0d76dd6 1021 /*Codes_SRS_IOTHUBMESSAGE_01_004: [If iotHubMessageHandle is NULL, IoTHubMessage_Destroy shall do nothing.] */
XinZhangMS 0:f7f1f0d76dd6 1022 if (iotHubMessageHandle != NULL)
XinZhangMS 0:f7f1f0d76dd6 1023 {
XinZhangMS 0:f7f1f0d76dd6 1024 /*Codes_SRS_IOTHUBMESSAGE_01_003: [IoTHubMessage_Destroy shall free all resources associated with iotHubMessageHandle.] */
XinZhangMS 0:f7f1f0d76dd6 1025 DestroyMessageData((IOTHUB_MESSAGE_HANDLE_DATA* )iotHubMessageHandle);
XinZhangMS 0:f7f1f0d76dd6 1026 }
XinZhangMS 0:f7f1f0d76dd6 1027 }