Demo using MBED TLS

Dependencies:   EthernetInterface NTPClient iothub_amqp_transport iothub_client mbed-rtos mbed

Fork of iothub_client_sample_amqp by Azure IoT

Committer:
markrad
Date:
Thu Jan 05 00:20:03 2017 +0000
Revision:
58:f50b97b08851
Sample using MBED TLS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 58:f50b97b08851 1 // Copyright (c) Microsoft. All rights reserved.
markrad 58:f50b97b08851 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
markrad 58:f50b97b08851 3
markrad 58:f50b97b08851 4 #include <stdlib.h>
markrad 58:f50b97b08851 5 #ifdef _CRTDBG_MAP_ALLOC
markrad 58:f50b97b08851 6 #include <crtdbg.h>
markrad 58:f50b97b08851 7 #endif
markrad 58:f50b97b08851 8 #include <string.h>
markrad 58:f50b97b08851 9 #include "azure_uamqp_c/message.h"
markrad 58:f50b97b08851 10 #include "azure_uamqp_c/amqpvalue.h"
markrad 58:f50b97b08851 11 #include "azure_uamqp_c/amqpalloc.h"
markrad 58:f50b97b08851 12
markrad 58:f50b97b08851 13 typedef struct BODY_AMQP_DATA_TAG
markrad 58:f50b97b08851 14 {
markrad 58:f50b97b08851 15 unsigned char* body_data_section_bytes;
markrad 58:f50b97b08851 16 size_t body_data_section_length;
markrad 58:f50b97b08851 17 } BODY_AMQP_DATA;
markrad 58:f50b97b08851 18
markrad 58:f50b97b08851 19 typedef struct MESSAGE_INSTANCE_TAG
markrad 58:f50b97b08851 20 {
markrad 58:f50b97b08851 21 BODY_AMQP_DATA* body_amqp_data_items;
markrad 58:f50b97b08851 22 size_t body_amqp_data_count;
markrad 58:f50b97b08851 23 AMQP_VALUE* body_amqp_sequence_items;
markrad 58:f50b97b08851 24 size_t body_amqp_sequence_count;
markrad 58:f50b97b08851 25 AMQP_VALUE body_amqp_value;
markrad 58:f50b97b08851 26 HEADER_HANDLE header;
markrad 58:f50b97b08851 27 annotations delivery_annotations;
markrad 58:f50b97b08851 28 annotations message_annotations;
markrad 58:f50b97b08851 29 PROPERTIES_HANDLE properties;
markrad 58:f50b97b08851 30 application_properties application_properties;
markrad 58:f50b97b08851 31 annotations footer;
markrad 58:f50b97b08851 32 uint32_t message_format;
markrad 58:f50b97b08851 33 } MESSAGE_INSTANCE;
markrad 58:f50b97b08851 34
markrad 58:f50b97b08851 35 static void free_all_body_data_items(MESSAGE_INSTANCE* message_instance)
markrad 58:f50b97b08851 36 {
markrad 58:f50b97b08851 37 size_t i;
markrad 58:f50b97b08851 38
markrad 58:f50b97b08851 39 for (i = 0; i < message_instance->body_amqp_data_count; i++)
markrad 58:f50b97b08851 40 {
markrad 58:f50b97b08851 41 if (message_instance->body_amqp_data_items[i].body_data_section_bytes != NULL)
markrad 58:f50b97b08851 42 {
markrad 58:f50b97b08851 43 amqpalloc_free(message_instance->body_amqp_data_items[i].body_data_section_bytes);
markrad 58:f50b97b08851 44 }
markrad 58:f50b97b08851 45 }
markrad 58:f50b97b08851 46
markrad 58:f50b97b08851 47 amqpalloc_free(message_instance->body_amqp_data_items);
markrad 58:f50b97b08851 48 message_instance->body_amqp_data_count = 0;
markrad 58:f50b97b08851 49 message_instance->body_amqp_data_items = NULL;
markrad 58:f50b97b08851 50 }
markrad 58:f50b97b08851 51
markrad 58:f50b97b08851 52 static void free_all_body_sequence_items(MESSAGE_INSTANCE* message_instance)
markrad 58:f50b97b08851 53 {
markrad 58:f50b97b08851 54 size_t i;
markrad 58:f50b97b08851 55
markrad 58:f50b97b08851 56 for (i = 0; i < message_instance->body_amqp_sequence_count; i++)
markrad 58:f50b97b08851 57 {
markrad 58:f50b97b08851 58 if (message_instance->body_amqp_sequence_items[i] != NULL)
markrad 58:f50b97b08851 59 {
markrad 58:f50b97b08851 60 amqpvalue_destroy(message_instance->body_amqp_sequence_items[i]);
markrad 58:f50b97b08851 61 }
markrad 58:f50b97b08851 62 }
markrad 58:f50b97b08851 63
markrad 58:f50b97b08851 64 amqpalloc_free(message_instance->body_amqp_sequence_items);
markrad 58:f50b97b08851 65 message_instance->body_amqp_sequence_count = 0;
markrad 58:f50b97b08851 66 message_instance->body_amqp_sequence_items = NULL;
markrad 58:f50b97b08851 67 }
markrad 58:f50b97b08851 68
markrad 58:f50b97b08851 69 MESSAGE_HANDLE message_create(void)
markrad 58:f50b97b08851 70 {
markrad 58:f50b97b08851 71 MESSAGE_INSTANCE* result = (MESSAGE_INSTANCE*)amqpalloc_malloc(sizeof(MESSAGE_INSTANCE));
markrad 58:f50b97b08851 72 /* Codes_SRS_MESSAGE_01_002: [If allocating memory for the message fails, message_create shall fail and return NULL.] */
markrad 58:f50b97b08851 73 if (result != NULL)
markrad 58:f50b97b08851 74 {
markrad 58:f50b97b08851 75 result->header = NULL;
markrad 58:f50b97b08851 76 result->delivery_annotations = NULL;
markrad 58:f50b97b08851 77 result->message_annotations = NULL;
markrad 58:f50b97b08851 78 result->properties = NULL;
markrad 58:f50b97b08851 79 result->application_properties = NULL;
markrad 58:f50b97b08851 80 result->footer = NULL;
markrad 58:f50b97b08851 81 result->body_amqp_data_items = NULL;
markrad 58:f50b97b08851 82 result->body_amqp_data_count = 0;
markrad 58:f50b97b08851 83 result->body_amqp_value = NULL;
markrad 58:f50b97b08851 84 result->body_amqp_sequence_items = NULL;
markrad 58:f50b97b08851 85 result->body_amqp_sequence_count = 0;
markrad 58:f50b97b08851 86 result->message_format = 0;
markrad 58:f50b97b08851 87 }
markrad 58:f50b97b08851 88
markrad 58:f50b97b08851 89 /* Codes_SRS_MESSAGE_01_001: [message_create shall create a new AMQP message instance and on success it shall return a non-NULL handle for the newly created message instance.] */
markrad 58:f50b97b08851 90 return result;
markrad 58:f50b97b08851 91 }
markrad 58:f50b97b08851 92
markrad 58:f50b97b08851 93 MESSAGE_HANDLE message_clone(MESSAGE_HANDLE source_message)
markrad 58:f50b97b08851 94 {
markrad 58:f50b97b08851 95 MESSAGE_INSTANCE* result;
markrad 58:f50b97b08851 96
markrad 58:f50b97b08851 97 /* Codes_SRS_MESSAGE_01_062: [If source_message is NULL, message_clone shall fail and return NULL.] */
markrad 58:f50b97b08851 98 if (source_message == NULL)
markrad 58:f50b97b08851 99 {
markrad 58:f50b97b08851 100 result = NULL;
markrad 58:f50b97b08851 101 }
markrad 58:f50b97b08851 102 else
markrad 58:f50b97b08851 103 {
markrad 58:f50b97b08851 104 MESSAGE_INSTANCE* source_message_instance = (MESSAGE_INSTANCE*)source_message;
markrad 58:f50b97b08851 105 result = (MESSAGE_INSTANCE*)message_create();
markrad 58:f50b97b08851 106
markrad 58:f50b97b08851 107 /* Codes_SRS_MESSAGE_01_003: [message_clone shall clone a message entirely and on success return a non-NULL handle to the cloned message.] */
markrad 58:f50b97b08851 108 /* Codes_SRS_MESSAGE_01_004: [If allocating memory for the new cloned message fails, message_clone shall fail and return NULL.] */
markrad 58:f50b97b08851 109 if (result != NULL)
markrad 58:f50b97b08851 110 {
markrad 58:f50b97b08851 111 result->message_format = source_message_instance->message_format;
markrad 58:f50b97b08851 112
markrad 58:f50b97b08851 113 if (source_message_instance->header != NULL)
markrad 58:f50b97b08851 114 {
markrad 58:f50b97b08851 115 /* Codes_SRS_MESSAGE_01_005: [If a header exists on the source message it shall be cloned by using header_clone.] */
markrad 58:f50b97b08851 116 result->header = header_clone(source_message_instance->header);
markrad 58:f50b97b08851 117 if (result->header == NULL)
markrad 58:f50b97b08851 118 {
markrad 58:f50b97b08851 119 message_destroy(result);
markrad 58:f50b97b08851 120 result = NULL;
markrad 58:f50b97b08851 121 }
markrad 58:f50b97b08851 122 }
markrad 58:f50b97b08851 123
markrad 58:f50b97b08851 124 if ((result != NULL) && (source_message_instance->delivery_annotations != NULL))
markrad 58:f50b97b08851 125 {
markrad 58:f50b97b08851 126 /* Codes_SRS_MESSAGE_01_006: [If delivery annotations exist on the source message they shall be cloned by using annotations_clone.] */
markrad 58:f50b97b08851 127 result->delivery_annotations = annotations_clone(source_message_instance->delivery_annotations);
markrad 58:f50b97b08851 128 if (result->delivery_annotations == NULL)
markrad 58:f50b97b08851 129 {
markrad 58:f50b97b08851 130 message_destroy(result);
markrad 58:f50b97b08851 131 result = NULL;
markrad 58:f50b97b08851 132 }
markrad 58:f50b97b08851 133 }
markrad 58:f50b97b08851 134
markrad 58:f50b97b08851 135 if ((result != NULL) && (source_message_instance->message_annotations != NULL))
markrad 58:f50b97b08851 136 {
markrad 58:f50b97b08851 137 /* Codes_SRS_MESSAGE_01_007: [If message annotations exist on the source message they shall be cloned by using annotations_clone.] */
markrad 58:f50b97b08851 138 result->message_annotations = annotations_clone(source_message_instance->message_annotations);
markrad 58:f50b97b08851 139 if (result->message_annotations == NULL)
markrad 58:f50b97b08851 140 {
markrad 58:f50b97b08851 141 message_destroy(result);
markrad 58:f50b97b08851 142 result = NULL;
markrad 58:f50b97b08851 143 }
markrad 58:f50b97b08851 144 }
markrad 58:f50b97b08851 145
markrad 58:f50b97b08851 146 if ((result != NULL) && (source_message_instance->properties != NULL))
markrad 58:f50b97b08851 147 {
markrad 58:f50b97b08851 148 /* Codes_SRS_MESSAGE_01_008: [If message properties exist on the source message they shall be cloned by using properties_clone.] */
markrad 58:f50b97b08851 149 result->properties = properties_clone(source_message_instance->properties);
markrad 58:f50b97b08851 150 if (result->properties == NULL)
markrad 58:f50b97b08851 151 {
markrad 58:f50b97b08851 152 message_destroy(result);
markrad 58:f50b97b08851 153 result = NULL;
markrad 58:f50b97b08851 154 }
markrad 58:f50b97b08851 155 }
markrad 58:f50b97b08851 156
markrad 58:f50b97b08851 157 if ((result != NULL) && (source_message_instance->application_properties != NULL))
markrad 58:f50b97b08851 158 {
markrad 58:f50b97b08851 159 /* Codes_SRS_MESSAGE_01_009: [If application properties exist on the source message they shall be cloned by using amqpvalue_clone.] */
markrad 58:f50b97b08851 160 result->application_properties = amqpvalue_clone(source_message_instance->application_properties);
markrad 58:f50b97b08851 161 if (result->application_properties == NULL)
markrad 58:f50b97b08851 162 {
markrad 58:f50b97b08851 163 message_destroy(result);
markrad 58:f50b97b08851 164 result = NULL;
markrad 58:f50b97b08851 165 }
markrad 58:f50b97b08851 166 }
markrad 58:f50b97b08851 167
markrad 58:f50b97b08851 168 if ((result != NULL) && (source_message_instance->footer != NULL))
markrad 58:f50b97b08851 169 {
markrad 58:f50b97b08851 170 /* Codes_SRS_MESSAGE_01_010: [If a footer exists on the source message it shall be cloned by using annotations_clone.] */
markrad 58:f50b97b08851 171 result->footer = amqpvalue_clone(source_message_instance->footer);
markrad 58:f50b97b08851 172 if (result->footer == NULL)
markrad 58:f50b97b08851 173 {
markrad 58:f50b97b08851 174 message_destroy(result);
markrad 58:f50b97b08851 175 result = NULL;
markrad 58:f50b97b08851 176 }
markrad 58:f50b97b08851 177 }
markrad 58:f50b97b08851 178
markrad 58:f50b97b08851 179 if ((result != NULL) && (source_message_instance->body_amqp_data_count > 0))
markrad 58:f50b97b08851 180 {
markrad 58:f50b97b08851 181 size_t i;
markrad 58:f50b97b08851 182
markrad 58:f50b97b08851 183 result->body_amqp_data_items = (BODY_AMQP_DATA*)amqpalloc_malloc(source_message_instance->body_amqp_data_count * sizeof(BODY_AMQP_DATA));
markrad 58:f50b97b08851 184 if (result->body_amqp_data_items == NULL)
markrad 58:f50b97b08851 185 {
markrad 58:f50b97b08851 186 message_destroy(result);
markrad 58:f50b97b08851 187 result = NULL;
markrad 58:f50b97b08851 188 }
markrad 58:f50b97b08851 189 else
markrad 58:f50b97b08851 190 {
markrad 58:f50b97b08851 191 for (i = 0; i < source_message_instance->body_amqp_data_count; i++)
markrad 58:f50b97b08851 192 {
markrad 58:f50b97b08851 193 result->body_amqp_data_items[i].body_data_section_length = source_message_instance->body_amqp_data_items[i].body_data_section_length;
markrad 58:f50b97b08851 194
markrad 58:f50b97b08851 195 /* Codes_SRS_MESSAGE_01_011: [If an AMQP data has been set as message body on the source message it shall be cloned by allocating memory for the binary payload.] */
markrad 58:f50b97b08851 196 result->body_amqp_data_items[i].body_data_section_bytes = amqpalloc_malloc(source_message_instance->body_amqp_data_items[i].body_data_section_length);
markrad 58:f50b97b08851 197 if (result->body_amqp_data_items[i].body_data_section_bytes == NULL)
markrad 58:f50b97b08851 198 {
markrad 58:f50b97b08851 199 break;
markrad 58:f50b97b08851 200 }
markrad 58:f50b97b08851 201 else
markrad 58:f50b97b08851 202 {
markrad 58:f50b97b08851 203 (void)memcpy(result->body_amqp_data_items[i].body_data_section_bytes, source_message_instance->body_amqp_data_items[i].body_data_section_bytes, result->body_amqp_data_items[i].body_data_section_length);
markrad 58:f50b97b08851 204 }
markrad 58:f50b97b08851 205 }
markrad 58:f50b97b08851 206
markrad 58:f50b97b08851 207 result->body_amqp_data_count = i;
markrad 58:f50b97b08851 208 if (i < source_message_instance->body_amqp_data_count)
markrad 58:f50b97b08851 209 {
markrad 58:f50b97b08851 210 message_destroy(result);
markrad 58:f50b97b08851 211 result = NULL;
markrad 58:f50b97b08851 212 }
markrad 58:f50b97b08851 213 }
markrad 58:f50b97b08851 214 }
markrad 58:f50b97b08851 215
markrad 58:f50b97b08851 216 if ((result != NULL) && (source_message_instance->body_amqp_sequence_count > 0))
markrad 58:f50b97b08851 217 {
markrad 58:f50b97b08851 218 size_t i;
markrad 58:f50b97b08851 219
markrad 58:f50b97b08851 220 result->body_amqp_sequence_items = (AMQP_VALUE*)amqpalloc_malloc(source_message_instance->body_amqp_sequence_count * sizeof(AMQP_VALUE));
markrad 58:f50b97b08851 221 if (result->body_amqp_sequence_items == NULL)
markrad 58:f50b97b08851 222 {
markrad 58:f50b97b08851 223 message_destroy(result);
markrad 58:f50b97b08851 224 result = NULL;
markrad 58:f50b97b08851 225 }
markrad 58:f50b97b08851 226 else
markrad 58:f50b97b08851 227 {
markrad 58:f50b97b08851 228 for (i = 0; i < source_message_instance->body_amqp_sequence_count; i++)
markrad 58:f50b97b08851 229 {
markrad 58:f50b97b08851 230 /* Codes_SRS_MESSAGE_01_011: [If an AMQP data has been set as message body on the source message it shall be cloned by allocating memory for the binary payload.] */
markrad 58:f50b97b08851 231 result->body_amqp_sequence_items[i] = amqpvalue_clone(source_message_instance->body_amqp_sequence_items[i]);
markrad 58:f50b97b08851 232 if (result->body_amqp_sequence_items[i] == NULL)
markrad 58:f50b97b08851 233 {
markrad 58:f50b97b08851 234 break;
markrad 58:f50b97b08851 235 }
markrad 58:f50b97b08851 236 }
markrad 58:f50b97b08851 237
markrad 58:f50b97b08851 238 result->body_amqp_sequence_count = i;
markrad 58:f50b97b08851 239 if (i < source_message_instance->body_amqp_sequence_count)
markrad 58:f50b97b08851 240 {
markrad 58:f50b97b08851 241 message_destroy(result);
markrad 58:f50b97b08851 242 result = NULL;
markrad 58:f50b97b08851 243 }
markrad 58:f50b97b08851 244 }
markrad 58:f50b97b08851 245 }
markrad 58:f50b97b08851 246
markrad 58:f50b97b08851 247 if ((result != NULL) && (source_message_instance->body_amqp_value != NULL))
markrad 58:f50b97b08851 248 {
markrad 58:f50b97b08851 249 result->body_amqp_value = amqpvalue_clone(source_message_instance->body_amqp_value);
markrad 58:f50b97b08851 250 if (result->body_amqp_value == NULL)
markrad 58:f50b97b08851 251 {
markrad 58:f50b97b08851 252 message_destroy(result);
markrad 58:f50b97b08851 253 result = NULL;
markrad 58:f50b97b08851 254 }
markrad 58:f50b97b08851 255 }
markrad 58:f50b97b08851 256 }
markrad 58:f50b97b08851 257 }
markrad 58:f50b97b08851 258
markrad 58:f50b97b08851 259 return result;
markrad 58:f50b97b08851 260 }
markrad 58:f50b97b08851 261
markrad 58:f50b97b08851 262 void message_destroy(MESSAGE_HANDLE message)
markrad 58:f50b97b08851 263 {
markrad 58:f50b97b08851 264 if (message != NULL)
markrad 58:f50b97b08851 265 {
markrad 58:f50b97b08851 266 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 267
markrad 58:f50b97b08851 268 if (message_instance->header != NULL)
markrad 58:f50b97b08851 269 {
markrad 58:f50b97b08851 270 header_destroy(message_instance->header);
markrad 58:f50b97b08851 271 }
markrad 58:f50b97b08851 272 if (message_instance->properties != NULL)
markrad 58:f50b97b08851 273 {
markrad 58:f50b97b08851 274 properties_destroy(message_instance->properties);
markrad 58:f50b97b08851 275 }
markrad 58:f50b97b08851 276 if (message_instance->application_properties != NULL)
markrad 58:f50b97b08851 277 {
markrad 58:f50b97b08851 278 application_properties_destroy(message_instance->application_properties);
markrad 58:f50b97b08851 279 }
markrad 58:f50b97b08851 280 if (message_instance->footer != NULL)
markrad 58:f50b97b08851 281 {
markrad 58:f50b97b08851 282 annotations_destroy(message_instance->footer);
markrad 58:f50b97b08851 283 }
markrad 58:f50b97b08851 284 if (message_instance->body_amqp_value != NULL)
markrad 58:f50b97b08851 285 {
markrad 58:f50b97b08851 286 amqpvalue_destroy(message_instance->body_amqp_value);
markrad 58:f50b97b08851 287 }
markrad 58:f50b97b08851 288 if (message_instance->message_annotations != NULL)
markrad 58:f50b97b08851 289 {
markrad 58:f50b97b08851 290 application_properties_destroy(message_instance->message_annotations);
markrad 58:f50b97b08851 291 }
markrad 58:f50b97b08851 292
markrad 58:f50b97b08851 293 free_all_body_data_items(message_instance);
markrad 58:f50b97b08851 294 free_all_body_sequence_items(message_instance);
markrad 58:f50b97b08851 295 amqpalloc_free(message_instance);
markrad 58:f50b97b08851 296 }
markrad 58:f50b97b08851 297 }
markrad 58:f50b97b08851 298
markrad 58:f50b97b08851 299 int message_set_header(MESSAGE_HANDLE message, HEADER_HANDLE header)
markrad 58:f50b97b08851 300 {
markrad 58:f50b97b08851 301 int result;
markrad 58:f50b97b08851 302
markrad 58:f50b97b08851 303 if ((message == NULL) ||
markrad 58:f50b97b08851 304 (header == NULL))
markrad 58:f50b97b08851 305 {
markrad 58:f50b97b08851 306 result = __LINE__;
markrad 58:f50b97b08851 307 }
markrad 58:f50b97b08851 308 else
markrad 58:f50b97b08851 309 {
markrad 58:f50b97b08851 310 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 311 HEADER_HANDLE new_header;
markrad 58:f50b97b08851 312
markrad 58:f50b97b08851 313 new_header = header_clone(header);
markrad 58:f50b97b08851 314 if (new_header == NULL)
markrad 58:f50b97b08851 315 {
markrad 58:f50b97b08851 316 result = __LINE__;
markrad 58:f50b97b08851 317 }
markrad 58:f50b97b08851 318 else
markrad 58:f50b97b08851 319 {
markrad 58:f50b97b08851 320 if (message_instance->header != NULL)
markrad 58:f50b97b08851 321 {
markrad 58:f50b97b08851 322 header_destroy(message_instance->header);
markrad 58:f50b97b08851 323 }
markrad 58:f50b97b08851 324
markrad 58:f50b97b08851 325 message_instance->header = new_header;
markrad 58:f50b97b08851 326 result = 0;
markrad 58:f50b97b08851 327 }
markrad 58:f50b97b08851 328 }
markrad 58:f50b97b08851 329
markrad 58:f50b97b08851 330 return result;
markrad 58:f50b97b08851 331 }
markrad 58:f50b97b08851 332
markrad 58:f50b97b08851 333 int message_get_header(MESSAGE_HANDLE message, HEADER_HANDLE* header)
markrad 58:f50b97b08851 334 {
markrad 58:f50b97b08851 335 int result;
markrad 58:f50b97b08851 336
markrad 58:f50b97b08851 337 if ((message == NULL) ||
markrad 58:f50b97b08851 338 (header == NULL))
markrad 58:f50b97b08851 339 {
markrad 58:f50b97b08851 340 result = __LINE__;
markrad 58:f50b97b08851 341 }
markrad 58:f50b97b08851 342 else
markrad 58:f50b97b08851 343 {
markrad 58:f50b97b08851 344 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 345
markrad 58:f50b97b08851 346 if (message_instance->header == NULL)
markrad 58:f50b97b08851 347 {
markrad 58:f50b97b08851 348 *header = NULL;
markrad 58:f50b97b08851 349 result = 0;
markrad 58:f50b97b08851 350 }
markrad 58:f50b97b08851 351 else
markrad 58:f50b97b08851 352 {
markrad 58:f50b97b08851 353 *header = header_clone(message_instance->header);
markrad 58:f50b97b08851 354 if (*header == NULL)
markrad 58:f50b97b08851 355 {
markrad 58:f50b97b08851 356 result = __LINE__;
markrad 58:f50b97b08851 357 }
markrad 58:f50b97b08851 358 else
markrad 58:f50b97b08851 359 {
markrad 58:f50b97b08851 360 result = 0;
markrad 58:f50b97b08851 361 }
markrad 58:f50b97b08851 362 }
markrad 58:f50b97b08851 363 }
markrad 58:f50b97b08851 364
markrad 58:f50b97b08851 365 return result;
markrad 58:f50b97b08851 366 }
markrad 58:f50b97b08851 367
markrad 58:f50b97b08851 368 int message_set_delivery_annotations(MESSAGE_HANDLE message, annotations delivery_annotations)
markrad 58:f50b97b08851 369 {
markrad 58:f50b97b08851 370 int result;
markrad 58:f50b97b08851 371
markrad 58:f50b97b08851 372 if ((message == NULL) ||
markrad 58:f50b97b08851 373 (delivery_annotations == NULL))
markrad 58:f50b97b08851 374 {
markrad 58:f50b97b08851 375 result = __LINE__;
markrad 58:f50b97b08851 376 }
markrad 58:f50b97b08851 377 else
markrad 58:f50b97b08851 378 {
markrad 58:f50b97b08851 379 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 380 annotations new_delivery_annotations;
markrad 58:f50b97b08851 381
markrad 58:f50b97b08851 382 new_delivery_annotations = annotations_clone(delivery_annotations);
markrad 58:f50b97b08851 383 if (new_delivery_annotations == NULL)
markrad 58:f50b97b08851 384 {
markrad 58:f50b97b08851 385 result = __LINE__;
markrad 58:f50b97b08851 386 }
markrad 58:f50b97b08851 387 else
markrad 58:f50b97b08851 388 {
markrad 58:f50b97b08851 389 if (message_instance->delivery_annotations != NULL)
markrad 58:f50b97b08851 390 {
markrad 58:f50b97b08851 391 annotations_destroy(message_instance->delivery_annotations);
markrad 58:f50b97b08851 392 }
markrad 58:f50b97b08851 393 message_instance->delivery_annotations = new_delivery_annotations;
markrad 58:f50b97b08851 394 result = 0;
markrad 58:f50b97b08851 395 }
markrad 58:f50b97b08851 396 }
markrad 58:f50b97b08851 397
markrad 58:f50b97b08851 398 return result;
markrad 58:f50b97b08851 399 }
markrad 58:f50b97b08851 400
markrad 58:f50b97b08851 401 int message_get_delivery_annotations(MESSAGE_HANDLE message, annotations* delivery_annotations)
markrad 58:f50b97b08851 402 {
markrad 58:f50b97b08851 403 int result;
markrad 58:f50b97b08851 404
markrad 58:f50b97b08851 405 if ((message == NULL) ||
markrad 58:f50b97b08851 406 (delivery_annotations == NULL))
markrad 58:f50b97b08851 407 {
markrad 58:f50b97b08851 408 result = __LINE__;
markrad 58:f50b97b08851 409 }
markrad 58:f50b97b08851 410 else
markrad 58:f50b97b08851 411 {
markrad 58:f50b97b08851 412 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 413
markrad 58:f50b97b08851 414 if (message_instance->delivery_annotations == NULL)
markrad 58:f50b97b08851 415 {
markrad 58:f50b97b08851 416 *delivery_annotations = NULL;
markrad 58:f50b97b08851 417 result = 0;
markrad 58:f50b97b08851 418 }
markrad 58:f50b97b08851 419 else
markrad 58:f50b97b08851 420 {
markrad 58:f50b97b08851 421 *delivery_annotations = annotations_clone(message_instance->delivery_annotations);
markrad 58:f50b97b08851 422 if (*delivery_annotations == NULL)
markrad 58:f50b97b08851 423 {
markrad 58:f50b97b08851 424 result = __LINE__;
markrad 58:f50b97b08851 425 }
markrad 58:f50b97b08851 426 else
markrad 58:f50b97b08851 427 {
markrad 58:f50b97b08851 428 result = 0;
markrad 58:f50b97b08851 429 }
markrad 58:f50b97b08851 430 }
markrad 58:f50b97b08851 431 }
markrad 58:f50b97b08851 432
markrad 58:f50b97b08851 433 return result;
markrad 58:f50b97b08851 434 }
markrad 58:f50b97b08851 435
markrad 58:f50b97b08851 436 int message_set_message_annotations(MESSAGE_HANDLE message, annotations message_annotations)
markrad 58:f50b97b08851 437 {
markrad 58:f50b97b08851 438 int result;
markrad 58:f50b97b08851 439
markrad 58:f50b97b08851 440 if ((message == NULL) ||
markrad 58:f50b97b08851 441 (message_annotations == NULL))
markrad 58:f50b97b08851 442 {
markrad 58:f50b97b08851 443 result = __LINE__;
markrad 58:f50b97b08851 444 }
markrad 58:f50b97b08851 445 else
markrad 58:f50b97b08851 446 {
markrad 58:f50b97b08851 447 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 448 annotations new_message_annotations;
markrad 58:f50b97b08851 449
markrad 58:f50b97b08851 450 new_message_annotations = annotations_clone(message_annotations);
markrad 58:f50b97b08851 451 if (new_message_annotations == NULL)
markrad 58:f50b97b08851 452 {
markrad 58:f50b97b08851 453 result = __LINE__;
markrad 58:f50b97b08851 454 }
markrad 58:f50b97b08851 455 else
markrad 58:f50b97b08851 456 {
markrad 58:f50b97b08851 457 if (message_instance->message_annotations != NULL)
markrad 58:f50b97b08851 458 {
markrad 58:f50b97b08851 459 annotations_destroy(message_instance->message_annotations);
markrad 58:f50b97b08851 460 }
markrad 58:f50b97b08851 461
markrad 58:f50b97b08851 462 message_instance->message_annotations = new_message_annotations;
markrad 58:f50b97b08851 463 result = 0;
markrad 58:f50b97b08851 464 }
markrad 58:f50b97b08851 465 }
markrad 58:f50b97b08851 466
markrad 58:f50b97b08851 467 return result;
markrad 58:f50b97b08851 468 }
markrad 58:f50b97b08851 469
markrad 58:f50b97b08851 470 int message_get_message_annotations(MESSAGE_HANDLE message, annotations* message_annotations)
markrad 58:f50b97b08851 471 {
markrad 58:f50b97b08851 472 int result;
markrad 58:f50b97b08851 473
markrad 58:f50b97b08851 474 if ((message == NULL) ||
markrad 58:f50b97b08851 475 (message_annotations == NULL))
markrad 58:f50b97b08851 476 {
markrad 58:f50b97b08851 477 result = __LINE__;
markrad 58:f50b97b08851 478 }
markrad 58:f50b97b08851 479 else
markrad 58:f50b97b08851 480 {
markrad 58:f50b97b08851 481 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 482
markrad 58:f50b97b08851 483 if (message_instance->message_annotations == NULL)
markrad 58:f50b97b08851 484 {
markrad 58:f50b97b08851 485 *message_annotations = NULL;
markrad 58:f50b97b08851 486 result = 0;
markrad 58:f50b97b08851 487 }
markrad 58:f50b97b08851 488 else
markrad 58:f50b97b08851 489 {
markrad 58:f50b97b08851 490 *message_annotations = annotations_clone(message_instance->message_annotations);
markrad 58:f50b97b08851 491 if (*message_annotations == NULL)
markrad 58:f50b97b08851 492 {
markrad 58:f50b97b08851 493 result = __LINE__;
markrad 58:f50b97b08851 494 }
markrad 58:f50b97b08851 495 else
markrad 58:f50b97b08851 496 {
markrad 58:f50b97b08851 497 result = 0;
markrad 58:f50b97b08851 498 }
markrad 58:f50b97b08851 499 }
markrad 58:f50b97b08851 500 }
markrad 58:f50b97b08851 501
markrad 58:f50b97b08851 502 return result;
markrad 58:f50b97b08851 503 }
markrad 58:f50b97b08851 504
markrad 58:f50b97b08851 505 int message_set_properties(MESSAGE_HANDLE message, PROPERTIES_HANDLE properties)
markrad 58:f50b97b08851 506 {
markrad 58:f50b97b08851 507 int result;
markrad 58:f50b97b08851 508
markrad 58:f50b97b08851 509 if ((message == NULL) ||
markrad 58:f50b97b08851 510 (properties == NULL))
markrad 58:f50b97b08851 511 {
markrad 58:f50b97b08851 512 result = __LINE__;
markrad 58:f50b97b08851 513 }
markrad 58:f50b97b08851 514 else
markrad 58:f50b97b08851 515 {
markrad 58:f50b97b08851 516 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 517 PROPERTIES_HANDLE new_properties;
markrad 58:f50b97b08851 518
markrad 58:f50b97b08851 519 new_properties = properties_clone(properties);
markrad 58:f50b97b08851 520 if (new_properties == NULL)
markrad 58:f50b97b08851 521 {
markrad 58:f50b97b08851 522 result = __LINE__;
markrad 58:f50b97b08851 523 }
markrad 58:f50b97b08851 524 else
markrad 58:f50b97b08851 525 {
markrad 58:f50b97b08851 526 if (message_instance->properties != NULL)
markrad 58:f50b97b08851 527 {
markrad 58:f50b97b08851 528 properties_destroy(message_instance->properties);
markrad 58:f50b97b08851 529 }
markrad 58:f50b97b08851 530
markrad 58:f50b97b08851 531 message_instance->properties = new_properties;
markrad 58:f50b97b08851 532 result = 0;
markrad 58:f50b97b08851 533 }
markrad 58:f50b97b08851 534 }
markrad 58:f50b97b08851 535
markrad 58:f50b97b08851 536 return result;
markrad 58:f50b97b08851 537 }
markrad 58:f50b97b08851 538
markrad 58:f50b97b08851 539 int message_get_properties(MESSAGE_HANDLE message, PROPERTIES_HANDLE* properties)
markrad 58:f50b97b08851 540 {
markrad 58:f50b97b08851 541 int result;
markrad 58:f50b97b08851 542
markrad 58:f50b97b08851 543 if ((message == NULL) ||
markrad 58:f50b97b08851 544 (properties == NULL))
markrad 58:f50b97b08851 545 {
markrad 58:f50b97b08851 546 result = __LINE__;
markrad 58:f50b97b08851 547 }
markrad 58:f50b97b08851 548 else
markrad 58:f50b97b08851 549 {
markrad 58:f50b97b08851 550 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 551
markrad 58:f50b97b08851 552 if (message_instance->properties == NULL)
markrad 58:f50b97b08851 553 {
markrad 58:f50b97b08851 554 *properties = NULL;
markrad 58:f50b97b08851 555 result = 0;
markrad 58:f50b97b08851 556 }
markrad 58:f50b97b08851 557 else
markrad 58:f50b97b08851 558 {
markrad 58:f50b97b08851 559 *properties = properties_clone(message_instance->properties);
markrad 58:f50b97b08851 560 if (*properties == NULL)
markrad 58:f50b97b08851 561 {
markrad 58:f50b97b08851 562 result = __LINE__;
markrad 58:f50b97b08851 563 }
markrad 58:f50b97b08851 564 else
markrad 58:f50b97b08851 565 {
markrad 58:f50b97b08851 566 result = 0;
markrad 58:f50b97b08851 567 }
markrad 58:f50b97b08851 568 }
markrad 58:f50b97b08851 569 }
markrad 58:f50b97b08851 570
markrad 58:f50b97b08851 571 return result;
markrad 58:f50b97b08851 572 }
markrad 58:f50b97b08851 573
markrad 58:f50b97b08851 574 int message_set_application_properties(MESSAGE_HANDLE message, AMQP_VALUE application_properties)
markrad 58:f50b97b08851 575 {
markrad 58:f50b97b08851 576 int result;
markrad 58:f50b97b08851 577
markrad 58:f50b97b08851 578 if ((message == NULL) ||
markrad 58:f50b97b08851 579 (application_properties == NULL))
markrad 58:f50b97b08851 580 {
markrad 58:f50b97b08851 581 result = __LINE__;
markrad 58:f50b97b08851 582 }
markrad 58:f50b97b08851 583 else
markrad 58:f50b97b08851 584 {
markrad 58:f50b97b08851 585 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 586 AMQP_VALUE new_application_properties;
markrad 58:f50b97b08851 587
markrad 58:f50b97b08851 588 new_application_properties = application_properties_clone(application_properties);
markrad 58:f50b97b08851 589 if (new_application_properties == NULL)
markrad 58:f50b97b08851 590 {
markrad 58:f50b97b08851 591 result = __LINE__;
markrad 58:f50b97b08851 592 }
markrad 58:f50b97b08851 593 else
markrad 58:f50b97b08851 594 {
markrad 58:f50b97b08851 595 if (message_instance->application_properties != NULL)
markrad 58:f50b97b08851 596 {
markrad 58:f50b97b08851 597 amqpvalue_destroy(message_instance->application_properties);
markrad 58:f50b97b08851 598 }
markrad 58:f50b97b08851 599
markrad 58:f50b97b08851 600 message_instance->application_properties = new_application_properties;
markrad 58:f50b97b08851 601 result = 0;
markrad 58:f50b97b08851 602 }
markrad 58:f50b97b08851 603 }
markrad 58:f50b97b08851 604
markrad 58:f50b97b08851 605 return result;
markrad 58:f50b97b08851 606 }
markrad 58:f50b97b08851 607
markrad 58:f50b97b08851 608 int message_get_application_properties(MESSAGE_HANDLE message, AMQP_VALUE* application_properties)
markrad 58:f50b97b08851 609 {
markrad 58:f50b97b08851 610 int result;
markrad 58:f50b97b08851 611
markrad 58:f50b97b08851 612 if ((message == NULL) ||
markrad 58:f50b97b08851 613 (application_properties == NULL))
markrad 58:f50b97b08851 614 {
markrad 58:f50b97b08851 615 result = __LINE__;
markrad 58:f50b97b08851 616 }
markrad 58:f50b97b08851 617 else
markrad 58:f50b97b08851 618 {
markrad 58:f50b97b08851 619 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 620
markrad 58:f50b97b08851 621 if (message_instance->application_properties == NULL)
markrad 58:f50b97b08851 622 {
markrad 58:f50b97b08851 623 *application_properties = NULL;
markrad 58:f50b97b08851 624 result = 0;
markrad 58:f50b97b08851 625 }
markrad 58:f50b97b08851 626 else
markrad 58:f50b97b08851 627 {
markrad 58:f50b97b08851 628 *application_properties = application_properties_clone(message_instance->application_properties);
markrad 58:f50b97b08851 629 if (*application_properties == NULL)
markrad 58:f50b97b08851 630 {
markrad 58:f50b97b08851 631 result = __LINE__;
markrad 58:f50b97b08851 632 }
markrad 58:f50b97b08851 633 else
markrad 58:f50b97b08851 634 {
markrad 58:f50b97b08851 635 result = 0;
markrad 58:f50b97b08851 636 }
markrad 58:f50b97b08851 637 }
markrad 58:f50b97b08851 638 }
markrad 58:f50b97b08851 639
markrad 58:f50b97b08851 640 return result;
markrad 58:f50b97b08851 641 }
markrad 58:f50b97b08851 642
markrad 58:f50b97b08851 643 int message_set_footer(MESSAGE_HANDLE message, annotations footer)
markrad 58:f50b97b08851 644 {
markrad 58:f50b97b08851 645 int result;
markrad 58:f50b97b08851 646
markrad 58:f50b97b08851 647 if ((message == NULL) ||
markrad 58:f50b97b08851 648 (footer == NULL))
markrad 58:f50b97b08851 649 {
markrad 58:f50b97b08851 650 result = __LINE__;
markrad 58:f50b97b08851 651 }
markrad 58:f50b97b08851 652 else
markrad 58:f50b97b08851 653 {
markrad 58:f50b97b08851 654 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 655 AMQP_VALUE new_footer;
markrad 58:f50b97b08851 656
markrad 58:f50b97b08851 657 new_footer = annotations_clone(footer);
markrad 58:f50b97b08851 658 if (new_footer == NULL)
markrad 58:f50b97b08851 659 {
markrad 58:f50b97b08851 660 result = __LINE__;
markrad 58:f50b97b08851 661 }
markrad 58:f50b97b08851 662 else
markrad 58:f50b97b08851 663 {
markrad 58:f50b97b08851 664 if (message_instance->footer != NULL)
markrad 58:f50b97b08851 665 {
markrad 58:f50b97b08851 666 annotations_destroy(message_instance->footer);
markrad 58:f50b97b08851 667 }
markrad 58:f50b97b08851 668
markrad 58:f50b97b08851 669 message_instance->footer = new_footer;
markrad 58:f50b97b08851 670 result = 0;
markrad 58:f50b97b08851 671 }
markrad 58:f50b97b08851 672 }
markrad 58:f50b97b08851 673
markrad 58:f50b97b08851 674 return result;
markrad 58:f50b97b08851 675 }
markrad 58:f50b97b08851 676
markrad 58:f50b97b08851 677 int message_get_footer(MESSAGE_HANDLE message, annotations* footer)
markrad 58:f50b97b08851 678 {
markrad 58:f50b97b08851 679 int result;
markrad 58:f50b97b08851 680
markrad 58:f50b97b08851 681 if ((message == NULL) ||
markrad 58:f50b97b08851 682 (footer == NULL))
markrad 58:f50b97b08851 683 {
markrad 58:f50b97b08851 684 result = __LINE__;
markrad 58:f50b97b08851 685 }
markrad 58:f50b97b08851 686 else
markrad 58:f50b97b08851 687 {
markrad 58:f50b97b08851 688 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 689
markrad 58:f50b97b08851 690 if (message_instance->footer == NULL)
markrad 58:f50b97b08851 691 {
markrad 58:f50b97b08851 692 *footer = NULL;
markrad 58:f50b97b08851 693 result = 0;
markrad 58:f50b97b08851 694 }
markrad 58:f50b97b08851 695 else
markrad 58:f50b97b08851 696 {
markrad 58:f50b97b08851 697 *footer = annotations_clone(message_instance->footer);
markrad 58:f50b97b08851 698 if (*footer == NULL)
markrad 58:f50b97b08851 699 {
markrad 58:f50b97b08851 700 result = __LINE__;
markrad 58:f50b97b08851 701 }
markrad 58:f50b97b08851 702 else
markrad 58:f50b97b08851 703 {
markrad 58:f50b97b08851 704 result = 0;
markrad 58:f50b97b08851 705 }
markrad 58:f50b97b08851 706 }
markrad 58:f50b97b08851 707 }
markrad 58:f50b97b08851 708
markrad 58:f50b97b08851 709 return result;
markrad 58:f50b97b08851 710 }
markrad 58:f50b97b08851 711
markrad 58:f50b97b08851 712 int message_add_body_amqp_data(MESSAGE_HANDLE message, BINARY_DATA binary_data)
markrad 58:f50b97b08851 713 {
markrad 58:f50b97b08851 714 int result;
markrad 58:f50b97b08851 715
markrad 58:f50b97b08851 716 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 717 if ((message == NULL) ||
markrad 58:f50b97b08851 718 (binary_data.bytes == NULL) &&
markrad 58:f50b97b08851 719 (binary_data.length != 0))
markrad 58:f50b97b08851 720 {
markrad 58:f50b97b08851 721 result = __LINE__;
markrad 58:f50b97b08851 722 }
markrad 58:f50b97b08851 723 else
markrad 58:f50b97b08851 724 {
markrad 58:f50b97b08851 725 BODY_AMQP_DATA* new_body_amqp_data_items = (BODY_AMQP_DATA*)amqpalloc_realloc(message_instance->body_amqp_data_items, sizeof(BODY_AMQP_DATA) * (message_instance->body_amqp_data_count + 1));
markrad 58:f50b97b08851 726 if (new_body_amqp_data_items == NULL)
markrad 58:f50b97b08851 727 {
markrad 58:f50b97b08851 728 result = __LINE__;
markrad 58:f50b97b08851 729 }
markrad 58:f50b97b08851 730 else
markrad 58:f50b97b08851 731 {
markrad 58:f50b97b08851 732 message_instance->body_amqp_data_items = new_body_amqp_data_items;
markrad 58:f50b97b08851 733
markrad 58:f50b97b08851 734 message_instance->body_amqp_data_items[message_instance->body_amqp_data_count].body_data_section_bytes = (unsigned char*)amqpalloc_malloc(binary_data.length);
markrad 58:f50b97b08851 735 if (message_instance->body_amqp_data_items[message_instance->body_amqp_data_count].body_data_section_bytes == NULL)
markrad 58:f50b97b08851 736 {
markrad 58:f50b97b08851 737 result = __LINE__;
markrad 58:f50b97b08851 738 }
markrad 58:f50b97b08851 739 else
markrad 58:f50b97b08851 740 {
markrad 58:f50b97b08851 741 message_instance->body_amqp_data_items[message_instance->body_amqp_data_count].body_data_section_length = binary_data.length;
markrad 58:f50b97b08851 742 (void)memcpy(message_instance->body_amqp_data_items[message_instance->body_amqp_data_count].body_data_section_bytes, binary_data.bytes, binary_data.length);
markrad 58:f50b97b08851 743
markrad 58:f50b97b08851 744 if (message_instance->body_amqp_value != NULL)
markrad 58:f50b97b08851 745 {
markrad 58:f50b97b08851 746 amqpvalue_destroy(message_instance->body_amqp_value);
markrad 58:f50b97b08851 747 message_instance->body_amqp_value = NULL;
markrad 58:f50b97b08851 748 }
markrad 58:f50b97b08851 749 free_all_body_sequence_items(message_instance);
markrad 58:f50b97b08851 750
markrad 58:f50b97b08851 751 message_instance->body_amqp_data_count++;
markrad 58:f50b97b08851 752 result = 0;
markrad 58:f50b97b08851 753 }
markrad 58:f50b97b08851 754 }
markrad 58:f50b97b08851 755 }
markrad 58:f50b97b08851 756
markrad 58:f50b97b08851 757 return result;
markrad 58:f50b97b08851 758 }
markrad 58:f50b97b08851 759
markrad 58:f50b97b08851 760 int message_get_body_amqp_data(MESSAGE_HANDLE message, size_t index, BINARY_DATA* binary_data)
markrad 58:f50b97b08851 761 {
markrad 58:f50b97b08851 762 int result;
markrad 58:f50b97b08851 763
markrad 58:f50b97b08851 764 if ((message == NULL) ||
markrad 58:f50b97b08851 765 (binary_data == NULL))
markrad 58:f50b97b08851 766 {
markrad 58:f50b97b08851 767 result = __LINE__;
markrad 58:f50b97b08851 768 }
markrad 58:f50b97b08851 769 else
markrad 58:f50b97b08851 770 {
markrad 58:f50b97b08851 771 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 772
markrad 58:f50b97b08851 773 if (index >= message_instance->body_amqp_data_count)
markrad 58:f50b97b08851 774 {
markrad 58:f50b97b08851 775 result = __LINE__;
markrad 58:f50b97b08851 776 }
markrad 58:f50b97b08851 777 else
markrad 58:f50b97b08851 778 {
markrad 58:f50b97b08851 779 binary_data->bytes = message_instance->body_amqp_data_items[index].body_data_section_bytes;
markrad 58:f50b97b08851 780 binary_data->length = message_instance->body_amqp_data_items[index].body_data_section_length;
markrad 58:f50b97b08851 781
markrad 58:f50b97b08851 782 result = 0;
markrad 58:f50b97b08851 783 }
markrad 58:f50b97b08851 784 }
markrad 58:f50b97b08851 785
markrad 58:f50b97b08851 786 return result;
markrad 58:f50b97b08851 787 }
markrad 58:f50b97b08851 788
markrad 58:f50b97b08851 789 int message_get_body_amqp_data_count(MESSAGE_HANDLE message, size_t* count)
markrad 58:f50b97b08851 790 {
markrad 58:f50b97b08851 791 int result;
markrad 58:f50b97b08851 792
markrad 58:f50b97b08851 793 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 794 if ((message == NULL) ||
markrad 58:f50b97b08851 795 (count == NULL))
markrad 58:f50b97b08851 796 {
markrad 58:f50b97b08851 797 result = __LINE__;
markrad 58:f50b97b08851 798 }
markrad 58:f50b97b08851 799 else
markrad 58:f50b97b08851 800 {
markrad 58:f50b97b08851 801 *count = message_instance->body_amqp_data_count;
markrad 58:f50b97b08851 802 result = 0;
markrad 58:f50b97b08851 803 }
markrad 58:f50b97b08851 804
markrad 58:f50b97b08851 805 return result;
markrad 58:f50b97b08851 806 }
markrad 58:f50b97b08851 807
markrad 58:f50b97b08851 808 int message_add_body_amqp_sequence(MESSAGE_HANDLE message, AMQP_VALUE sequence_list)
markrad 58:f50b97b08851 809 {
markrad 58:f50b97b08851 810 int result;
markrad 58:f50b97b08851 811 size_t item_count;
markrad 58:f50b97b08851 812
markrad 58:f50b97b08851 813 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 814 if ((message == NULL) ||
markrad 58:f50b97b08851 815 (sequence_list == NULL) ||
markrad 58:f50b97b08851 816 (amqpvalue_get_list_item_count(sequence_list, (uint32_t*)&item_count) != 0))
markrad 58:f50b97b08851 817 {
markrad 58:f50b97b08851 818 result = __LINE__;
markrad 58:f50b97b08851 819 }
markrad 58:f50b97b08851 820 else
markrad 58:f50b97b08851 821 {
markrad 58:f50b97b08851 822 AMQP_VALUE* new_body_amqp_sequence_items = (AMQP_VALUE*)amqpalloc_realloc(message_instance->body_amqp_sequence_items, sizeof(AMQP_VALUE) * (message_instance->body_amqp_sequence_count + 1));
markrad 58:f50b97b08851 823 if (new_body_amqp_sequence_items == NULL)
markrad 58:f50b97b08851 824 {
markrad 58:f50b97b08851 825 result = __LINE__;
markrad 58:f50b97b08851 826 }
markrad 58:f50b97b08851 827 else
markrad 58:f50b97b08851 828 {
markrad 58:f50b97b08851 829 message_instance->body_amqp_sequence_items = new_body_amqp_sequence_items;
markrad 58:f50b97b08851 830
markrad 58:f50b97b08851 831 message_instance->body_amqp_sequence_items[message_instance->body_amqp_sequence_count] = amqpvalue_clone(sequence_list);
markrad 58:f50b97b08851 832 if (message_instance->body_amqp_sequence_items[message_instance->body_amqp_sequence_count] == NULL)
markrad 58:f50b97b08851 833 {
markrad 58:f50b97b08851 834 result = __LINE__;
markrad 58:f50b97b08851 835 }
markrad 58:f50b97b08851 836 else
markrad 58:f50b97b08851 837 {
markrad 58:f50b97b08851 838 if (message_instance->body_amqp_value != NULL)
markrad 58:f50b97b08851 839 {
markrad 58:f50b97b08851 840 amqpvalue_destroy(message_instance->body_amqp_value);
markrad 58:f50b97b08851 841 message_instance->body_amqp_value = NULL;
markrad 58:f50b97b08851 842 }
markrad 58:f50b97b08851 843 free_all_body_data_items(message_instance);
markrad 58:f50b97b08851 844
markrad 58:f50b97b08851 845 message_instance->body_amqp_sequence_count++;
markrad 58:f50b97b08851 846 result = 0;
markrad 58:f50b97b08851 847 }
markrad 58:f50b97b08851 848 }
markrad 58:f50b97b08851 849 }
markrad 58:f50b97b08851 850
markrad 58:f50b97b08851 851 return result;
markrad 58:f50b97b08851 852 }
markrad 58:f50b97b08851 853
markrad 58:f50b97b08851 854 int message_get_body_amqp_sequence(MESSAGE_HANDLE message, size_t index, AMQP_VALUE* sequence_list)
markrad 58:f50b97b08851 855 {
markrad 58:f50b97b08851 856 int result;
markrad 58:f50b97b08851 857
markrad 58:f50b97b08851 858 if ((message == NULL) ||
markrad 58:f50b97b08851 859 (sequence_list == NULL))
markrad 58:f50b97b08851 860 {
markrad 58:f50b97b08851 861 result = __LINE__;
markrad 58:f50b97b08851 862 }
markrad 58:f50b97b08851 863 else
markrad 58:f50b97b08851 864 {
markrad 58:f50b97b08851 865 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 866
markrad 58:f50b97b08851 867 if (index >= message_instance->body_amqp_sequence_count)
markrad 58:f50b97b08851 868 {
markrad 58:f50b97b08851 869 result = __LINE__;
markrad 58:f50b97b08851 870 }
markrad 58:f50b97b08851 871 else
markrad 58:f50b97b08851 872 {
markrad 58:f50b97b08851 873 *sequence_list = amqpvalue_clone(message_instance->body_amqp_sequence_items[index]);
markrad 58:f50b97b08851 874 if (*sequence_list == NULL)
markrad 58:f50b97b08851 875 {
markrad 58:f50b97b08851 876 result = __LINE__;
markrad 58:f50b97b08851 877 }
markrad 58:f50b97b08851 878 else
markrad 58:f50b97b08851 879 {
markrad 58:f50b97b08851 880 result = 0;
markrad 58:f50b97b08851 881 }
markrad 58:f50b97b08851 882 }
markrad 58:f50b97b08851 883 }
markrad 58:f50b97b08851 884
markrad 58:f50b97b08851 885 return result;
markrad 58:f50b97b08851 886 }
markrad 58:f50b97b08851 887
markrad 58:f50b97b08851 888 int message_get_body_amqp_sequence_count(MESSAGE_HANDLE message, size_t* count)
markrad 58:f50b97b08851 889 {
markrad 58:f50b97b08851 890 int result;
markrad 58:f50b97b08851 891
markrad 58:f50b97b08851 892 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 893 if ((message == NULL) ||
markrad 58:f50b97b08851 894 (count == NULL))
markrad 58:f50b97b08851 895 {
markrad 58:f50b97b08851 896 result = __LINE__;
markrad 58:f50b97b08851 897 }
markrad 58:f50b97b08851 898 else
markrad 58:f50b97b08851 899 {
markrad 58:f50b97b08851 900 *count = message_instance->body_amqp_sequence_count;
markrad 58:f50b97b08851 901 result = 0;
markrad 58:f50b97b08851 902 }
markrad 58:f50b97b08851 903
markrad 58:f50b97b08851 904 return result;
markrad 58:f50b97b08851 905 }
markrad 58:f50b97b08851 906
markrad 58:f50b97b08851 907 int message_set_body_amqp_value(MESSAGE_HANDLE message, AMQP_VALUE body_amqp_value)
markrad 58:f50b97b08851 908 {
markrad 58:f50b97b08851 909 int result;
markrad 58:f50b97b08851 910
markrad 58:f50b97b08851 911 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 912 if ((message == NULL) ||
markrad 58:f50b97b08851 913 (body_amqp_value == NULL))
markrad 58:f50b97b08851 914 {
markrad 58:f50b97b08851 915 result = __LINE__;
markrad 58:f50b97b08851 916 }
markrad 58:f50b97b08851 917 else
markrad 58:f50b97b08851 918 {
markrad 58:f50b97b08851 919 message_instance->body_amqp_value = amqpvalue_clone(body_amqp_value);
markrad 58:f50b97b08851 920
markrad 58:f50b97b08851 921 free_all_body_data_items(message_instance);
markrad 58:f50b97b08851 922 free_all_body_sequence_items(message_instance);
markrad 58:f50b97b08851 923 result = 0;
markrad 58:f50b97b08851 924 }
markrad 58:f50b97b08851 925
markrad 58:f50b97b08851 926 return result;
markrad 58:f50b97b08851 927 }
markrad 58:f50b97b08851 928
markrad 58:f50b97b08851 929 int message_get_inplace_body_amqp_value(MESSAGE_HANDLE message, AMQP_VALUE* body_amqp_value)
markrad 58:f50b97b08851 930 {
markrad 58:f50b97b08851 931 int result;
markrad 58:f50b97b08851 932
markrad 58:f50b97b08851 933 if ((message == NULL) ||
markrad 58:f50b97b08851 934 (body_amqp_value == NULL))
markrad 58:f50b97b08851 935 {
markrad 58:f50b97b08851 936 result = __LINE__;
markrad 58:f50b97b08851 937 }
markrad 58:f50b97b08851 938 else
markrad 58:f50b97b08851 939 {
markrad 58:f50b97b08851 940 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 941
markrad 58:f50b97b08851 942 *body_amqp_value = message_instance->body_amqp_value;
markrad 58:f50b97b08851 943
markrad 58:f50b97b08851 944 result = 0;
markrad 58:f50b97b08851 945 }
markrad 58:f50b97b08851 946
markrad 58:f50b97b08851 947 return result;
markrad 58:f50b97b08851 948 }
markrad 58:f50b97b08851 949
markrad 58:f50b97b08851 950 int message_get_body_type(MESSAGE_HANDLE message, MESSAGE_BODY_TYPE* body_type)
markrad 58:f50b97b08851 951 {
markrad 58:f50b97b08851 952 int result;
markrad 58:f50b97b08851 953
markrad 58:f50b97b08851 954 if ((message == NULL) ||
markrad 58:f50b97b08851 955 (body_type == NULL))
markrad 58:f50b97b08851 956 {
markrad 58:f50b97b08851 957 result = __LINE__;
markrad 58:f50b97b08851 958 }
markrad 58:f50b97b08851 959 else
markrad 58:f50b97b08851 960 {
markrad 58:f50b97b08851 961 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 962
markrad 58:f50b97b08851 963 if (message_instance->body_amqp_value != NULL)
markrad 58:f50b97b08851 964 {
markrad 58:f50b97b08851 965 *body_type = MESSAGE_BODY_TYPE_VALUE;
markrad 58:f50b97b08851 966 }
markrad 58:f50b97b08851 967 else if (message_instance->body_amqp_data_count > 0)
markrad 58:f50b97b08851 968 {
markrad 58:f50b97b08851 969 *body_type = MESSAGE_BODY_TYPE_DATA;
markrad 58:f50b97b08851 970 }
markrad 58:f50b97b08851 971 else if (message_instance->body_amqp_sequence_count > 0)
markrad 58:f50b97b08851 972 {
markrad 58:f50b97b08851 973 *body_type = MESSAGE_BODY_TYPE_SEQUENCE;
markrad 58:f50b97b08851 974 }
markrad 58:f50b97b08851 975 else
markrad 58:f50b97b08851 976 {
markrad 58:f50b97b08851 977 *body_type = MESSAGE_BODY_TYPE_NONE;
markrad 58:f50b97b08851 978 }
markrad 58:f50b97b08851 979
markrad 58:f50b97b08851 980 result = 0;
markrad 58:f50b97b08851 981 }
markrad 58:f50b97b08851 982
markrad 58:f50b97b08851 983 return result;
markrad 58:f50b97b08851 984 }
markrad 58:f50b97b08851 985
markrad 58:f50b97b08851 986 int message_set_message_format(MESSAGE_HANDLE message, uint32_t message_format)
markrad 58:f50b97b08851 987 {
markrad 58:f50b97b08851 988 int result;
markrad 58:f50b97b08851 989
markrad 58:f50b97b08851 990 if (message == NULL)
markrad 58:f50b97b08851 991 {
markrad 58:f50b97b08851 992 result = __LINE__;
markrad 58:f50b97b08851 993 }
markrad 58:f50b97b08851 994 else
markrad 58:f50b97b08851 995 {
markrad 58:f50b97b08851 996 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 997 message_instance->message_format = message_format;
markrad 58:f50b97b08851 998 result = 0;
markrad 58:f50b97b08851 999 }
markrad 58:f50b97b08851 1000
markrad 58:f50b97b08851 1001 return result;
markrad 58:f50b97b08851 1002 }
markrad 58:f50b97b08851 1003
markrad 58:f50b97b08851 1004 int message_get_message_format(MESSAGE_HANDLE message, uint32_t *message_format)
markrad 58:f50b97b08851 1005 {
markrad 58:f50b97b08851 1006 int result;
markrad 58:f50b97b08851 1007
markrad 58:f50b97b08851 1008 if ((message == NULL) ||
markrad 58:f50b97b08851 1009 (message_format == NULL))
markrad 58:f50b97b08851 1010 {
markrad 58:f50b97b08851 1011 result = __LINE__;
markrad 58:f50b97b08851 1012 }
markrad 58:f50b97b08851 1013 else
markrad 58:f50b97b08851 1014 {
markrad 58:f50b97b08851 1015 MESSAGE_INSTANCE* message_instance = (MESSAGE_INSTANCE*)message;
markrad 58:f50b97b08851 1016 *message_format = message_instance->message_format;
markrad 58:f50b97b08851 1017 result = 0;
markrad 58:f50b97b08851 1018 }
markrad 58:f50b97b08851 1019
markrad 58:f50b97b08851 1020 return result;
markrad 58:f50b97b08851 1021 }