A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
AzureIoTClient
Date:
Fri Jun 30 10:41:22 2017 -0700
Revision:
28:add19eb7defa
Parent:
17:923575db8b2d
Child:
34:6be9c2058664
1.1.18

Who changed what in which revision?

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