A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
AzureIoTClient
Date:
Tue Jan 24 15:23:52 2017 -0800
Revision:
17:923575db8b2d
Parent:
6:641a9672db08
Child:
19:000ab4e6a2c1
1.1.5

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