A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
AzureIoTClient
Date:
Fri Nov 03 13:18:57 2017 -0700
Revision:
35:d0bed2404ee9
Parent:
30:0407b2db334c
Child:
47:365a93fdb5bb
1.1.27

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Azure.IoT Build 0:6ae2f7bca550 1 // Copyright (c) Microsoft. All rights reserved.
Azure.IoT Build 0:6ae2f7bca550 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
Azure.IoT Build 0:6ae2f7bca550 3
Azure.IoT Build 0:6ae2f7bca550 4 #include <stdlib.h>
Azure.IoT Build 0:6ae2f7bca550 5 #include <stdint.h>
AzureIoTClient 30:0407b2db334c 6 #include <inttypes.h>
Azure.IoT Build 0:6ae2f7bca550 7 #include <stddef.h>
Azure.IoT Build 0:6ae2f7bca550 8 #include <string.h>
Azure.IoT Build 0:6ae2f7bca550 9 #include <stdio.h>
AzureIoTClient 19:000ab4e6a2c1 10 #include "azure_c_shared_utility/optimize_size.h"
AzureIoTClient 21:f9c433d8e6ca 11 #include "azure_c_shared_utility/gballoc.h"
AzureIoTClient 35:d0bed2404ee9 12 #include "azure_c_shared_utility/xlogging.h"
AzureIoTClient 35:d0bed2404ee9 13 #include "azure_c_shared_utility/uuid.h"
Azure.IoT Build 0:6ae2f7bca550 14 #include "azure_uamqp_c/amqpvalue_to_string.h"
Azure.IoT Build 0:6ae2f7bca550 15 #include "azure_uamqp_c/amqpvalue.h"
Azure.IoT Build 0:6ae2f7bca550 16
Azure.IoT Build 0:6ae2f7bca550 17 #if _WIN32
Azure.IoT Build 0:6ae2f7bca550 18 /* The MS runtime does not have snprintf */
Azure.IoT Build 0:6ae2f7bca550 19 #define snprintf _snprintf
Azure.IoT Build 0:6ae2f7bca550 20 #endif
Azure.IoT Build 0:6ae2f7bca550 21
Azure.IoT Build 0:6ae2f7bca550 22 static int string_concat(char** string, const char* to_concat)
Azure.IoT Build 0:6ae2f7bca550 23 {
AzureIoTClient 28:add19eb7defa 24 int result;
AzureIoTClient 35:d0bed2404ee9 25 char* new_string;
AzureIoTClient 35:d0bed2404ee9 26 size_t length = strlen(to_concat) + 1;
AzureIoTClient 35:d0bed2404ee9 27 size_t src_length;
Azure.IoT Build 0:6ae2f7bca550 28
AzureIoTClient 35:d0bed2404ee9 29 if (*string != NULL)
AzureIoTClient 35:d0bed2404ee9 30 {
AzureIoTClient 35:d0bed2404ee9 31 src_length = strlen(*string);
AzureIoTClient 35:d0bed2404ee9 32 }
AzureIoTClient 35:d0bed2404ee9 33 else
AzureIoTClient 28:add19eb7defa 34 {
AzureIoTClient 35:d0bed2404ee9 35 src_length = 0;
AzureIoTClient 35:d0bed2404ee9 36 }
AzureIoTClient 35:d0bed2404ee9 37
AzureIoTClient 35:d0bed2404ee9 38 new_string = (char*)realloc(*string, src_length + length);
AzureIoTClient 35:d0bed2404ee9 39 if (new_string == NULL)
AzureIoTClient 35:d0bed2404ee9 40 {
AzureIoTClient 35:d0bed2404ee9 41 LogError("Cannot allocate memory for the new string");
AzureIoTClient 28:add19eb7defa 42 result = __FAILURE__;
AzureIoTClient 28:add19eb7defa 43 }
AzureIoTClient 28:add19eb7defa 44 else
AzureIoTClient 28:add19eb7defa 45 {
AzureIoTClient 35:d0bed2404ee9 46 *string = new_string;
AzureIoTClient 35:d0bed2404ee9 47 (void)memcpy(*string + src_length, to_concat, length);
AzureIoTClient 35:d0bed2404ee9 48 result = 0;
AzureIoTClient 28:add19eb7defa 49 }
Azure.IoT Build 0:6ae2f7bca550 50
AzureIoTClient 28:add19eb7defa 51 return result;
Azure.IoT Build 0:6ae2f7bca550 52 }
Azure.IoT Build 0:6ae2f7bca550 53
Azure.IoT Build 0:6ae2f7bca550 54 char* amqpvalue_to_string(AMQP_VALUE amqp_value)
Azure.IoT Build 0:6ae2f7bca550 55 {
AzureIoTClient 28:add19eb7defa 56 char* result = NULL;
Azure.IoT Build 0:6ae2f7bca550 57
AzureIoTClient 28:add19eb7defa 58 if (amqp_value != NULL)
AzureIoTClient 28:add19eb7defa 59 {
AzureIoTClient 28:add19eb7defa 60 AMQP_TYPE amqp_type = amqpvalue_get_type(amqp_value);
AzureIoTClient 28:add19eb7defa 61 switch (amqp_type)
AzureIoTClient 28:add19eb7defa 62 {
AzureIoTClient 28:add19eb7defa 63 default:
AzureIoTClient 35:d0bed2404ee9 64 LogError("Unknown AMQP type");
AzureIoTClient 28:add19eb7defa 65 result = NULL;
AzureIoTClient 28:add19eb7defa 66 break;
Azure.IoT Build 0:6ae2f7bca550 67
AzureIoTClient 28:add19eb7defa 68 case AMQP_TYPE_NULL:
AzureIoTClient 28:add19eb7defa 69 if (string_concat(&result, "NULL") != 0)
AzureIoTClient 28:add19eb7defa 70 {
AzureIoTClient 35:d0bed2404ee9 71 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 72 free(result);
AzureIoTClient 28:add19eb7defa 73 result = NULL;
AzureIoTClient 28:add19eb7defa 74 }
AzureIoTClient 28:add19eb7defa 75 break;
AzureIoTClient 28:add19eb7defa 76 case AMQP_TYPE_BOOL:
AzureIoTClient 28:add19eb7defa 77 {
AzureIoTClient 28:add19eb7defa 78 bool value;
AzureIoTClient 35:d0bed2404ee9 79 if (amqpvalue_get_boolean(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 80 {
AzureIoTClient 35:d0bed2404ee9 81 LogError("Failure getting bool value");
AzureIoTClient 35:d0bed2404ee9 82 free(result);
AzureIoTClient 35:d0bed2404ee9 83 result = NULL;
AzureIoTClient 35:d0bed2404ee9 84 }
AzureIoTClient 35:d0bed2404ee9 85 else if (string_concat(&result, (value == true) ? "true" : "false") != 0)
AzureIoTClient 35:d0bed2404ee9 86 {
AzureIoTClient 35:d0bed2404ee9 87 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 88 free(result);
AzureIoTClient 28:add19eb7defa 89 result = NULL;
AzureIoTClient 28:add19eb7defa 90 }
AzureIoTClient 28:add19eb7defa 91 break;
AzureIoTClient 28:add19eb7defa 92 }
AzureIoTClient 28:add19eb7defa 93 case AMQP_TYPE_UBYTE:
AzureIoTClient 28:add19eb7defa 94 {
AzureIoTClient 28:add19eb7defa 95 char str_value[4];
AzureIoTClient 28:add19eb7defa 96 uint8_t value;
AzureIoTClient 28:add19eb7defa 97 if (amqpvalue_get_ubyte(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 98 {
AzureIoTClient 35:d0bed2404ee9 99 LogError("Failure getting ubyte value");
AzureIoTClient 28:add19eb7defa 100 free(result);
AzureIoTClient 28:add19eb7defa 101 result = NULL;
AzureIoTClient 28:add19eb7defa 102 }
AzureIoTClient 35:d0bed2404ee9 103 else if ((sprintf(str_value, "%" PRIu8, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 104 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 105 {
AzureIoTClient 35:d0bed2404ee9 106 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 107 free(result);
AzureIoTClient 35:d0bed2404ee9 108 result = NULL;
AzureIoTClient 28:add19eb7defa 109 }
AzureIoTClient 28:add19eb7defa 110 break;
AzureIoTClient 28:add19eb7defa 111 }
AzureIoTClient 28:add19eb7defa 112 case AMQP_TYPE_USHORT:
AzureIoTClient 28:add19eb7defa 113 {
AzureIoTClient 28:add19eb7defa 114 char str_value[6];
AzureIoTClient 28:add19eb7defa 115 uint16_t value;
AzureIoTClient 28:add19eb7defa 116 if (amqpvalue_get_ushort(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 117 {
AzureIoTClient 35:d0bed2404ee9 118 LogError("Failure getting ushort value");
AzureIoTClient 28:add19eb7defa 119 free(result);
AzureIoTClient 28:add19eb7defa 120 result = NULL;
AzureIoTClient 28:add19eb7defa 121 }
AzureIoTClient 35:d0bed2404ee9 122 else if ((sprintf(str_value, "%" PRIu16, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 123 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 124 {
AzureIoTClient 35:d0bed2404ee9 125 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 126 free(result);
AzureIoTClient 35:d0bed2404ee9 127 result = NULL;
AzureIoTClient 28:add19eb7defa 128 }
AzureIoTClient 28:add19eb7defa 129 break;
AzureIoTClient 28:add19eb7defa 130 }
AzureIoTClient 28:add19eb7defa 131 case AMQP_TYPE_UINT:
AzureIoTClient 28:add19eb7defa 132 {
AzureIoTClient 28:add19eb7defa 133 char str_value[11];
AzureIoTClient 28:add19eb7defa 134 uint32_t value;
AzureIoTClient 28:add19eb7defa 135 if (amqpvalue_get_uint(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 136 {
AzureIoTClient 35:d0bed2404ee9 137 LogError("Failure getting uint value");
AzureIoTClient 28:add19eb7defa 138 free(result);
AzureIoTClient 28:add19eb7defa 139 result = NULL;
AzureIoTClient 28:add19eb7defa 140 }
AzureIoTClient 35:d0bed2404ee9 141 else if ((sprintf(str_value, "%" PRIu32, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 142 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 143 {
AzureIoTClient 35:d0bed2404ee9 144 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 145 free(result);
AzureIoTClient 35:d0bed2404ee9 146 result = NULL;
AzureIoTClient 28:add19eb7defa 147 }
AzureIoTClient 28:add19eb7defa 148 break;
AzureIoTClient 28:add19eb7defa 149 }
AzureIoTClient 28:add19eb7defa 150 case AMQP_TYPE_ULONG:
AzureIoTClient 28:add19eb7defa 151 {
AzureIoTClient 28:add19eb7defa 152 char str_value[21];
AzureIoTClient 28:add19eb7defa 153 uint64_t value;
AzureIoTClient 28:add19eb7defa 154 if (amqpvalue_get_ulong(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 155 {
AzureIoTClient 35:d0bed2404ee9 156 LogError("Failure getting ulong value");
AzureIoTClient 28:add19eb7defa 157 free(result);
AzureIoTClient 28:add19eb7defa 158 result = NULL;
AzureIoTClient 28:add19eb7defa 159 }
AzureIoTClient 35:d0bed2404ee9 160 else if ((sprintf(str_value, "%" PRIu64, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 161 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 162 {
AzureIoTClient 35:d0bed2404ee9 163 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 164 free(result);
AzureIoTClient 35:d0bed2404ee9 165 result = NULL;
AzureIoTClient 28:add19eb7defa 166 }
AzureIoTClient 28:add19eb7defa 167 break;
AzureIoTClient 28:add19eb7defa 168 }
AzureIoTClient 28:add19eb7defa 169 case AMQP_TYPE_BYTE:
AzureIoTClient 28:add19eb7defa 170 {
AzureIoTClient 28:add19eb7defa 171 char str_value[5];
AzureIoTClient 30:0407b2db334c 172 char value;
AzureIoTClient 30:0407b2db334c 173 if (amqpvalue_get_byte(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 174 {
AzureIoTClient 35:d0bed2404ee9 175 LogError("Failure getting byte value");
AzureIoTClient 28:add19eb7defa 176 free(result);
AzureIoTClient 28:add19eb7defa 177 result = NULL;
AzureIoTClient 28:add19eb7defa 178 }
AzureIoTClient 35:d0bed2404ee9 179 else if ((sprintf(str_value, "%" PRId8, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 180 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 181 {
AzureIoTClient 35:d0bed2404ee9 182 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 183 free(result);
AzureIoTClient 35:d0bed2404ee9 184 result = NULL;
AzureIoTClient 28:add19eb7defa 185 }
AzureIoTClient 28:add19eb7defa 186 break;
AzureIoTClient 28:add19eb7defa 187 }
AzureIoTClient 28:add19eb7defa 188 case AMQP_TYPE_SHORT:
AzureIoTClient 28:add19eb7defa 189 {
AzureIoTClient 28:add19eb7defa 190 char str_value[7];
AzureIoTClient 30:0407b2db334c 191 int16_t value;
AzureIoTClient 30:0407b2db334c 192 if (amqpvalue_get_short(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 193 {
AzureIoTClient 35:d0bed2404ee9 194 LogError("Failure getting short value");
AzureIoTClient 28:add19eb7defa 195 free(result);
AzureIoTClient 28:add19eb7defa 196 result = NULL;
AzureIoTClient 28:add19eb7defa 197 }
AzureIoTClient 35:d0bed2404ee9 198 else if ((sprintf(str_value, "%" PRId16, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 199 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 200 {
AzureIoTClient 35:d0bed2404ee9 201 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 202 free(result);
AzureIoTClient 35:d0bed2404ee9 203 result = NULL;
AzureIoTClient 28:add19eb7defa 204 }
AzureIoTClient 28:add19eb7defa 205 break;
AzureIoTClient 28:add19eb7defa 206 }
AzureIoTClient 28:add19eb7defa 207 case AMQP_TYPE_INT:
AzureIoTClient 28:add19eb7defa 208 {
AzureIoTClient 28:add19eb7defa 209 char str_value[12];
AzureIoTClient 28:add19eb7defa 210 int32_t value;
AzureIoTClient 28:add19eb7defa 211 if (amqpvalue_get_int(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 212 {
AzureIoTClient 35:d0bed2404ee9 213 LogError("Failure getting int value");
AzureIoTClient 28:add19eb7defa 214 free(result);
AzureIoTClient 28:add19eb7defa 215 result = NULL;
AzureIoTClient 28:add19eb7defa 216 }
AzureIoTClient 35:d0bed2404ee9 217 else if ((sprintf(str_value, "%" PRId32, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 218 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 219 {
AzureIoTClient 35:d0bed2404ee9 220 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 221 free(result);
AzureIoTClient 35:d0bed2404ee9 222 result = NULL;
AzureIoTClient 28:add19eb7defa 223 }
AzureIoTClient 28:add19eb7defa 224 break;
AzureIoTClient 28:add19eb7defa 225 }
AzureIoTClient 28:add19eb7defa 226 case AMQP_TYPE_LONG:
AzureIoTClient 28:add19eb7defa 227 {
AzureIoTClient 28:add19eb7defa 228 char str_value[21];
AzureIoTClient 30:0407b2db334c 229 int64_t value;
AzureIoTClient 30:0407b2db334c 230 if (amqpvalue_get_long(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 231 {
AzureIoTClient 35:d0bed2404ee9 232 LogError("Failure getting long value");
AzureIoTClient 28:add19eb7defa 233 free(result);
AzureIoTClient 28:add19eb7defa 234 result = NULL;
AzureIoTClient 28:add19eb7defa 235 }
AzureIoTClient 35:d0bed2404ee9 236 else if ((sprintf(str_value, "%" PRId64, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 237 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 238 {
AzureIoTClient 35:d0bed2404ee9 239 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 240 free(result);
AzureIoTClient 35:d0bed2404ee9 241 result = NULL;
AzureIoTClient 28:add19eb7defa 242 }
AzureIoTClient 28:add19eb7defa 243 break;
AzureIoTClient 28:add19eb7defa 244 }
AzureIoTClient 28:add19eb7defa 245 case AMQP_TYPE_FLOAT:
AzureIoTClient 28:add19eb7defa 246 {
AzureIoTClient 28:add19eb7defa 247 float float_value;
AzureIoTClient 28:add19eb7defa 248 if (amqpvalue_get_float(amqp_value, &float_value) != 0)
AzureIoTClient 28:add19eb7defa 249 {
AzureIoTClient 35:d0bed2404ee9 250 LogError("Failure getting float value");
AzureIoTClient 28:add19eb7defa 251 free(result);
AzureIoTClient 28:add19eb7defa 252 result = NULL;
AzureIoTClient 28:add19eb7defa 253 }
AzureIoTClient 28:add19eb7defa 254 else
AzureIoTClient 28:add19eb7defa 255 {
AzureIoTClient 28:add19eb7defa 256 char str_value[25];
AzureIoTClient 28:add19eb7defa 257 if ((snprintf(str_value, sizeof(str_value), "%.02f", float_value) < 0) ||
AzureIoTClient 28:add19eb7defa 258 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 259 {
AzureIoTClient 35:d0bed2404ee9 260 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 261 free(result);
AzureIoTClient 28:add19eb7defa 262 result = NULL;
AzureIoTClient 28:add19eb7defa 263 }
AzureIoTClient 28:add19eb7defa 264 }
AzureIoTClient 28:add19eb7defa 265 break;
AzureIoTClient 28:add19eb7defa 266 }
AzureIoTClient 28:add19eb7defa 267 case AMQP_TYPE_DOUBLE:
AzureIoTClient 28:add19eb7defa 268 {
AzureIoTClient 28:add19eb7defa 269 double double_value;
AzureIoTClient 28:add19eb7defa 270 if (amqpvalue_get_double(amqp_value, &double_value) != 0)
AzureIoTClient 28:add19eb7defa 271 {
AzureIoTClient 35:d0bed2404ee9 272 LogError("Failure getting double value");
AzureIoTClient 28:add19eb7defa 273 free(result);
AzureIoTClient 28:add19eb7defa 274 result = NULL;
AzureIoTClient 28:add19eb7defa 275 }
AzureIoTClient 28:add19eb7defa 276 else
AzureIoTClient 28:add19eb7defa 277 {
AzureIoTClient 28:add19eb7defa 278 char str_value[25];
AzureIoTClient 28:add19eb7defa 279 if ((snprintf(str_value, sizeof(str_value), "%.02lf", double_value) < 0) ||
AzureIoTClient 28:add19eb7defa 280 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 281 {
AzureIoTClient 35:d0bed2404ee9 282 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 283 free(result);
AzureIoTClient 28:add19eb7defa 284 result = NULL;
AzureIoTClient 28:add19eb7defa 285 }
AzureIoTClient 28:add19eb7defa 286 }
AzureIoTClient 28:add19eb7defa 287 break;
AzureIoTClient 28:add19eb7defa 288 }
AzureIoTClient 28:add19eb7defa 289 case AMQP_TYPE_CHAR:
AzureIoTClient 28:add19eb7defa 290 {
AzureIoTClient 28:add19eb7defa 291 uint32_t char_code;
AzureIoTClient 28:add19eb7defa 292 if (amqpvalue_get_char(amqp_value, &char_code) != 0)
AzureIoTClient 28:add19eb7defa 293 {
AzureIoTClient 35:d0bed2404ee9 294 LogError("Failure getting char value");
AzureIoTClient 28:add19eb7defa 295 free(result);
AzureIoTClient 28:add19eb7defa 296 result = NULL;
AzureIoTClient 28:add19eb7defa 297 }
AzureIoTClient 28:add19eb7defa 298 else
AzureIoTClient 28:add19eb7defa 299 {
AzureIoTClient 28:add19eb7defa 300 char str_value[25];
AzureIoTClient 28:add19eb7defa 301 if ((snprintf(str_value, sizeof(str_value), "U%02X%02X%02X%02X", char_code >> 24, (char_code >> 16) & 0xFF, (char_code >> 8) & 0xFF, char_code & 0xFF) < 0) ||
AzureIoTClient 28:add19eb7defa 302 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 303 {
AzureIoTClient 35:d0bed2404ee9 304 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 305 free(result);
AzureIoTClient 28:add19eb7defa 306 result = NULL;
AzureIoTClient 28:add19eb7defa 307 }
AzureIoTClient 28:add19eb7defa 308 }
AzureIoTClient 28:add19eb7defa 309 break;
AzureIoTClient 28:add19eb7defa 310 }
AzureIoTClient 28:add19eb7defa 311 case AMQP_TYPE_TIMESTAMP:
AzureIoTClient 28:add19eb7defa 312 {
AzureIoTClient 28:add19eb7defa 313 char str_value[21];
AzureIoTClient 28:add19eb7defa 314 int64_t value;
AzureIoTClient 28:add19eb7defa 315 if (amqpvalue_get_timestamp(amqp_value, &value) != 0)
AzureIoTClient 28:add19eb7defa 316 {
AzureIoTClient 35:d0bed2404ee9 317 LogError("Failure getting timestamp value");
AzureIoTClient 35:d0bed2404ee9 318 free(result);
AzureIoTClient 35:d0bed2404ee9 319 result = NULL;
AzureIoTClient 35:d0bed2404ee9 320 }
AzureIoTClient 35:d0bed2404ee9 321 else if ((sprintf(str_value, "%" PRId64, value) < 0) ||
AzureIoTClient 35:d0bed2404ee9 322 (string_concat(&result, str_value) != 0))
AzureIoTClient 35:d0bed2404ee9 323 {
AzureIoTClient 35:d0bed2404ee9 324 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 325 free(result);
AzureIoTClient 35:d0bed2404ee9 326 result = NULL;
AzureIoTClient 35:d0bed2404ee9 327 }
AzureIoTClient 35:d0bed2404ee9 328 break;
AzureIoTClient 35:d0bed2404ee9 329 }
AzureIoTClient 35:d0bed2404ee9 330 case AMQP_TYPE_UUID:
AzureIoTClient 35:d0bed2404ee9 331 {
AzureIoTClient 35:d0bed2404ee9 332 uuid uuid_value;
AzureIoTClient 35:d0bed2404ee9 333 if (amqpvalue_get_uuid(amqp_value, &uuid_value) != 0)
AzureIoTClient 35:d0bed2404ee9 334 {
AzureIoTClient 35:d0bed2404ee9 335 LogError("Failure getting uuid value");
AzureIoTClient 28:add19eb7defa 336 free(result);
AzureIoTClient 28:add19eb7defa 337 result = NULL;
AzureIoTClient 28:add19eb7defa 338 }
AzureIoTClient 28:add19eb7defa 339 else
AzureIoTClient 28:add19eb7defa 340 {
AzureIoTClient 35:d0bed2404ee9 341 char* uuid_string_value = UUID_to_string(&uuid_value);
AzureIoTClient 35:d0bed2404ee9 342 if (uuid_string_value == NULL)
AzureIoTClient 28:add19eb7defa 343 {
AzureIoTClient 35:d0bed2404ee9 344 LogError("Failure getting UUID stringified value");
AzureIoTClient 28:add19eb7defa 345 free(result);
AzureIoTClient 28:add19eb7defa 346 result = NULL;
AzureIoTClient 28:add19eb7defa 347 }
AzureIoTClient 35:d0bed2404ee9 348 else
AzureIoTClient 35:d0bed2404ee9 349 {
AzureIoTClient 35:d0bed2404ee9 350 if (string_concat(&result, uuid_string_value) != 0)
AzureIoTClient 35:d0bed2404ee9 351 {
AzureIoTClient 35:d0bed2404ee9 352 LogError("Failure building amqp value string");
AzureIoTClient 35:d0bed2404ee9 353 free(result);
AzureIoTClient 35:d0bed2404ee9 354 result = NULL;
AzureIoTClient 35:d0bed2404ee9 355 }
AzureIoTClient 35:d0bed2404ee9 356
AzureIoTClient 35:d0bed2404ee9 357 free(uuid_string_value);
AzureIoTClient 35:d0bed2404ee9 358 }
AzureIoTClient 28:add19eb7defa 359 }
AzureIoTClient 35:d0bed2404ee9 360
AzureIoTClient 28:add19eb7defa 361 break;
AzureIoTClient 28:add19eb7defa 362 }
AzureIoTClient 35:d0bed2404ee9 363
AzureIoTClient 28:add19eb7defa 364 case AMQP_TYPE_BINARY:
AzureIoTClient 28:add19eb7defa 365 {
AzureIoTClient 28:add19eb7defa 366 amqp_binary binary_value;
AzureIoTClient 28:add19eb7defa 367 if (amqpvalue_get_binary(amqp_value, &binary_value) != 0)
AzureIoTClient 28:add19eb7defa 368 {
AzureIoTClient 35:d0bed2404ee9 369 LogError("Failure getting binary value");
AzureIoTClient 28:add19eb7defa 370 free(result);
AzureIoTClient 28:add19eb7defa 371 result = NULL;
AzureIoTClient 28:add19eb7defa 372 }
AzureIoTClient 28:add19eb7defa 373 else
AzureIoTClient 28:add19eb7defa 374 {
AzureIoTClient 28:add19eb7defa 375 if (string_concat(&result, "<") != 0)
AzureIoTClient 28:add19eb7defa 376 {
AzureIoTClient 35:d0bed2404ee9 377 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 378 free(result);
AzureIoTClient 28:add19eb7defa 379 result = NULL;
AzureIoTClient 28:add19eb7defa 380 }
AzureIoTClient 28:add19eb7defa 381 else
AzureIoTClient 28:add19eb7defa 382 {
AzureIoTClient 28:add19eb7defa 383 uint64_t i;
Azure.IoT Build 0:6ae2f7bca550 384
AzureIoTClient 28:add19eb7defa 385 for (i = 0; i < binary_value.length; i++)
AzureIoTClient 28:add19eb7defa 386 {
AzureIoTClient 28:add19eb7defa 387 char str_value[4];
AzureIoTClient 28:add19eb7defa 388 if ((snprintf(str_value, sizeof(str_value), "%s%02X", (i > 0) ? " " : "", ((unsigned char*)binary_value.bytes)[i]) < 0) ||
AzureIoTClient 28:add19eb7defa 389 (string_concat(&result, str_value) != 0))
AzureIoTClient 28:add19eb7defa 390 {
AzureIoTClient 28:add19eb7defa 391 break;
AzureIoTClient 28:add19eb7defa 392 }
AzureIoTClient 28:add19eb7defa 393 }
Azure.IoT Build 0:6ae2f7bca550 394
AzureIoTClient 35:d0bed2404ee9 395 if ((i < binary_value.length) ||
AzureIoTClient 35:d0bed2404ee9 396 (string_concat(&result, ">") != 0))
AzureIoTClient 28:add19eb7defa 397 {
AzureIoTClient 35:d0bed2404ee9 398 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 399 free(result);
AzureIoTClient 28:add19eb7defa 400 result = NULL;
AzureIoTClient 28:add19eb7defa 401 }
AzureIoTClient 28:add19eb7defa 402 }
AzureIoTClient 28:add19eb7defa 403 }
AzureIoTClient 28:add19eb7defa 404 break;
AzureIoTClient 28:add19eb7defa 405 }
AzureIoTClient 28:add19eb7defa 406 case AMQP_TYPE_STRING:
AzureIoTClient 28:add19eb7defa 407 {
AzureIoTClient 28:add19eb7defa 408 const char* string_value;
AzureIoTClient 28:add19eb7defa 409 if (amqpvalue_get_string(amqp_value, &string_value) != 0)
AzureIoTClient 28:add19eb7defa 410 {
AzureIoTClient 35:d0bed2404ee9 411 LogError("Failure getting string value");
AzureIoTClient 28:add19eb7defa 412 free(result);
AzureIoTClient 28:add19eb7defa 413 result = NULL;
AzureIoTClient 28:add19eb7defa 414 }
AzureIoTClient 28:add19eb7defa 415 else
AzureIoTClient 28:add19eb7defa 416 {
AzureIoTClient 28:add19eb7defa 417 if (string_concat(&result, string_value) != 0)
AzureIoTClient 28:add19eb7defa 418 {
AzureIoTClient 35:d0bed2404ee9 419 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 420 free(result);
AzureIoTClient 28:add19eb7defa 421 result = NULL;
AzureIoTClient 28:add19eb7defa 422 }
AzureIoTClient 28:add19eb7defa 423 }
AzureIoTClient 28:add19eb7defa 424 break;
AzureIoTClient 28:add19eb7defa 425 }
AzureIoTClient 28:add19eb7defa 426 case AMQP_TYPE_SYMBOL:
AzureIoTClient 28:add19eb7defa 427 {
AzureIoTClient 28:add19eb7defa 428 const char* string_value;
AzureIoTClient 28:add19eb7defa 429 if (amqpvalue_get_symbol(amqp_value, &string_value) != 0)
AzureIoTClient 28:add19eb7defa 430 {
AzureIoTClient 35:d0bed2404ee9 431 LogError("Failure getting symbol value");
AzureIoTClient 28:add19eb7defa 432 free(result);
AzureIoTClient 28:add19eb7defa 433 result = NULL;
AzureIoTClient 28:add19eb7defa 434 }
AzureIoTClient 28:add19eb7defa 435 else
AzureIoTClient 28:add19eb7defa 436 {
AzureIoTClient 28:add19eb7defa 437 if (string_concat(&result, string_value) != 0)
AzureIoTClient 28:add19eb7defa 438 {
AzureIoTClient 35:d0bed2404ee9 439 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 440 free(result);
AzureIoTClient 28:add19eb7defa 441 result = NULL;
AzureIoTClient 28:add19eb7defa 442 }
AzureIoTClient 28:add19eb7defa 443 }
AzureIoTClient 28:add19eb7defa 444 break;
AzureIoTClient 28:add19eb7defa 445 }
AzureIoTClient 28:add19eb7defa 446 case AMQP_TYPE_LIST:
AzureIoTClient 28:add19eb7defa 447 {
AzureIoTClient 28:add19eb7defa 448 uint32_t count;
AzureIoTClient 35:d0bed2404ee9 449 if (amqpvalue_get_list_item_count(amqp_value, &count) != 0)
AzureIoTClient 28:add19eb7defa 450 {
AzureIoTClient 35:d0bed2404ee9 451 LogError("Failure getting list item count value");
AzureIoTClient 35:d0bed2404ee9 452 free(result);
AzureIoTClient 35:d0bed2404ee9 453 result = NULL;
AzureIoTClient 35:d0bed2404ee9 454 }
AzureIoTClient 35:d0bed2404ee9 455 else if (string_concat(&result, "{") != 0)
AzureIoTClient 35:d0bed2404ee9 456 {
AzureIoTClient 35:d0bed2404ee9 457 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 458 free(result);
AzureIoTClient 28:add19eb7defa 459 result = NULL;
AzureIoTClient 28:add19eb7defa 460 }
AzureIoTClient 28:add19eb7defa 461 else
AzureIoTClient 28:add19eb7defa 462 {
AzureIoTClient 28:add19eb7defa 463 size_t i;
AzureIoTClient 28:add19eb7defa 464 for (i = 0; i < count; i++)
AzureIoTClient 28:add19eb7defa 465 {
AzureIoTClient 28:add19eb7defa 466 AMQP_VALUE item = amqpvalue_get_list_item(amqp_value, i);
AzureIoTClient 28:add19eb7defa 467 if (item == NULL)
AzureIoTClient 28:add19eb7defa 468 {
AzureIoTClient 35:d0bed2404ee9 469 LogError("Failure getting item %u from list", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 470 break;
AzureIoTClient 28:add19eb7defa 471 }
AzureIoTClient 28:add19eb7defa 472 else
AzureIoTClient 28:add19eb7defa 473 {
AzureIoTClient 28:add19eb7defa 474 char* item_string = amqpvalue_to_string(item);
AzureIoTClient 28:add19eb7defa 475 if (item_string == NULL)
AzureIoTClient 28:add19eb7defa 476 {
AzureIoTClient 35:d0bed2404ee9 477 LogError("Failure converting item %u to string", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 478 amqpvalue_destroy(item);
AzureIoTClient 28:add19eb7defa 479 break;
AzureIoTClient 28:add19eb7defa 480 }
AzureIoTClient 28:add19eb7defa 481 else
AzureIoTClient 28:add19eb7defa 482 {
AzureIoTClient 35:d0bed2404ee9 483 if (((i > 0) && (string_concat(&result, ",") != 0)) ||
AzureIoTClient 35:d0bed2404ee9 484 (string_concat(&result, item_string) != 0))
AzureIoTClient 28:add19eb7defa 485 {
AzureIoTClient 35:d0bed2404ee9 486 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 487 free(result);
AzureIoTClient 28:add19eb7defa 488 result = NULL;
AzureIoTClient 28:add19eb7defa 489 break;
AzureIoTClient 28:add19eb7defa 490 }
Azure.IoT Build 0:6ae2f7bca550 491
AzureIoTClient 28:add19eb7defa 492 free(item_string);
AzureIoTClient 28:add19eb7defa 493 }
Azure.IoT Build 0:6ae2f7bca550 494
AzureIoTClient 28:add19eb7defa 495 amqpvalue_destroy(item);
AzureIoTClient 28:add19eb7defa 496 }
AzureIoTClient 28:add19eb7defa 497 }
Azure.IoT Build 0:6ae2f7bca550 498
AzureIoTClient 35:d0bed2404ee9 499 if (i < count)
AzureIoTClient 28:add19eb7defa 500 {
AzureIoTClient 35:d0bed2404ee9 501 // no log here, we already logged the error
AzureIoTClient 35:d0bed2404ee9 502 free(result);
AzureIoTClient 35:d0bed2404ee9 503 result = NULL;
AzureIoTClient 35:d0bed2404ee9 504 }
AzureIoTClient 35:d0bed2404ee9 505 else if (string_concat(&result, "}") != 0)
AzureIoTClient 35:d0bed2404ee9 506 {
AzureIoTClient 35:d0bed2404ee9 507 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 508 free(result);
AzureIoTClient 28:add19eb7defa 509 result = NULL;
AzureIoTClient 28:add19eb7defa 510 }
AzureIoTClient 28:add19eb7defa 511 }
AzureIoTClient 28:add19eb7defa 512 break;
AzureIoTClient 28:add19eb7defa 513 }
AzureIoTClient 28:add19eb7defa 514 case AMQP_TYPE_MAP:
AzureIoTClient 28:add19eb7defa 515 {
AzureIoTClient 28:add19eb7defa 516 uint32_t count;
AzureIoTClient 35:d0bed2404ee9 517 if (amqpvalue_get_map_pair_count(amqp_value, &count) != 0)
AzureIoTClient 28:add19eb7defa 518 {
AzureIoTClient 35:d0bed2404ee9 519 LogError("Failure getting map pair count");
AzureIoTClient 35:d0bed2404ee9 520 free(result);
AzureIoTClient 35:d0bed2404ee9 521 result = NULL;
AzureIoTClient 35:d0bed2404ee9 522 }
AzureIoTClient 35:d0bed2404ee9 523 else if (string_concat(&result, "{") != 0)
AzureIoTClient 35:d0bed2404ee9 524 {
AzureIoTClient 35:d0bed2404ee9 525 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 526 free(result);
AzureIoTClient 28:add19eb7defa 527 result = NULL;
AzureIoTClient 28:add19eb7defa 528 }
AzureIoTClient 28:add19eb7defa 529 else
AzureIoTClient 28:add19eb7defa 530 {
AzureIoTClient 28:add19eb7defa 531 uint32_t i;
AzureIoTClient 28:add19eb7defa 532 for (i = 0; i < count; i++)
AzureIoTClient 28:add19eb7defa 533 {
AzureIoTClient 28:add19eb7defa 534 AMQP_VALUE key;
AzureIoTClient 28:add19eb7defa 535 AMQP_VALUE value;
AzureIoTClient 28:add19eb7defa 536 if (amqpvalue_get_map_key_value_pair(amqp_value, i, &key, &value) != 0)
AzureIoTClient 28:add19eb7defa 537 {
AzureIoTClient 35:d0bed2404ee9 538 LogError("Failure getting key/value pair index %u", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 539 break;
AzureIoTClient 28:add19eb7defa 540 }
AzureIoTClient 28:add19eb7defa 541 else
AzureIoTClient 28:add19eb7defa 542 {
AzureIoTClient 28:add19eb7defa 543 char* key_string = amqpvalue_to_string(key);
AzureIoTClient 28:add19eb7defa 544 if (key_string == NULL)
AzureIoTClient 28:add19eb7defa 545 {
AzureIoTClient 35:d0bed2404ee9 546 LogError("Failure getting stringified key value for index %u", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 547 amqpvalue_destroy(key);
AzureIoTClient 28:add19eb7defa 548 amqpvalue_destroy(value);
AzureIoTClient 28:add19eb7defa 549 break;
AzureIoTClient 28:add19eb7defa 550 }
AzureIoTClient 28:add19eb7defa 551 else
AzureIoTClient 28:add19eb7defa 552 {
AzureIoTClient 28:add19eb7defa 553 char* value_string = amqpvalue_to_string(value);
AzureIoTClient 28:add19eb7defa 554 if (key_string == NULL)
AzureIoTClient 28:add19eb7defa 555 {
AzureIoTClient 35:d0bed2404ee9 556 LogError("Failure getting stringified value for index %u", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 557 free(key_string);
AzureIoTClient 28:add19eb7defa 558 amqpvalue_destroy(key);
AzureIoTClient 28:add19eb7defa 559 amqpvalue_destroy(value);
AzureIoTClient 28:add19eb7defa 560 break;
AzureIoTClient 28:add19eb7defa 561 }
AzureIoTClient 28:add19eb7defa 562 else
AzureIoTClient 28:add19eb7defa 563 {
AzureIoTClient 28:add19eb7defa 564 if (((i > 0) && (string_concat(&result, ",") != 0)) ||
AzureIoTClient 28:add19eb7defa 565 (string_concat(&result, "[") != 0) ||
AzureIoTClient 28:add19eb7defa 566 (string_concat(&result, key_string) != 0) ||
AzureIoTClient 28:add19eb7defa 567 (string_concat(&result, ":") != 0) ||
AzureIoTClient 28:add19eb7defa 568 (string_concat(&result, value_string) != 0) ||
AzureIoTClient 28:add19eb7defa 569 (string_concat(&result, "]") != 0))
AzureIoTClient 28:add19eb7defa 570 {
AzureIoTClient 35:d0bed2404ee9 571 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 572 free(key_string);
AzureIoTClient 28:add19eb7defa 573 free(value_string);
AzureIoTClient 28:add19eb7defa 574 amqpvalue_destroy(key);
AzureIoTClient 28:add19eb7defa 575 amqpvalue_destroy(value);
AzureIoTClient 28:add19eb7defa 576 break;
AzureIoTClient 28:add19eb7defa 577 }
Azure.IoT Build 0:6ae2f7bca550 578
AzureIoTClient 28:add19eb7defa 579 free(value_string);
AzureIoTClient 28:add19eb7defa 580 }
Azure.IoT Build 0:6ae2f7bca550 581
AzureIoTClient 28:add19eb7defa 582 free(key_string);
AzureIoTClient 28:add19eb7defa 583 }
Azure.IoT Build 0:6ae2f7bca550 584
AzureIoTClient 28:add19eb7defa 585 amqpvalue_destroy(key);
AzureIoTClient 28:add19eb7defa 586 amqpvalue_destroy(value);
AzureIoTClient 28:add19eb7defa 587 }
AzureIoTClient 28:add19eb7defa 588 }
Azure.IoT Build 0:6ae2f7bca550 589
AzureIoTClient 35:d0bed2404ee9 590 if (i < count)
AzureIoTClient 28:add19eb7defa 591 {
AzureIoTClient 35:d0bed2404ee9 592 // no log here, we already logged the error
AzureIoTClient 35:d0bed2404ee9 593 free(result);
AzureIoTClient 35:d0bed2404ee9 594 result = NULL;
AzureIoTClient 35:d0bed2404ee9 595 }
AzureIoTClient 35:d0bed2404ee9 596 else if (string_concat(&result, "}") != 0)
AzureIoTClient 35:d0bed2404ee9 597 {
AzureIoTClient 35:d0bed2404ee9 598 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 599 free(result);
AzureIoTClient 28:add19eb7defa 600 result = NULL;
AzureIoTClient 28:add19eb7defa 601 }
AzureIoTClient 28:add19eb7defa 602 }
AzureIoTClient 28:add19eb7defa 603 break;
AzureIoTClient 28:add19eb7defa 604 }
AzureIoTClient 28:add19eb7defa 605 case AMQP_TYPE_ARRAY:
AzureIoTClient 28:add19eb7defa 606 {
AzureIoTClient 28:add19eb7defa 607 uint32_t count;
AzureIoTClient 35:d0bed2404ee9 608 if (amqpvalue_get_array_item_count(amqp_value, &count) != 0)
AzureIoTClient 28:add19eb7defa 609 {
AzureIoTClient 35:d0bed2404ee9 610 LogError("Failure getting array item count");
AzureIoTClient 35:d0bed2404ee9 611 free(result);
AzureIoTClient 35:d0bed2404ee9 612 result = NULL;
AzureIoTClient 35:d0bed2404ee9 613 }
AzureIoTClient 35:d0bed2404ee9 614 else if (string_concat(&result, "{") != 0)
AzureIoTClient 35:d0bed2404ee9 615 {
AzureIoTClient 35:d0bed2404ee9 616 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 617 free(result);
AzureIoTClient 28:add19eb7defa 618 result = NULL;
AzureIoTClient 28:add19eb7defa 619 }
AzureIoTClient 28:add19eb7defa 620 else
AzureIoTClient 28:add19eb7defa 621 {
AzureIoTClient 28:add19eb7defa 622 uint32_t i;
AzureIoTClient 28:add19eb7defa 623 for (i = 0; i < count; i++)
AzureIoTClient 28:add19eb7defa 624 {
AzureIoTClient 28:add19eb7defa 625 AMQP_VALUE item = amqpvalue_get_array_item(amqp_value, i);
AzureIoTClient 28:add19eb7defa 626 if (item == NULL)
AzureIoTClient 28:add19eb7defa 627 {
AzureIoTClient 35:d0bed2404ee9 628 LogError("Failure getting array item for index %u", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 629 break;
AzureIoTClient 28:add19eb7defa 630 }
AzureIoTClient 28:add19eb7defa 631 else
AzureIoTClient 28:add19eb7defa 632 {
AzureIoTClient 28:add19eb7defa 633 char* item_string = amqpvalue_to_string(item);
AzureIoTClient 28:add19eb7defa 634 if (item_string == NULL)
AzureIoTClient 28:add19eb7defa 635 {
AzureIoTClient 35:d0bed2404ee9 636 LogError("Failure getting stringified array item value for index %u", (unsigned int)i);
AzureIoTClient 28:add19eb7defa 637 amqpvalue_destroy(item);
AzureIoTClient 28:add19eb7defa 638 break;
AzureIoTClient 28:add19eb7defa 639 }
AzureIoTClient 28:add19eb7defa 640 else
AzureIoTClient 28:add19eb7defa 641 {
AzureIoTClient 35:d0bed2404ee9 642 if (((i > 0) && (string_concat(&result, ",") != 0)) ||
AzureIoTClient 35:d0bed2404ee9 643 (string_concat(&result, item_string) != 0))
AzureIoTClient 28:add19eb7defa 644 {
AzureIoTClient 35:d0bed2404ee9 645 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 646 free(result);
AzureIoTClient 28:add19eb7defa 647 result = NULL;
AzureIoTClient 28:add19eb7defa 648 break;
AzureIoTClient 28:add19eb7defa 649 }
Azure.IoT Build 0:6ae2f7bca550 650
AzureIoTClient 28:add19eb7defa 651 free(item_string);
AzureIoTClient 28:add19eb7defa 652 }
Azure.IoT Build 0:6ae2f7bca550 653
AzureIoTClient 28:add19eb7defa 654 amqpvalue_destroy(item);
AzureIoTClient 28:add19eb7defa 655 }
AzureIoTClient 28:add19eb7defa 656 }
Azure.IoT Build 0:6ae2f7bca550 657
AzureIoTClient 35:d0bed2404ee9 658 if (i < count)
AzureIoTClient 28:add19eb7defa 659 {
AzureIoTClient 35:d0bed2404ee9 660 // no log here, we already logged the error
AzureIoTClient 35:d0bed2404ee9 661 free(result);
AzureIoTClient 35:d0bed2404ee9 662 result = NULL;
AzureIoTClient 35:d0bed2404ee9 663 }
AzureIoTClient 35:d0bed2404ee9 664 else if (string_concat(&result, "}") != 0)
AzureIoTClient 35:d0bed2404ee9 665 {
AzureIoTClient 35:d0bed2404ee9 666 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 667 free(result);
AzureIoTClient 28:add19eb7defa 668 result = NULL;
AzureIoTClient 28:add19eb7defa 669 }
AzureIoTClient 28:add19eb7defa 670 }
AzureIoTClient 28:add19eb7defa 671 break;
AzureIoTClient 28:add19eb7defa 672 }
AzureIoTClient 28:add19eb7defa 673 case AMQP_TYPE_COMPOSITE:
AzureIoTClient 28:add19eb7defa 674 case AMQP_TYPE_DESCRIBED:
AzureIoTClient 28:add19eb7defa 675 {
AzureIoTClient 28:add19eb7defa 676 AMQP_VALUE described_value = amqpvalue_get_inplace_described_value(amqp_value);
AzureIoTClient 28:add19eb7defa 677 if (described_value == NULL)
AzureIoTClient 28:add19eb7defa 678 {
AzureIoTClient 35:d0bed2404ee9 679 LogError("Failure getting described value");
AzureIoTClient 28:add19eb7defa 680 free(result);
AzureIoTClient 28:add19eb7defa 681 result = NULL;
AzureIoTClient 28:add19eb7defa 682 }
AzureIoTClient 28:add19eb7defa 683 else
AzureIoTClient 28:add19eb7defa 684 {
AzureIoTClient 28:add19eb7defa 685 if (string_concat(&result, "* ") != 0)
AzureIoTClient 28:add19eb7defa 686 {
AzureIoTClient 35:d0bed2404ee9 687 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 688 free(result);
AzureIoTClient 28:add19eb7defa 689 result = NULL;
AzureIoTClient 28:add19eb7defa 690 }
AzureIoTClient 28:add19eb7defa 691 else
AzureIoTClient 28:add19eb7defa 692 {
AzureIoTClient 28:add19eb7defa 693 char* described_value_string = amqpvalue_to_string(described_value);
AzureIoTClient 28:add19eb7defa 694 if (described_value_string == NULL)
AzureIoTClient 28:add19eb7defa 695 {
AzureIoTClient 35:d0bed2404ee9 696 LogError("Failure getting stringified described value");
AzureIoTClient 28:add19eb7defa 697 free(result);
AzureIoTClient 28:add19eb7defa 698 result = NULL;
AzureIoTClient 28:add19eb7defa 699 }
AzureIoTClient 28:add19eb7defa 700 else
AzureIoTClient 28:add19eb7defa 701 {
AzureIoTClient 28:add19eb7defa 702 if (string_concat(&result, described_value_string) != 0)
AzureIoTClient 28:add19eb7defa 703 {
AzureIoTClient 35:d0bed2404ee9 704 LogError("Failure building amqp value string");
AzureIoTClient 28:add19eb7defa 705 free(result);
AzureIoTClient 28:add19eb7defa 706 result = NULL;
AzureIoTClient 28:add19eb7defa 707 }
Azure.IoT Build 0:6ae2f7bca550 708
AzureIoTClient 28:add19eb7defa 709 free(described_value_string);
AzureIoTClient 28:add19eb7defa 710 }
AzureIoTClient 28:add19eb7defa 711 }
AzureIoTClient 28:add19eb7defa 712 }
AzureIoTClient 28:add19eb7defa 713 break;
AzureIoTClient 28:add19eb7defa 714 }
AzureIoTClient 28:add19eb7defa 715 }
AzureIoTClient 28:add19eb7defa 716 }
Azure.IoT Build 0:6ae2f7bca550 717
AzureIoTClient 28:add19eb7defa 718 return result;
Azure.IoT Build 0:6ae2f7bca550 719 }