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.
iothub_client/src/iothub_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_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 | } |