A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
Azure.IoT Build
Date:
Fri Apr 08 12:01:10 2016 -0700
Revision:
0:6ae2f7bca550
Child:
17:923575db8b2d
1.0.4

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 #ifdef _CRTDBG_MAP_ALLOC
Azure.IoT Build 0:6ae2f7bca550 6 #include <crtdbg.h>
Azure.IoT Build 0:6ae2f7bca550 7 #endif
Azure.IoT Build 0:6ae2f7bca550 8 #include <stdbool.h>
Azure.IoT Build 0:6ae2f7bca550 9 #include "azure_uamqp_c/amqpvalue.h"
Azure.IoT Build 0:6ae2f7bca550 10 #include "azure_uamqp_c/amqp_definitions.h"
Azure.IoT Build 0:6ae2f7bca550 11
Azure.IoT Build 0:6ae2f7bca550 12 AMQP_VALUE messaging_create_source(const char* address)
Azure.IoT Build 0:6ae2f7bca550 13 {
Azure.IoT Build 0:6ae2f7bca550 14 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 15 SOURCE_HANDLE source = source_create();
Azure.IoT Build 0:6ae2f7bca550 16 if (source == NULL)
Azure.IoT Build 0:6ae2f7bca550 17 {
Azure.IoT Build 0:6ae2f7bca550 18 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 19 }
Azure.IoT Build 0:6ae2f7bca550 20 else
Azure.IoT Build 0:6ae2f7bca550 21 {
Azure.IoT Build 0:6ae2f7bca550 22 AMQP_VALUE address_value = amqpvalue_create_string(address);
Azure.IoT Build 0:6ae2f7bca550 23 if (address_value == NULL)
Azure.IoT Build 0:6ae2f7bca550 24 {
Azure.IoT Build 0:6ae2f7bca550 25 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 26 }
Azure.IoT Build 0:6ae2f7bca550 27 else
Azure.IoT Build 0:6ae2f7bca550 28 {
Azure.IoT Build 0:6ae2f7bca550 29 if (source_set_address(source, address_value) != 0)
Azure.IoT Build 0:6ae2f7bca550 30 {
Azure.IoT Build 0:6ae2f7bca550 31 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 32 }
Azure.IoT Build 0:6ae2f7bca550 33 else
Azure.IoT Build 0:6ae2f7bca550 34 {
Azure.IoT Build 0:6ae2f7bca550 35 result = amqpvalue_create_source(source);
Azure.IoT Build 0:6ae2f7bca550 36 }
Azure.IoT Build 0:6ae2f7bca550 37
Azure.IoT Build 0:6ae2f7bca550 38 amqpvalue_destroy(address_value);
Azure.IoT Build 0:6ae2f7bca550 39 }
Azure.IoT Build 0:6ae2f7bca550 40
Azure.IoT Build 0:6ae2f7bca550 41 source_destroy(source);
Azure.IoT Build 0:6ae2f7bca550 42 }
Azure.IoT Build 0:6ae2f7bca550 43
Azure.IoT Build 0:6ae2f7bca550 44 return result;
Azure.IoT Build 0:6ae2f7bca550 45 }
Azure.IoT Build 0:6ae2f7bca550 46
Azure.IoT Build 0:6ae2f7bca550 47 AMQP_VALUE messaging_create_target(const char* address)
Azure.IoT Build 0:6ae2f7bca550 48 {
Azure.IoT Build 0:6ae2f7bca550 49 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 50 TARGET_HANDLE target = target_create();
Azure.IoT Build 0:6ae2f7bca550 51 if (target == NULL)
Azure.IoT Build 0:6ae2f7bca550 52 {
Azure.IoT Build 0:6ae2f7bca550 53 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 54 }
Azure.IoT Build 0:6ae2f7bca550 55 else
Azure.IoT Build 0:6ae2f7bca550 56 {
Azure.IoT Build 0:6ae2f7bca550 57 AMQP_VALUE address_value = amqpvalue_create_string(address);
Azure.IoT Build 0:6ae2f7bca550 58 if (address_value == NULL)
Azure.IoT Build 0:6ae2f7bca550 59 {
Azure.IoT Build 0:6ae2f7bca550 60 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 61 }
Azure.IoT Build 0:6ae2f7bca550 62 else
Azure.IoT Build 0:6ae2f7bca550 63 {
Azure.IoT Build 0:6ae2f7bca550 64 if (target_set_address(target, address_value) != 0)
Azure.IoT Build 0:6ae2f7bca550 65 {
Azure.IoT Build 0:6ae2f7bca550 66 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 67 }
Azure.IoT Build 0:6ae2f7bca550 68 else
Azure.IoT Build 0:6ae2f7bca550 69 {
Azure.IoT Build 0:6ae2f7bca550 70 result = amqpvalue_create_target(target);
Azure.IoT Build 0:6ae2f7bca550 71 }
Azure.IoT Build 0:6ae2f7bca550 72
Azure.IoT Build 0:6ae2f7bca550 73 amqpvalue_destroy(address_value);
Azure.IoT Build 0:6ae2f7bca550 74 }
Azure.IoT Build 0:6ae2f7bca550 75
Azure.IoT Build 0:6ae2f7bca550 76 target_destroy(target);
Azure.IoT Build 0:6ae2f7bca550 77 }
Azure.IoT Build 0:6ae2f7bca550 78
Azure.IoT Build 0:6ae2f7bca550 79 return result;
Azure.IoT Build 0:6ae2f7bca550 80 }
Azure.IoT Build 0:6ae2f7bca550 81
Azure.IoT Build 0:6ae2f7bca550 82 AMQP_VALUE messaging_delivery_received(uint32_t section_number, uint64_t section_offset)
Azure.IoT Build 0:6ae2f7bca550 83 {
Azure.IoT Build 0:6ae2f7bca550 84 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 85 RECEIVED_HANDLE received = received_create(section_number, section_offset);
Azure.IoT Build 0:6ae2f7bca550 86 if (received == NULL)
Azure.IoT Build 0:6ae2f7bca550 87 {
Azure.IoT Build 0:6ae2f7bca550 88 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 89 }
Azure.IoT Build 0:6ae2f7bca550 90 else
Azure.IoT Build 0:6ae2f7bca550 91 {
Azure.IoT Build 0:6ae2f7bca550 92 result = amqpvalue_create_received(received);
Azure.IoT Build 0:6ae2f7bca550 93 received_destroy(received);
Azure.IoT Build 0:6ae2f7bca550 94 }
Azure.IoT Build 0:6ae2f7bca550 95
Azure.IoT Build 0:6ae2f7bca550 96 return result;
Azure.IoT Build 0:6ae2f7bca550 97 }
Azure.IoT Build 0:6ae2f7bca550 98
Azure.IoT Build 0:6ae2f7bca550 99 AMQP_VALUE messaging_delivery_accepted(void)
Azure.IoT Build 0:6ae2f7bca550 100 {
Azure.IoT Build 0:6ae2f7bca550 101 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 102 ACCEPTED_HANDLE accepted = accepted_create();
Azure.IoT Build 0:6ae2f7bca550 103 if (accepted == NULL)
Azure.IoT Build 0:6ae2f7bca550 104 {
Azure.IoT Build 0:6ae2f7bca550 105 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 106 }
Azure.IoT Build 0:6ae2f7bca550 107 else
Azure.IoT Build 0:6ae2f7bca550 108 {
Azure.IoT Build 0:6ae2f7bca550 109 result = amqpvalue_create_accepted(accepted);
Azure.IoT Build 0:6ae2f7bca550 110 accepted_destroy(accepted);
Azure.IoT Build 0:6ae2f7bca550 111 }
Azure.IoT Build 0:6ae2f7bca550 112
Azure.IoT Build 0:6ae2f7bca550 113 return result;
Azure.IoT Build 0:6ae2f7bca550 114 }
Azure.IoT Build 0:6ae2f7bca550 115
Azure.IoT Build 0:6ae2f7bca550 116 AMQP_VALUE messaging_delivery_rejected(const char* error_condition, const char* error_description)
Azure.IoT Build 0:6ae2f7bca550 117 {
Azure.IoT Build 0:6ae2f7bca550 118 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 119 REJECTED_HANDLE rejected = rejected_create();
Azure.IoT Build 0:6ae2f7bca550 120 if (rejected == NULL)
Azure.IoT Build 0:6ae2f7bca550 121 {
Azure.IoT Build 0:6ae2f7bca550 122 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 123 }
Azure.IoT Build 0:6ae2f7bca550 124 else
Azure.IoT Build 0:6ae2f7bca550 125 {
Azure.IoT Build 0:6ae2f7bca550 126 ERROR_HANDLE error_handle = NULL;
Azure.IoT Build 0:6ae2f7bca550 127 bool error_constructing = false;
Azure.IoT Build 0:6ae2f7bca550 128
Azure.IoT Build 0:6ae2f7bca550 129 if (error_condition != NULL)
Azure.IoT Build 0:6ae2f7bca550 130 {
Azure.IoT Build 0:6ae2f7bca550 131 error_handle = error_create(error_condition);
Azure.IoT Build 0:6ae2f7bca550 132 if (error_handle == NULL)
Azure.IoT Build 0:6ae2f7bca550 133 {
Azure.IoT Build 0:6ae2f7bca550 134 error_constructing = true;
Azure.IoT Build 0:6ae2f7bca550 135 }
Azure.IoT Build 0:6ae2f7bca550 136 else
Azure.IoT Build 0:6ae2f7bca550 137 {
Azure.IoT Build 0:6ae2f7bca550 138 if ((error_description != NULL) &&
Azure.IoT Build 0:6ae2f7bca550 139 (error_set_description(error_handle, error_description) != 0))
Azure.IoT Build 0:6ae2f7bca550 140 {
Azure.IoT Build 0:6ae2f7bca550 141 error_constructing = true;
Azure.IoT Build 0:6ae2f7bca550 142 }
Azure.IoT Build 0:6ae2f7bca550 143 else
Azure.IoT Build 0:6ae2f7bca550 144 {
Azure.IoT Build 0:6ae2f7bca550 145 if (rejected_set_error(rejected, error_handle) != 0)
Azure.IoT Build 0:6ae2f7bca550 146 {
Azure.IoT Build 0:6ae2f7bca550 147 error_constructing = true;
Azure.IoT Build 0:6ae2f7bca550 148 }
Azure.IoT Build 0:6ae2f7bca550 149 }
Azure.IoT Build 0:6ae2f7bca550 150
Azure.IoT Build 0:6ae2f7bca550 151 error_destroy(error_handle);
Azure.IoT Build 0:6ae2f7bca550 152 }
Azure.IoT Build 0:6ae2f7bca550 153 }
Azure.IoT Build 0:6ae2f7bca550 154
Azure.IoT Build 0:6ae2f7bca550 155 if (error_constructing)
Azure.IoT Build 0:6ae2f7bca550 156 {
Azure.IoT Build 0:6ae2f7bca550 157 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 158 }
Azure.IoT Build 0:6ae2f7bca550 159 else
Azure.IoT Build 0:6ae2f7bca550 160 {
Azure.IoT Build 0:6ae2f7bca550 161 result = amqpvalue_create_rejected(rejected);
Azure.IoT Build 0:6ae2f7bca550 162 }
Azure.IoT Build 0:6ae2f7bca550 163
Azure.IoT Build 0:6ae2f7bca550 164 rejected_destroy(rejected);
Azure.IoT Build 0:6ae2f7bca550 165 }
Azure.IoT Build 0:6ae2f7bca550 166
Azure.IoT Build 0:6ae2f7bca550 167 return result;
Azure.IoT Build 0:6ae2f7bca550 168 }
Azure.IoT Build 0:6ae2f7bca550 169
Azure.IoT Build 0:6ae2f7bca550 170 AMQP_VALUE messaging_delivery_released(void)
Azure.IoT Build 0:6ae2f7bca550 171 {
Azure.IoT Build 0:6ae2f7bca550 172 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 173 RELEASED_HANDLE released = released_create();
Azure.IoT Build 0:6ae2f7bca550 174 if (released == NULL)
Azure.IoT Build 0:6ae2f7bca550 175 {
Azure.IoT Build 0:6ae2f7bca550 176 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 177 }
Azure.IoT Build 0:6ae2f7bca550 178 else
Azure.IoT Build 0:6ae2f7bca550 179 {
Azure.IoT Build 0:6ae2f7bca550 180 result = amqpvalue_create_released(released);
Azure.IoT Build 0:6ae2f7bca550 181 released_destroy(released);
Azure.IoT Build 0:6ae2f7bca550 182 }
Azure.IoT Build 0:6ae2f7bca550 183
Azure.IoT Build 0:6ae2f7bca550 184 return result;
Azure.IoT Build 0:6ae2f7bca550 185 }
Azure.IoT Build 0:6ae2f7bca550 186
Azure.IoT Build 0:6ae2f7bca550 187 AMQP_VALUE messaging_delivery_modified(bool delivery_failed, bool undeliverable_here, fields message_annotations)
Azure.IoT Build 0:6ae2f7bca550 188 {
Azure.IoT Build 0:6ae2f7bca550 189 AMQP_VALUE result;
Azure.IoT Build 0:6ae2f7bca550 190 MODIFIED_HANDLE modified = modified_create();
Azure.IoT Build 0:6ae2f7bca550 191 if (modified == NULL)
Azure.IoT Build 0:6ae2f7bca550 192 {
Azure.IoT Build 0:6ae2f7bca550 193 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 194 }
Azure.IoT Build 0:6ae2f7bca550 195 else
Azure.IoT Build 0:6ae2f7bca550 196 {
Azure.IoT Build 0:6ae2f7bca550 197 if ((modified_set_delivery_failed(modified, delivery_failed) != 0) ||
Azure.IoT Build 0:6ae2f7bca550 198 (modified_set_undeliverable_here(modified, undeliverable_here) != 0) ||
Azure.IoT Build 0:6ae2f7bca550 199 ((message_annotations != NULL) && (modified_set_message_annotations(modified, message_annotations) != 0)))
Azure.IoT Build 0:6ae2f7bca550 200 {
Azure.IoT Build 0:6ae2f7bca550 201 result = NULL;
Azure.IoT Build 0:6ae2f7bca550 202 }
Azure.IoT Build 0:6ae2f7bca550 203 else
Azure.IoT Build 0:6ae2f7bca550 204 {
Azure.IoT Build 0:6ae2f7bca550 205 result = amqpvalue_create_modified(modified);
Azure.IoT Build 0:6ae2f7bca550 206 }
Azure.IoT Build 0:6ae2f7bca550 207
Azure.IoT Build 0:6ae2f7bca550 208 modified_destroy(modified);
Azure.IoT Build 0:6ae2f7bca550 209 }
Azure.IoT Build 0:6ae2f7bca550 210
Azure.IoT Build 0:6ae2f7bca550 211 return result;
Azure.IoT Build 0:6ae2f7bca550 212 }