A small memory footprint AMQP implimentation

Dependents:   iothub_client_sample_amqp remote_monitoring simplesample_amqp

Committer:
AzureIoTClient
Date:
Mon Mar 05 17:41:28 2018 -0800
Revision:
40:f0ceafa8d570
Parent:
34:6be9c2058664
1.2.0

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 #ifndef SESSION_H
Azure.IoT Build 0:6ae2f7bca550 5 #define SESSION_H
Azure.IoT Build 0:6ae2f7bca550 6
Azure.IoT Build 0:6ae2f7bca550 7 #include <stdint.h>
Azure.IoT Build 0:6ae2f7bca550 8 #include "azure_uamqp_c/amqpvalue.h"
Azure.IoT Build 0:6ae2f7bca550 9 #include "azure_uamqp_c/amqp_frame_codec.h"
Azure.IoT Build 0:6ae2f7bca550 10 #include "azure_uamqp_c/connection.h"
AzureIoTClient 40:f0ceafa8d570 11
AzureIoTClient 40:f0ceafa8d570 12 #include "azure_uamqp_c/amqp_definitions_role.h"
AzureIoTClient 40:f0ceafa8d570 13 #include "azure_uamqp_c/amqp_definitions_handle.h"
AzureIoTClient 40:f0ceafa8d570 14 #include "azure_uamqp_c/amqp_definitions_fields.h"
AzureIoTClient 40:f0ceafa8d570 15 #include "azure_uamqp_c/amqp_definitions_sender_settle_mode.h"
AzureIoTClient 40:f0ceafa8d570 16 #include "azure_uamqp_c/amqp_definitions_receiver_settle_mode.h"
AzureIoTClient 40:f0ceafa8d570 17 #include "azure_uamqp_c/amqp_definitions_sequence_no.h"
AzureIoTClient 40:f0ceafa8d570 18 #include "azure_uamqp_c/amqp_definitions_delivery_number.h"
AzureIoTClient 40:f0ceafa8d570 19 #include "azure_uamqp_c/amqp_definitions_disposition.h"
AzureIoTClient 40:f0ceafa8d570 20 #include "azure_uamqp_c/amqp_definitions_transfer_number.h"
AzureIoTClient 40:f0ceafa8d570 21 #include "azure_uamqp_c/amqp_definitions_flow.h"
AzureIoTClient 40:f0ceafa8d570 22 #include "azure_uamqp_c/amqp_definitions_attach.h"
AzureIoTClient 40:f0ceafa8d570 23 #include "azure_uamqp_c/amqp_definitions_error.h"
AzureIoTClient 40:f0ceafa8d570 24 #include "azure_uamqp_c/amqp_definitions_detach.h"
AzureIoTClient 40:f0ceafa8d570 25 #include "azure_uamqp_c/amqp_definitions_delivery_tag.h"
AzureIoTClient 40:f0ceafa8d570 26 #include "azure_uamqp_c/amqp_definitions_message_format.h"
AzureIoTClient 40:f0ceafa8d570 27 #include "azure_uamqp_c/amqp_definitions_transfer.h"
AzureIoTClient 40:f0ceafa8d570 28
AzureIoTClient 40:f0ceafa8d570 29
AzureIoTClient 34:6be9c2058664 30 #include "azure_c_shared_utility/umock_c_prod.h"
AzureIoTClient 34:6be9c2058664 31 #include "azure_c_shared_utility/macro_utils.h"
Azure.IoT Build 0:6ae2f7bca550 32
AzureIoTClient 40:f0ceafa8d570 33
Azure.IoT Build 0:6ae2f7bca550 34 #ifdef __cplusplus
Azure.IoT Build 0:6ae2f7bca550 35 extern "C" {
Azure.IoT Build 0:6ae2f7bca550 36 #endif /* __cplusplus */
Azure.IoT Build 0:6ae2f7bca550 37
AzureIoTClient 34:6be9c2058664 38 typedef struct SESSION_INSTANCE_TAG* SESSION_HANDLE;
AzureIoTClient 34:6be9c2058664 39 typedef struct LINK_ENDPOINT_INSTANCE_TAG* LINK_ENDPOINT_HANDLE;
Azure.IoT Build 0:6ae2f7bca550 40
AzureIoTClient 34:6be9c2058664 41 #define SESSION_STATE_VALUES \
AzureIoTClient 34:6be9c2058664 42 SESSION_STATE_UNMAPPED, \
AzureIoTClient 34:6be9c2058664 43 SESSION_STATE_BEGIN_SENT, \
AzureIoTClient 34:6be9c2058664 44 SESSION_STATE_BEGIN_RCVD, \
AzureIoTClient 34:6be9c2058664 45 SESSION_STATE_MAPPED, \
AzureIoTClient 34:6be9c2058664 46 SESSION_STATE_END_SENT, \
AzureIoTClient 34:6be9c2058664 47 SESSION_STATE_END_RCVD, \
AzureIoTClient 34:6be9c2058664 48 SESSION_STATE_DISCARDING, \
AzureIoTClient 34:6be9c2058664 49 SESSION_STATE_ERROR
Azure.IoT Build 0:6ae2f7bca550 50
AzureIoTClient 34:6be9c2058664 51 DEFINE_ENUM(SESSION_STATE, SESSION_STATE_VALUES)
AzureIoTClient 34:6be9c2058664 52
AzureIoTClient 34:6be9c2058664 53 #define SESSION_SEND_TRANSFER_RESULT_VALUES \
AzureIoTClient 34:6be9c2058664 54 SESSION_SEND_TRANSFER_OK, \
AzureIoTClient 34:6be9c2058664 55 SESSION_SEND_TRANSFER_ERROR, \
AzureIoTClient 34:6be9c2058664 56 SESSION_SEND_TRANSFER_BUSY
AzureIoTClient 34:6be9c2058664 57
AzureIoTClient 34:6be9c2058664 58 DEFINE_ENUM(SESSION_SEND_TRANSFER_RESULT, SESSION_SEND_TRANSFER_RESULT_VALUES)
Azure.IoT Build 0:6ae2f7bca550 59
AzureIoTClient 28:add19eb7defa 60 typedef void(*LINK_ENDPOINT_FRAME_RECEIVED_CALLBACK)(void* context, AMQP_VALUE performative, uint32_t frame_payload_size, const unsigned char* payload_bytes);
AzureIoTClient 28:add19eb7defa 61 typedef void(*ON_SESSION_STATE_CHANGED)(void* context, SESSION_STATE new_session_state, SESSION_STATE previous_session_state);
AzureIoTClient 28:add19eb7defa 62 typedef void(*ON_SESSION_FLOW_ON)(void* context);
AzureIoTClient 28:add19eb7defa 63 typedef bool(*ON_LINK_ATTACHED)(void* context, LINK_ENDPOINT_HANDLE new_link_endpoint, const char* name, role role, AMQP_VALUE source, AMQP_VALUE target);
Azure.IoT Build 0:6ae2f7bca550 64
AzureIoTClient 28:add19eb7defa 65 MOCKABLE_FUNCTION(, SESSION_HANDLE, session_create, CONNECTION_HANDLE, connection, ON_LINK_ATTACHED, on_link_attached, void*, callback_context);
AzureIoTClient 28:add19eb7defa 66 MOCKABLE_FUNCTION(, SESSION_HANDLE, session_create_from_endpoint, CONNECTION_HANDLE, connection, ENDPOINT_HANDLE, connection_endpoint, ON_LINK_ATTACHED, on_link_attached, void*, callback_context);
AzureIoTClient 28:add19eb7defa 67 MOCKABLE_FUNCTION(, int, session_set_incoming_window, SESSION_HANDLE, session, uint32_t, incoming_window);
AzureIoTClient 28:add19eb7defa 68 MOCKABLE_FUNCTION(, int, session_get_incoming_window, SESSION_HANDLE, session, uint32_t*, incoming_window);
AzureIoTClient 28:add19eb7defa 69 MOCKABLE_FUNCTION(, int, session_set_outgoing_window, SESSION_HANDLE, session, uint32_t, outgoing_window);
AzureIoTClient 28:add19eb7defa 70 MOCKABLE_FUNCTION(, int, session_get_outgoing_window, SESSION_HANDLE, session, uint32_t*, outgoing_window);
AzureIoTClient 28:add19eb7defa 71 MOCKABLE_FUNCTION(, int, session_set_handle_max, SESSION_HANDLE, session, handle, handle_max);
AzureIoTClient 28:add19eb7defa 72 MOCKABLE_FUNCTION(, int, session_get_handle_max, SESSION_HANDLE, session, handle*, handle_max);
AzureIoTClient 28:add19eb7defa 73 MOCKABLE_FUNCTION(, void, session_destroy, SESSION_HANDLE, session);
AzureIoTClient 28:add19eb7defa 74 MOCKABLE_FUNCTION(, int, session_begin, SESSION_HANDLE, session);
AzureIoTClient 28:add19eb7defa 75 MOCKABLE_FUNCTION(, int, session_end, SESSION_HANDLE, session, const char*, condition_value, const char*, description);
AzureIoTClient 28:add19eb7defa 76 MOCKABLE_FUNCTION(, LINK_ENDPOINT_HANDLE, session_create_link_endpoint, SESSION_HANDLE, session, const char*, name);
AzureIoTClient 28:add19eb7defa 77 MOCKABLE_FUNCTION(, void, session_destroy_link_endpoint, LINK_ENDPOINT_HANDLE, link_endpoint);
AzureIoTClient 28:add19eb7defa 78 MOCKABLE_FUNCTION(, int, session_start_link_endpoint, LINK_ENDPOINT_HANDLE, link_endpoint, ON_ENDPOINT_FRAME_RECEIVED, frame_received_callback, ON_SESSION_STATE_CHANGED, on_session_state_changed, ON_SESSION_FLOW_ON, on_session_flow_on, void*, context);
AzureIoTClient 28:add19eb7defa 79 MOCKABLE_FUNCTION(, int, session_send_flow, LINK_ENDPOINT_HANDLE, link_endpoint, FLOW_HANDLE, flow);
AzureIoTClient 28:add19eb7defa 80 MOCKABLE_FUNCTION(, int, session_send_attach, LINK_ENDPOINT_HANDLE, link_endpoint, ATTACH_HANDLE, attach);
AzureIoTClient 28:add19eb7defa 81 MOCKABLE_FUNCTION(, int, session_send_disposition, LINK_ENDPOINT_HANDLE, link_endpoint, DISPOSITION_HANDLE, disposition);
AzureIoTClient 28:add19eb7defa 82 MOCKABLE_FUNCTION(, int, session_send_detach, LINK_ENDPOINT_HANDLE, link_endpoint, DETACH_HANDLE, detach);
AzureIoTClient 28:add19eb7defa 83 MOCKABLE_FUNCTION(, SESSION_SEND_TRANSFER_RESULT, session_send_transfer, LINK_ENDPOINT_HANDLE, link_endpoint, TRANSFER_HANDLE, transfer, PAYLOAD*, payloads, size_t, payload_count, delivery_number*, delivery_id, ON_SEND_COMPLETE, on_send_complete, void*, callback_context);
Azure.IoT Build 0:6ae2f7bca550 84
Azure.IoT Build 0:6ae2f7bca550 85 #ifdef __cplusplus
Azure.IoT Build 0:6ae2f7bca550 86 }
Azure.IoT Build 0:6ae2f7bca550 87 #endif /* __cplusplus */
Azure.IoT Build 0:6ae2f7bca550 88
Azure.IoT Build 0:6ae2f7bca550 89 #endif /* SESSION_H */