Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

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