A small memory footprint AMQP implimentation
Dependents: iothub_client_sample_amqp remote_monitoring simplesample_amqp
messaging.c
- Committer:
- Azure.IoT Build
- Date:
- 2016-04-08
- Revision:
- 0:6ae2f7bca550
- Child:
- 17:923575db8b2d
File content as of revision 0:6ae2f7bca550:
// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. #include <stdlib.h> #ifdef _CRTDBG_MAP_ALLOC #include <crtdbg.h> #endif #include <stdbool.h> #include "azure_uamqp_c/amqpvalue.h" #include "azure_uamqp_c/amqp_definitions.h" AMQP_VALUE messaging_create_source(const char* address) { AMQP_VALUE result; SOURCE_HANDLE source = source_create(); if (source == NULL) { result = NULL; } else { AMQP_VALUE address_value = amqpvalue_create_string(address); if (address_value == NULL) { result = NULL; } else { if (source_set_address(source, address_value) != 0) { result = NULL; } else { result = amqpvalue_create_source(source); } amqpvalue_destroy(address_value); } source_destroy(source); } return result; } AMQP_VALUE messaging_create_target(const char* address) { AMQP_VALUE result; TARGET_HANDLE target = target_create(); if (target == NULL) { result = NULL; } else { AMQP_VALUE address_value = amqpvalue_create_string(address); if (address_value == NULL) { result = NULL; } else { if (target_set_address(target, address_value) != 0) { result = NULL; } else { result = amqpvalue_create_target(target); } amqpvalue_destroy(address_value); } target_destroy(target); } return result; } AMQP_VALUE messaging_delivery_received(uint32_t section_number, uint64_t section_offset) { AMQP_VALUE result; RECEIVED_HANDLE received = received_create(section_number, section_offset); if (received == NULL) { result = NULL; } else { result = amqpvalue_create_received(received); received_destroy(received); } return result; } AMQP_VALUE messaging_delivery_accepted(void) { AMQP_VALUE result; ACCEPTED_HANDLE accepted = accepted_create(); if (accepted == NULL) { result = NULL; } else { result = amqpvalue_create_accepted(accepted); accepted_destroy(accepted); } return result; } AMQP_VALUE messaging_delivery_rejected(const char* error_condition, const char* error_description) { AMQP_VALUE result; REJECTED_HANDLE rejected = rejected_create(); if (rejected == NULL) { result = NULL; } else { ERROR_HANDLE error_handle = NULL; bool error_constructing = false; if (error_condition != NULL) { error_handle = error_create(error_condition); if (error_handle == NULL) { error_constructing = true; } else { if ((error_description != NULL) && (error_set_description(error_handle, error_description) != 0)) { error_constructing = true; } else { if (rejected_set_error(rejected, error_handle) != 0) { error_constructing = true; } } error_destroy(error_handle); } } if (error_constructing) { result = NULL; } else { result = amqpvalue_create_rejected(rejected); } rejected_destroy(rejected); } return result; } AMQP_VALUE messaging_delivery_released(void) { AMQP_VALUE result; RELEASED_HANDLE released = released_create(); if (released == NULL) { result = NULL; } else { result = amqpvalue_create_released(released); released_destroy(released); } return result; } AMQP_VALUE messaging_delivery_modified(bool delivery_failed, bool undeliverable_here, fields message_annotations) { AMQP_VALUE result; MODIFIED_HANDLE modified = modified_create(); if (modified == NULL) { result = NULL; } else { if ((modified_set_delivery_failed(modified, delivery_failed) != 0) || (modified_set_undeliverable_here(modified, undeliverable_here) != 0) || ((message_annotations != NULL) && (modified_set_message_annotations(modified, message_annotations) != 0))) { result = NULL; } else { result = amqpvalue_create_modified(modified); } modified_destroy(modified); } return result; }