A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
AzureIoTClient
Date:
Fri Feb 24 14:00:58 2017 -0800
Revision:
19:000ab4e6a2c1
Parent:
17:923575db8b2d
Child:
21:f9c433d8e6ca
1.1.8

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