A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
AzureIoTClient
Date:
Fri Jun 30 10:41:22 2017 -0700
Revision:
28:add19eb7defa
Parent:
25:1101516ee67d
Child:
30:0407b2db334c
1.1.18

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