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 <stdbool.h>
XinZhangMS 0:f7f1f0d76dd6 7 #include "azure_c_shared_utility/xlogging.h"
XinZhangMS 0:f7f1f0d76dd6 8 #include "azure_uamqp_c/amqpvalue.h"
XinZhangMS 0:f7f1f0d76dd6 9 #include "azure_uamqp_c/amqp_definitions.h"
XinZhangMS 0:f7f1f0d76dd6 10
XinZhangMS 0:f7f1f0d76dd6 11 AMQP_VALUE messaging_create_source(const char* address)
XinZhangMS 0:f7f1f0d76dd6 12 {
XinZhangMS 0:f7f1f0d76dd6 13 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 14 SOURCE_HANDLE source = source_create();
XinZhangMS 0:f7f1f0d76dd6 15
XinZhangMS 0:f7f1f0d76dd6 16 if (source == NULL)
XinZhangMS 0:f7f1f0d76dd6 17 {
XinZhangMS 0:f7f1f0d76dd6 18 LogError("NULL source");
XinZhangMS 0:f7f1f0d76dd6 19 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 20 }
XinZhangMS 0:f7f1f0d76dd6 21 else
XinZhangMS 0:f7f1f0d76dd6 22 {
XinZhangMS 0:f7f1f0d76dd6 23 AMQP_VALUE address_value = amqpvalue_create_string(address);
XinZhangMS 0:f7f1f0d76dd6 24 if (address_value == NULL)
XinZhangMS 0:f7f1f0d76dd6 25 {
XinZhangMS 0:f7f1f0d76dd6 26 LogError("Cannot create address AMQP string");
XinZhangMS 0:f7f1f0d76dd6 27 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 28 }
XinZhangMS 0:f7f1f0d76dd6 29 else
XinZhangMS 0:f7f1f0d76dd6 30 {
XinZhangMS 0:f7f1f0d76dd6 31 if (source_set_address(source, address_value) != 0)
XinZhangMS 0:f7f1f0d76dd6 32 {
XinZhangMS 0:f7f1f0d76dd6 33 LogError("Cannot set address on source");
XinZhangMS 0:f7f1f0d76dd6 34 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 35 }
XinZhangMS 0:f7f1f0d76dd6 36 else
XinZhangMS 0:f7f1f0d76dd6 37 {
XinZhangMS 0:f7f1f0d76dd6 38 result = amqpvalue_create_source(source);
XinZhangMS 0:f7f1f0d76dd6 39 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 40 {
XinZhangMS 0:f7f1f0d76dd6 41 LogError("Cannot create source");
XinZhangMS 0:f7f1f0d76dd6 42 }
XinZhangMS 0:f7f1f0d76dd6 43 else
XinZhangMS 0:f7f1f0d76dd6 44 {
XinZhangMS 0:f7f1f0d76dd6 45 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 46 }
XinZhangMS 0:f7f1f0d76dd6 47 }
XinZhangMS 0:f7f1f0d76dd6 48
XinZhangMS 0:f7f1f0d76dd6 49 amqpvalue_destroy(address_value);
XinZhangMS 0:f7f1f0d76dd6 50 }
XinZhangMS 0:f7f1f0d76dd6 51
XinZhangMS 0:f7f1f0d76dd6 52 source_destroy(source);
XinZhangMS 0:f7f1f0d76dd6 53 }
XinZhangMS 0:f7f1f0d76dd6 54
XinZhangMS 0:f7f1f0d76dd6 55 return result;
XinZhangMS 0:f7f1f0d76dd6 56 }
XinZhangMS 0:f7f1f0d76dd6 57
XinZhangMS 0:f7f1f0d76dd6 58 AMQP_VALUE messaging_create_target(const char* address)
XinZhangMS 0:f7f1f0d76dd6 59 {
XinZhangMS 0:f7f1f0d76dd6 60 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 61 TARGET_HANDLE target = target_create();
XinZhangMS 0:f7f1f0d76dd6 62
XinZhangMS 0:f7f1f0d76dd6 63 if (target == NULL)
XinZhangMS 0:f7f1f0d76dd6 64 {
XinZhangMS 0:f7f1f0d76dd6 65 LogError("NULL target");
XinZhangMS 0:f7f1f0d76dd6 66 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 67 }
XinZhangMS 0:f7f1f0d76dd6 68 else
XinZhangMS 0:f7f1f0d76dd6 69 {
XinZhangMS 0:f7f1f0d76dd6 70 AMQP_VALUE address_value = amqpvalue_create_string(address);
XinZhangMS 0:f7f1f0d76dd6 71 if (address_value == NULL)
XinZhangMS 0:f7f1f0d76dd6 72 {
XinZhangMS 0:f7f1f0d76dd6 73 LogError("Cannot create address AMQP string");
XinZhangMS 0:f7f1f0d76dd6 74 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 75 }
XinZhangMS 0:f7f1f0d76dd6 76 else
XinZhangMS 0:f7f1f0d76dd6 77 {
XinZhangMS 0:f7f1f0d76dd6 78 if (target_set_address(target, address_value) != 0)
XinZhangMS 0:f7f1f0d76dd6 79 {
XinZhangMS 0:f7f1f0d76dd6 80 LogError("Cannot set address on target");
XinZhangMS 0:f7f1f0d76dd6 81 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 82 }
XinZhangMS 0:f7f1f0d76dd6 83 else
XinZhangMS 0:f7f1f0d76dd6 84 {
XinZhangMS 0:f7f1f0d76dd6 85 result = amqpvalue_create_target(target);
XinZhangMS 0:f7f1f0d76dd6 86 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 87 {
XinZhangMS 0:f7f1f0d76dd6 88 LogError("Cannot create target");
XinZhangMS 0:f7f1f0d76dd6 89 }
XinZhangMS 0:f7f1f0d76dd6 90 else
XinZhangMS 0:f7f1f0d76dd6 91 {
XinZhangMS 0:f7f1f0d76dd6 92 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 93 }
XinZhangMS 0:f7f1f0d76dd6 94 }
XinZhangMS 0:f7f1f0d76dd6 95
XinZhangMS 0:f7f1f0d76dd6 96 amqpvalue_destroy(address_value);
XinZhangMS 0:f7f1f0d76dd6 97 }
XinZhangMS 0:f7f1f0d76dd6 98
XinZhangMS 0:f7f1f0d76dd6 99 target_destroy(target);
XinZhangMS 0:f7f1f0d76dd6 100 }
XinZhangMS 0:f7f1f0d76dd6 101
XinZhangMS 0:f7f1f0d76dd6 102 return result;
XinZhangMS 0:f7f1f0d76dd6 103 }
XinZhangMS 0:f7f1f0d76dd6 104
XinZhangMS 0:f7f1f0d76dd6 105 AMQP_VALUE messaging_delivery_received(uint32_t section_number, uint64_t section_offset)
XinZhangMS 0:f7f1f0d76dd6 106 {
XinZhangMS 0:f7f1f0d76dd6 107 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 108 RECEIVED_HANDLE received = received_create(section_number, section_offset);
XinZhangMS 0:f7f1f0d76dd6 109 if (received == NULL)
XinZhangMS 0:f7f1f0d76dd6 110 {
XinZhangMS 0:f7f1f0d76dd6 111 LogError("Cannot create RECEIVED delivery state handle");
XinZhangMS 0:f7f1f0d76dd6 112 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 113 }
XinZhangMS 0:f7f1f0d76dd6 114 else
XinZhangMS 0:f7f1f0d76dd6 115 {
XinZhangMS 0:f7f1f0d76dd6 116 result = amqpvalue_create_received(received);
XinZhangMS 0:f7f1f0d76dd6 117 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 118 {
XinZhangMS 0:f7f1f0d76dd6 119 LogError("Cannot create RECEIVED delivery state AMQP value");
XinZhangMS 0:f7f1f0d76dd6 120 }
XinZhangMS 0:f7f1f0d76dd6 121 else
XinZhangMS 0:f7f1f0d76dd6 122 {
XinZhangMS 0:f7f1f0d76dd6 123 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 124 }
XinZhangMS 0:f7f1f0d76dd6 125
XinZhangMS 0:f7f1f0d76dd6 126 received_destroy(received);
XinZhangMS 0:f7f1f0d76dd6 127 }
XinZhangMS 0:f7f1f0d76dd6 128
XinZhangMS 0:f7f1f0d76dd6 129 return result;
XinZhangMS 0:f7f1f0d76dd6 130 }
XinZhangMS 0:f7f1f0d76dd6 131
XinZhangMS 0:f7f1f0d76dd6 132 AMQP_VALUE messaging_delivery_accepted(void)
XinZhangMS 0:f7f1f0d76dd6 133 {
XinZhangMS 0:f7f1f0d76dd6 134 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 135 ACCEPTED_HANDLE accepted = accepted_create();
XinZhangMS 0:f7f1f0d76dd6 136 if (accepted == NULL)
XinZhangMS 0:f7f1f0d76dd6 137 {
XinZhangMS 0:f7f1f0d76dd6 138 LogError("Cannot create ACCEPTED delivery state handle");
XinZhangMS 0:f7f1f0d76dd6 139 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 140 }
XinZhangMS 0:f7f1f0d76dd6 141 else
XinZhangMS 0:f7f1f0d76dd6 142 {
XinZhangMS 0:f7f1f0d76dd6 143 result = amqpvalue_create_accepted(accepted);
XinZhangMS 0:f7f1f0d76dd6 144 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 145 {
XinZhangMS 0:f7f1f0d76dd6 146 LogError("Cannot create ACCEPTED delivery state AMQP value");
XinZhangMS 0:f7f1f0d76dd6 147 }
XinZhangMS 0:f7f1f0d76dd6 148 else
XinZhangMS 0:f7f1f0d76dd6 149 {
XinZhangMS 0:f7f1f0d76dd6 150 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 151 }
XinZhangMS 0:f7f1f0d76dd6 152
XinZhangMS 0:f7f1f0d76dd6 153 accepted_destroy(accepted);
XinZhangMS 0:f7f1f0d76dd6 154 }
XinZhangMS 0:f7f1f0d76dd6 155
XinZhangMS 0:f7f1f0d76dd6 156 return result;
XinZhangMS 0:f7f1f0d76dd6 157 }
XinZhangMS 0:f7f1f0d76dd6 158
XinZhangMS 0:f7f1f0d76dd6 159 AMQP_VALUE messaging_delivery_rejected(const char* error_condition, const char* error_description)
XinZhangMS 0:f7f1f0d76dd6 160 {
XinZhangMS 0:f7f1f0d76dd6 161 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 162 REJECTED_HANDLE rejected = rejected_create();
XinZhangMS 0:f7f1f0d76dd6 163 if (rejected == NULL)
XinZhangMS 0:f7f1f0d76dd6 164 {
XinZhangMS 0:f7f1f0d76dd6 165 LogError("Cannot create REJECTED delivery state handle");
XinZhangMS 0:f7f1f0d76dd6 166 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 167 }
XinZhangMS 0:f7f1f0d76dd6 168 else
XinZhangMS 0:f7f1f0d76dd6 169 {
XinZhangMS 0:f7f1f0d76dd6 170 ERROR_HANDLE error_handle = NULL;
XinZhangMS 0:f7f1f0d76dd6 171 bool error_constructing = false;
XinZhangMS 0:f7f1f0d76dd6 172
XinZhangMS 0:f7f1f0d76dd6 173 if (error_condition != NULL)
XinZhangMS 0:f7f1f0d76dd6 174 {
XinZhangMS 0:f7f1f0d76dd6 175 error_handle = error_create(error_condition);
XinZhangMS 0:f7f1f0d76dd6 176 if (error_handle == NULL)
XinZhangMS 0:f7f1f0d76dd6 177 {
XinZhangMS 0:f7f1f0d76dd6 178 LogError("Cannot create error AMQP value for REJECTED state");
XinZhangMS 0:f7f1f0d76dd6 179 error_constructing = true;
XinZhangMS 0:f7f1f0d76dd6 180 }
XinZhangMS 0:f7f1f0d76dd6 181 else
XinZhangMS 0:f7f1f0d76dd6 182 {
XinZhangMS 0:f7f1f0d76dd6 183 if ((error_description != NULL) &&
XinZhangMS 0:f7f1f0d76dd6 184 (error_set_description(error_handle, error_description) != 0))
XinZhangMS 0:f7f1f0d76dd6 185 {
XinZhangMS 0:f7f1f0d76dd6 186 LogError("Cannot set error description on error AMQP value for REJECTED state");
XinZhangMS 0:f7f1f0d76dd6 187 error_constructing = true;
XinZhangMS 0:f7f1f0d76dd6 188 }
XinZhangMS 0:f7f1f0d76dd6 189 else
XinZhangMS 0:f7f1f0d76dd6 190 {
XinZhangMS 0:f7f1f0d76dd6 191 if (rejected_set_error(rejected, error_handle) != 0)
XinZhangMS 0:f7f1f0d76dd6 192 {
XinZhangMS 0:f7f1f0d76dd6 193 LogError("Cannot set error on REJECTED state handle");
XinZhangMS 0:f7f1f0d76dd6 194 error_constructing = true;
XinZhangMS 0:f7f1f0d76dd6 195 }
XinZhangMS 0:f7f1f0d76dd6 196 }
XinZhangMS 0:f7f1f0d76dd6 197
XinZhangMS 0:f7f1f0d76dd6 198 error_destroy(error_handle);
XinZhangMS 0:f7f1f0d76dd6 199 }
XinZhangMS 0:f7f1f0d76dd6 200 }
XinZhangMS 0:f7f1f0d76dd6 201
XinZhangMS 0:f7f1f0d76dd6 202 if (error_constructing)
XinZhangMS 0:f7f1f0d76dd6 203 {
XinZhangMS 0:f7f1f0d76dd6 204 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 205 }
XinZhangMS 0:f7f1f0d76dd6 206 else
XinZhangMS 0:f7f1f0d76dd6 207 {
XinZhangMS 0:f7f1f0d76dd6 208 result = amqpvalue_create_rejected(rejected);
XinZhangMS 0:f7f1f0d76dd6 209 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 210 {
XinZhangMS 0:f7f1f0d76dd6 211 LogError("Cannot create REJECTED delivery state AMQP value");
XinZhangMS 0:f7f1f0d76dd6 212 }
XinZhangMS 0:f7f1f0d76dd6 213 else
XinZhangMS 0:f7f1f0d76dd6 214 {
XinZhangMS 0:f7f1f0d76dd6 215 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 216 }
XinZhangMS 0:f7f1f0d76dd6 217 }
XinZhangMS 0:f7f1f0d76dd6 218
XinZhangMS 0:f7f1f0d76dd6 219 rejected_destroy(rejected);
XinZhangMS 0:f7f1f0d76dd6 220 }
XinZhangMS 0:f7f1f0d76dd6 221
XinZhangMS 0:f7f1f0d76dd6 222 return result;
XinZhangMS 0:f7f1f0d76dd6 223 }
XinZhangMS 0:f7f1f0d76dd6 224
XinZhangMS 0:f7f1f0d76dd6 225 AMQP_VALUE messaging_delivery_released(void)
XinZhangMS 0:f7f1f0d76dd6 226 {
XinZhangMS 0:f7f1f0d76dd6 227 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 228 RELEASED_HANDLE released = released_create();
XinZhangMS 0:f7f1f0d76dd6 229 if (released == NULL)
XinZhangMS 0:f7f1f0d76dd6 230 {
XinZhangMS 0:f7f1f0d76dd6 231 LogError("Cannot create RELEASED delivery state handle");
XinZhangMS 0:f7f1f0d76dd6 232 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 233 }
XinZhangMS 0:f7f1f0d76dd6 234 else
XinZhangMS 0:f7f1f0d76dd6 235 {
XinZhangMS 0:f7f1f0d76dd6 236 result = amqpvalue_create_released(released);
XinZhangMS 0:f7f1f0d76dd6 237 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 238 {
XinZhangMS 0:f7f1f0d76dd6 239 LogError("Cannot create RELEASED delivery state AMQP value");
XinZhangMS 0:f7f1f0d76dd6 240 }
XinZhangMS 0:f7f1f0d76dd6 241 else
XinZhangMS 0:f7f1f0d76dd6 242 {
XinZhangMS 0:f7f1f0d76dd6 243 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 244 }
XinZhangMS 0:f7f1f0d76dd6 245
XinZhangMS 0:f7f1f0d76dd6 246 released_destroy(released);
XinZhangMS 0:f7f1f0d76dd6 247 }
XinZhangMS 0:f7f1f0d76dd6 248
XinZhangMS 0:f7f1f0d76dd6 249 return result;
XinZhangMS 0:f7f1f0d76dd6 250 }
XinZhangMS 0:f7f1f0d76dd6 251
XinZhangMS 0:f7f1f0d76dd6 252 AMQP_VALUE messaging_delivery_modified(bool delivery_failed, bool undeliverable_here, fields message_annotations)
XinZhangMS 0:f7f1f0d76dd6 253 {
XinZhangMS 0:f7f1f0d76dd6 254 AMQP_VALUE result;
XinZhangMS 0:f7f1f0d76dd6 255 MODIFIED_HANDLE modified = modified_create();
XinZhangMS 0:f7f1f0d76dd6 256 if (modified == NULL)
XinZhangMS 0:f7f1f0d76dd6 257 {
XinZhangMS 0:f7f1f0d76dd6 258 LogError("Cannot create MODIFIED delivery state handle");
XinZhangMS 0:f7f1f0d76dd6 259 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 260 }
XinZhangMS 0:f7f1f0d76dd6 261 else
XinZhangMS 0:f7f1f0d76dd6 262 {
XinZhangMS 0:f7f1f0d76dd6 263 if (modified_set_delivery_failed(modified, delivery_failed) != 0)
XinZhangMS 0:f7f1f0d76dd6 264 {
XinZhangMS 0:f7f1f0d76dd6 265 LogError("Cannot set delivery failed on MODIFIED delivery state");
XinZhangMS 0:f7f1f0d76dd6 266 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 267 }
XinZhangMS 0:f7f1f0d76dd6 268 else if (modified_set_undeliverable_here(modified, undeliverable_here) != 0)
XinZhangMS 0:f7f1f0d76dd6 269 {
XinZhangMS 0:f7f1f0d76dd6 270 LogError("Cannot set undeliverable here on MODIFIED delivery state");
XinZhangMS 0:f7f1f0d76dd6 271 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 272 }
XinZhangMS 0:f7f1f0d76dd6 273 else if ((message_annotations != NULL) && (modified_set_message_annotations(modified, message_annotations) != 0))
XinZhangMS 0:f7f1f0d76dd6 274 {
XinZhangMS 0:f7f1f0d76dd6 275 LogError("Cannot set message annotations on MODIFIED delivery state");
XinZhangMS 0:f7f1f0d76dd6 276 result = NULL;
XinZhangMS 0:f7f1f0d76dd6 277 }
XinZhangMS 0:f7f1f0d76dd6 278 else
XinZhangMS 0:f7f1f0d76dd6 279 {
XinZhangMS 0:f7f1f0d76dd6 280 result = amqpvalue_create_modified(modified);
XinZhangMS 0:f7f1f0d76dd6 281 if (result == NULL)
XinZhangMS 0:f7f1f0d76dd6 282 {
XinZhangMS 0:f7f1f0d76dd6 283 LogError("Cannot create MODIFIED delivery state AMQP value");
XinZhangMS 0:f7f1f0d76dd6 284 }
XinZhangMS 0:f7f1f0d76dd6 285 else
XinZhangMS 0:f7f1f0d76dd6 286 {
XinZhangMS 0:f7f1f0d76dd6 287 /* all ok */
XinZhangMS 0:f7f1f0d76dd6 288 }
XinZhangMS 0:f7f1f0d76dd6 289 }
XinZhangMS 0:f7f1f0d76dd6 290
XinZhangMS 0:f7f1f0d76dd6 291 modified_destroy(modified);
XinZhangMS 0:f7f1f0d76dd6 292 }
XinZhangMS 0:f7f1f0d76dd6 293
XinZhangMS 0:f7f1f0d76dd6 294 return result;
XinZhangMS 0:f7f1f0d76dd6 295 }