diff options
Diffstat (limited to 'librabbitmq')
-rw-r--r-- | librabbitmq/CMakeLists.txt | 5 | ||||
-rw-r--r-- | librabbitmq/amqp.h | 5 | ||||
-rw-r--r-- | librabbitmq/amqp_connection.c | 29 | ||||
-rw-r--r-- | librabbitmq/amqp_consumer.c | 15 | ||||
-rw-r--r-- | librabbitmq/amqp_framing.c | 260 | ||||
-rw-r--r-- | librabbitmq/amqp_framing.h | 1015 | ||||
-rw-r--r-- | librabbitmq/amqp_openssl.c | 14 | ||||
-rw-r--r-- | librabbitmq/amqp_private.h | 6 | ||||
-rw-r--r-- | librabbitmq/amqp_socket.c | 74 | ||||
-rw-r--r-- | librabbitmq/amqp_socket.h | 8 | ||||
-rw-r--r-- | librabbitmq/amqp_ssl_socket.h | 6 | ||||
-rw-r--r-- | librabbitmq/amqp_tcp_socket.h | 6 | ||||
-rw-r--r-- | librabbitmq/amqp_timer.c | 7 | ||||
-rw-r--r-- | librabbitmq/amqp_timer.h | 8 | ||||
-rw-r--r-- | librabbitmq/codegen.py | 1 | ||||
-rw-r--r-- | librabbitmq/win32/threads.h | 6 |
16 files changed, 1063 insertions, 402 deletions
diff --git a/librabbitmq/CMakeLists.txt b/librabbitmq/CMakeLists.txt index d3623b3..2c3032e 100644 --- a/librabbitmq/CMakeLists.txt +++ b/librabbitmq/CMakeLists.txt @@ -88,6 +88,11 @@ if (ENABLE_SSL_SUPPORT) ) include_directories(${OPENSSL_INCLUDE_DIR}) set(AMQP_SSL_LIBS ${OPENSSL_LIBRARIES}) + if (APPLE) + # Apple has deprecated OpenSSL in 10.7+. This disables that warning. + set_source_files_properties(${AMQP_SSL_SRCS} + PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations) + endif() elseif (SSL_ENGINE STREQUAL "cyaSSL") set(AMQP_SSL_SRCS ${AMQP_SSL_SOCKET_H_PATH} amqp_cyassl.c) diff --git a/librabbitmq/amqp.h b/librabbitmq/amqp.h index 82b7c02..9fcd206 100644 --- a/librabbitmq/amqp.h +++ b/librabbitmq/amqp.h @@ -4,7 +4,7 @@ * ***** BEGIN LICENSE BLOCK ***** * Version: MIT * - * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Portions created by Alan Antonuk are Copyright (c) 2012-2014 * Alan Antonuk. All Rights Reserved. * * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. @@ -113,7 +113,6 @@ # define AMQP_CALL __cdecl #elif defined(__GNUC__) && __GNUC__ >= 4 -# include <sys/uio.h> # define AMQP_PUBLIC_FUNCTION \ __attribute__ ((visibility ("default"))) # define AMQP_PUBLIC_VARIABLE \ @@ -225,7 +224,7 @@ AMQP_BEGIN_DECLS #define AMQP_VERSION_MAJOR 0 #define AMQP_VERSION_MINOR 5 -#define AMQP_VERSION_PATCH 1 +#define AMQP_VERSION_PATCH 3 #define AMQP_VERSION_IS_RELEASE 0 diff --git a/librabbitmq/amqp_connection.c b/librabbitmq/amqp_connection.c index 5d70b07..3315969 100644 --- a/librabbitmq/amqp_connection.c +++ b/librabbitmq/amqp_connection.c @@ -3,7 +3,7 @@ * ***** BEGIN LICENSE BLOCK ***** * Version: MIT * - * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Portions created by Alan Antonuk are Copyright (c) 2012-2014 * Alan Antonuk. All Rights Reserved. * * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. @@ -48,9 +48,14 @@ #include <stdlib.h> #include <string.h> -#define INITIAL_FRAME_POOL_PAGE_SIZE 65536 -#define INITIAL_DECODING_POOL_PAGE_SIZE 131072 -#define INITIAL_INBOUND_SOCK_BUFFER_SIZE 131072 +#ifndef AMQP_INITIAL_FRAME_POOL_PAGE_SIZE +#define AMQP_INITIAL_FRAME_POOL_PAGE_SIZE 65536 +#endif + +#ifndef AMQP_INITIAL_INBOUND_SOCK_BUFFER_SIZE +#define AMQP_INITIAL_INBOUND_SOCK_BUFFER_SIZE 131072 +#endif + #define ENFORCE_STATE(statevec, statenum) \ { \ @@ -72,7 +77,7 @@ amqp_connection_state_t amqp_new_connection(void) return NULL; } - res = amqp_tune_connection(state, 0, INITIAL_FRAME_POOL_PAGE_SIZE, 0); + res = amqp_tune_connection(state, 0, AMQP_INITIAL_FRAME_POOL_PAGE_SIZE, 0); if (0 != res) { goto out_nomem; } @@ -85,8 +90,8 @@ amqp_connection_state_t amqp_new_connection(void) is also the minimum frame size */ state->target_size = 8; - state->sock_inbound_buffer.len = INITIAL_INBOUND_SOCK_BUFFER_SIZE; - state->sock_inbound_buffer.bytes = malloc(INITIAL_INBOUND_SOCK_BUFFER_SIZE); + state->sock_inbound_buffer.len = AMQP_INITIAL_INBOUND_SOCK_BUFFER_SIZE; + state->sock_inbound_buffer.bytes = malloc(AMQP_INITIAL_INBOUND_SOCK_BUFFER_SIZE); if (state->sock_inbound_buffer.bytes == NULL) { goto out_nomem; } @@ -274,14 +279,18 @@ int amqp_handle_input(amqp_connection_state_t state, /* frame length is 3 bytes in */ channel = amqp_d16(raw_frame, 1); + state->target_size + = amqp_d32(raw_frame, 3) + HEADER_SIZE + FOOTER_SIZE; + + if ((size_t)state->frame_max < state->target_size) { + return AMQP_STATUS_BAD_AMQP_DATA; + } + channel_pool = amqp_get_or_create_channel_pool(state, channel); if (NULL == channel_pool) { return AMQP_STATUS_NO_MEMORY; } - state->target_size - = amqp_d32(raw_frame, 3) + HEADER_SIZE + FOOTER_SIZE; - amqp_pool_alloc_bytes(channel_pool, state->target_size, &state->inbound_buffer); if (NULL == state->inbound_buffer.bytes) { return AMQP_STATUS_NO_MEMORY; diff --git a/librabbitmq/amqp_consumer.c b/librabbitmq/amqp_consumer.c index 6c6c1c9..cf08fd5 100644 --- a/librabbitmq/amqp_consumer.c +++ b/librabbitmq/amqp_consumer.c @@ -3,7 +3,7 @@ * ***** BEGIN LICENSE BLOCK ***** * Version: MIT * - * Portions created by Alan Antonuk are Copyright (c) 2013 + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 * Alan Antonuk. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person @@ -131,6 +131,13 @@ void amqp_destroy_envelope(amqp_envelope_t *envelope) amqp_bytes_free(envelope->consumer_tag); } +static +int amqp_bytes_malloc_dup_failed(amqp_bytes_t bytes) { + if (bytes.len != 0 && bytes.bytes == NULL) { + return 1; + } + return 0; +} amqp_rpc_reply_t amqp_consume_message(amqp_connection_state_t state, amqp_envelope_t *envelope, @@ -168,9 +175,9 @@ amqp_consume_message(amqp_connection_state_t state, amqp_envelope_t *envelope, envelope->exchange = amqp_bytes_malloc_dup(delivery_method->exchange); envelope->routing_key = amqp_bytes_malloc_dup(delivery_method->routing_key); - if (NULL == envelope->consumer_tag.bytes || - NULL == envelope->exchange.bytes || - NULL == envelope->routing_key.bytes) { + if (amqp_bytes_malloc_dup_failed(envelope->consumer_tag) || + amqp_bytes_malloc_dup_failed(envelope->exchange) || + amqp_bytes_malloc_dup_failed(envelope->routing_key)) { ret.reply_type = AMQP_RESPONSE_LIBRARY_EXCEPTION; ret.library_error = AMQP_STATUS_NO_MEMORY; goto error_out2; diff --git a/librabbitmq/amqp_framing.c b/librabbitmq/amqp_framing.c index b2f0a83..76fc0cc 100644 --- a/librabbitmq/amqp_framing.c +++ b/librabbitmq/amqp_framing.c @@ -1880,7 +1880,16 @@ int amqp_encode_properties(uint16_t class_id, } } -AMQP_PUBLIC_FUNCTION amqp_channel_open_ok_t * AMQP_CALL amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel) +/** + * amqp_channel_open + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_channel_open_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_channel_open_ok_t * +AMQP_CALL amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel) { amqp_channel_open_t req; req.out_of_band = amqp_empty_bytes; @@ -1889,7 +1898,17 @@ AMQP_PUBLIC_FUNCTION amqp_channel_open_ok_t * AMQP_CALL amqp_channel_open(amqp_c } -AMQP_PUBLIC_FUNCTION amqp_channel_flow_ok_t * AMQP_CALL amqp_channel_flow(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t active) +/** + * amqp_channel_flow + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] active active + * @returns amqp_channel_flow_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_channel_flow_ok_t * +AMQP_CALL amqp_channel_flow(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t active) { amqp_channel_flow_t req; req.active = active; @@ -1898,7 +1917,23 @@ AMQP_PUBLIC_FUNCTION amqp_channel_flow_ok_t * AMQP_CALL amqp_channel_flow(amqp_c } -AMQP_PUBLIC_FUNCTION amqp_exchange_declare_ok_t * AMQP_CALL amqp_exchange_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, amqp_table_t arguments) +/** + * amqp_exchange_declare + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] exchange exchange + * @param [in] type type + * @param [in] passive passive + * @param [in] durable durable + * @param [in] auto_delete auto_delete + * @param [in] internal internal + * @param [in] arguments arguments + * @returns amqp_exchange_declare_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_declare_ok_t * +AMQP_CALL amqp_exchange_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t auto_delete, amqp_boolean_t internal, amqp_table_t arguments) { amqp_exchange_declare_t req; req.ticket = 0; @@ -1906,8 +1941,8 @@ AMQP_PUBLIC_FUNCTION amqp_exchange_declare_ok_t * AMQP_CALL amqp_exchange_declar req.type = type; req.passive = passive; req.durable = durable; - req.auto_delete = 0; - req.internal = 0; + req.auto_delete = auto_delete; + req.internal = internal; req.nowait = 0; req.arguments = arguments; @@ -1915,7 +1950,18 @@ AMQP_PUBLIC_FUNCTION amqp_exchange_declare_ok_t * AMQP_CALL amqp_exchange_declar } -AMQP_PUBLIC_FUNCTION amqp_exchange_delete_ok_t * AMQP_CALL amqp_exchange_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_boolean_t if_unused) +/** + * amqp_exchange_delete + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] exchange exchange + * @param [in] if_unused if_unused + * @returns amqp_exchange_delete_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_delete_ok_t * +AMQP_CALL amqp_exchange_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_boolean_t if_unused) { amqp_exchange_delete_t req; req.ticket = 0; @@ -1927,7 +1973,20 @@ AMQP_PUBLIC_FUNCTION amqp_exchange_delete_ok_t * AMQP_CALL amqp_exchange_delete( } -AMQP_PUBLIC_FUNCTION amqp_exchange_bind_ok_t * AMQP_CALL amqp_exchange_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments) +/** + * amqp_exchange_bind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] destination destination + * @param [in] source source + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_exchange_bind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_bind_ok_t * +AMQP_CALL amqp_exchange_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments) { amqp_exchange_bind_t req; req.ticket = 0; @@ -1941,7 +2000,20 @@ AMQP_PUBLIC_FUNCTION amqp_exchange_bind_ok_t * AMQP_CALL amqp_exchange_bind(amqp } -AMQP_PUBLIC_FUNCTION amqp_exchange_unbind_ok_t * AMQP_CALL amqp_exchange_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments) +/** + * amqp_exchange_unbind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] destination destination + * @param [in] source source + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_exchange_unbind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_unbind_ok_t * +AMQP_CALL amqp_exchange_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments) { amqp_exchange_unbind_t req; req.ticket = 0; @@ -1955,7 +2027,22 @@ AMQP_PUBLIC_FUNCTION amqp_exchange_unbind_ok_t * AMQP_CALL amqp_exchange_unbind( } -AMQP_PUBLIC_FUNCTION amqp_queue_declare_ok_t * AMQP_CALL amqp_queue_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive, amqp_boolean_t auto_delete, amqp_table_t arguments) +/** + * amqp_queue_declare + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] passive passive + * @param [in] durable durable + * @param [in] exclusive exclusive + * @param [in] auto_delete auto_delete + * @param [in] arguments arguments + * @returns amqp_queue_declare_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_declare_ok_t * +AMQP_CALL amqp_queue_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive, amqp_boolean_t auto_delete, amqp_table_t arguments) { amqp_queue_declare_t req; req.ticket = 0; @@ -1971,7 +2058,20 @@ AMQP_PUBLIC_FUNCTION amqp_queue_declare_ok_t * AMQP_CALL amqp_queue_declare(amqp } -AMQP_PUBLIC_FUNCTION amqp_queue_bind_ok_t * AMQP_CALL amqp_queue_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments) +/** + * amqp_queue_bind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] exchange exchange + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_queue_bind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_bind_ok_t * +AMQP_CALL amqp_queue_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments) { amqp_queue_bind_t req; req.ticket = 0; @@ -1985,7 +2085,17 @@ AMQP_PUBLIC_FUNCTION amqp_queue_bind_ok_t * AMQP_CALL amqp_queue_bind(amqp_conne } -AMQP_PUBLIC_FUNCTION amqp_queue_purge_ok_t * AMQP_CALL amqp_queue_purge(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue) +/** + * amqp_queue_purge + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @returns amqp_queue_purge_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_purge_ok_t * +AMQP_CALL amqp_queue_purge(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue) { amqp_queue_purge_t req; req.ticket = 0; @@ -1996,7 +2106,19 @@ AMQP_PUBLIC_FUNCTION amqp_queue_purge_ok_t * AMQP_CALL amqp_queue_purge(amqp_con } -AMQP_PUBLIC_FUNCTION amqp_queue_delete_ok_t * AMQP_CALL amqp_queue_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t if_unused, amqp_boolean_t if_empty) +/** + * amqp_queue_delete + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] if_unused if_unused + * @param [in] if_empty if_empty + * @returns amqp_queue_delete_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_delete_ok_t * +AMQP_CALL amqp_queue_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t if_unused, amqp_boolean_t if_empty) { amqp_queue_delete_t req; req.ticket = 0; @@ -2009,7 +2131,20 @@ AMQP_PUBLIC_FUNCTION amqp_queue_delete_ok_t * AMQP_CALL amqp_queue_delete(amqp_c } -AMQP_PUBLIC_FUNCTION amqp_queue_unbind_ok_t * AMQP_CALL amqp_queue_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments) +/** + * amqp_queue_unbind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] exchange exchange + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_queue_unbind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_unbind_ok_t * +AMQP_CALL amqp_queue_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments) { amqp_queue_unbind_t req; req.ticket = 0; @@ -2022,7 +2157,19 @@ AMQP_PUBLIC_FUNCTION amqp_queue_unbind_ok_t * AMQP_CALL amqp_queue_unbind(amqp_c } -AMQP_PUBLIC_FUNCTION amqp_basic_qos_ok_t * AMQP_CALL amqp_basic_qos(amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global) +/** + * amqp_basic_qos + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] prefetch_size prefetch_size + * @param [in] prefetch_count prefetch_count + * @param [in] global global + * @returns amqp_basic_qos_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_qos_ok_t * +AMQP_CALL amqp_basic_qos(amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global) { amqp_basic_qos_t req; req.prefetch_size = prefetch_size; @@ -2033,7 +2180,22 @@ AMQP_PUBLIC_FUNCTION amqp_basic_qos_ok_t * AMQP_CALL amqp_basic_qos(amqp_connect } -AMQP_PUBLIC_FUNCTION amqp_basic_consume_ok_t * AMQP_CALL amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments) +/** + * amqp_basic_consume + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] consumer_tag consumer_tag + * @param [in] no_local no_local + * @param [in] no_ack no_ack + * @param [in] exclusive exclusive + * @param [in] arguments arguments + * @returns amqp_basic_consume_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_consume_ok_t * +AMQP_CALL amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments) { amqp_basic_consume_t req; req.ticket = 0; @@ -2049,7 +2211,17 @@ AMQP_PUBLIC_FUNCTION amqp_basic_consume_ok_t * AMQP_CALL amqp_basic_consume(amqp } -AMQP_PUBLIC_FUNCTION amqp_basic_cancel_ok_t * AMQP_CALL amqp_basic_cancel(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t consumer_tag) +/** + * amqp_basic_cancel + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] consumer_tag consumer_tag + * @returns amqp_basic_cancel_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_cancel_ok_t * +AMQP_CALL amqp_basic_cancel(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t consumer_tag) { amqp_basic_cancel_t req; req.consumer_tag = consumer_tag; @@ -2059,7 +2231,17 @@ AMQP_PUBLIC_FUNCTION amqp_basic_cancel_ok_t * AMQP_CALL amqp_basic_cancel(amqp_c } -AMQP_PUBLIC_FUNCTION amqp_basic_recover_ok_t * AMQP_CALL amqp_basic_recover(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t requeue) +/** + * amqp_basic_recover + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] requeue requeue + * @returns amqp_basic_recover_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_recover_ok_t * +AMQP_CALL amqp_basic_recover(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t requeue) { amqp_basic_recover_t req; req.requeue = requeue; @@ -2068,7 +2250,16 @@ AMQP_PUBLIC_FUNCTION amqp_basic_recover_ok_t * AMQP_CALL amqp_basic_recover(amqp } -AMQP_PUBLIC_FUNCTION amqp_tx_select_ok_t * AMQP_CALL amqp_tx_select(amqp_connection_state_t state, amqp_channel_t channel) +/** + * amqp_tx_select + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_tx_select_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_tx_select_ok_t * +AMQP_CALL amqp_tx_select(amqp_connection_state_t state, amqp_channel_t channel) { amqp_tx_select_t req; @@ -2076,7 +2267,16 @@ AMQP_PUBLIC_FUNCTION amqp_tx_select_ok_t * AMQP_CALL amqp_tx_select(amqp_connect } -AMQP_PUBLIC_FUNCTION amqp_tx_commit_ok_t * AMQP_CALL amqp_tx_commit(amqp_connection_state_t state, amqp_channel_t channel) +/** + * amqp_tx_commit + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_tx_commit_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_tx_commit_ok_t * +AMQP_CALL amqp_tx_commit(amqp_connection_state_t state, amqp_channel_t channel) { amqp_tx_commit_t req; @@ -2084,7 +2284,16 @@ AMQP_PUBLIC_FUNCTION amqp_tx_commit_ok_t * AMQP_CALL amqp_tx_commit(amqp_connect } -AMQP_PUBLIC_FUNCTION amqp_tx_rollback_ok_t * AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state, amqp_channel_t channel) +/** + * amqp_tx_rollback + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_tx_rollback_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_tx_rollback_ok_t * +AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state, amqp_channel_t channel) { amqp_tx_rollback_t req; @@ -2092,7 +2301,16 @@ AMQP_PUBLIC_FUNCTION amqp_tx_rollback_ok_t * AMQP_CALL amqp_tx_rollback(amqp_con } -AMQP_PUBLIC_FUNCTION amqp_confirm_select_ok_t * AMQP_CALL amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel) +/** + * amqp_confirm_select + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_confirm_select_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_confirm_select_ok_t * +AMQP_CALL amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel) { amqp_confirm_select_t req; req.nowait = 0; diff --git a/librabbitmq/amqp_framing.h b/librabbitmq/amqp_framing.h index 0c04cb8..e392dcc 100644 --- a/librabbitmq/amqp_framing.h +++ b/librabbitmq/amqp_framing.h @@ -34,6 +34,7 @@ * ***** END LICENSE BLOCK ***** */ +/** @file amqp_framing.h */ #ifndef AMQP_FRAMING_H #define AMQP_FRAMING_H @@ -41,54 +42,95 @@ AMQP_BEGIN_DECLS -#define AMQP_PROTOCOL_VERSION_MAJOR 0 -#define AMQP_PROTOCOL_VERSION_MINOR 9 -#define AMQP_PROTOCOL_VERSION_REVISION 1 -#define AMQP_PROTOCOL_PORT 5672 -#define AMQP_FRAME_METHOD 1 -#define AMQP_FRAME_HEADER 2 -#define AMQP_FRAME_BODY 3 -#define AMQP_FRAME_HEARTBEAT 8 -#define AMQP_FRAME_MIN_SIZE 4096 -#define AMQP_FRAME_END 206 -#define AMQP_REPLY_SUCCESS 200 -#define AMQP_CONTENT_TOO_LARGE 311 -#define AMQP_NO_ROUTE 312 -#define AMQP_NO_CONSUMERS 313 -#define AMQP_ACCESS_REFUSED 403 -#define AMQP_NOT_FOUND 404 -#define AMQP_RESOURCE_LOCKED 405 -#define AMQP_PRECONDITION_FAILED 406 -#define AMQP_CONNECTION_FORCED 320 -#define AMQP_INVALID_PATH 402 -#define AMQP_FRAME_ERROR 501 -#define AMQP_SYNTAX_ERROR 502 -#define AMQP_COMMAND_INVALID 503 -#define AMQP_CHANNEL_ERROR 504 -#define AMQP_UNEXPECTED_FRAME 505 -#define AMQP_RESOURCE_ERROR 506 -#define AMQP_NOT_ALLOWED 530 -#define AMQP_NOT_IMPLEMENTED 540 -#define AMQP_INTERNAL_ERROR 541 +#define AMQP_PROTOCOL_VERSION_MAJOR 0 /**< AMQP protocol version major */ +#define AMQP_PROTOCOL_VERSION_MINOR 9 /**< AMQP protocol version minor */ +#define AMQP_PROTOCOL_VERSION_REVISION 1 /**< AMQP protocol version revision */ +#define AMQP_PROTOCOL_PORT 5672 /**< Default AMQP Port */ +#define AMQP_FRAME_METHOD 1 /**< Constant: FRAME-METHOD */ +#define AMQP_FRAME_HEADER 2 /**< Constant: FRAME-HEADER */ +#define AMQP_FRAME_BODY 3 /**< Constant: FRAME-BODY */ +#define AMQP_FRAME_HEARTBEAT 8 /**< Constant: FRAME-HEARTBEAT */ +#define AMQP_FRAME_MIN_SIZE 4096 /**< Constant: FRAME-MIN-SIZE */ +#define AMQP_FRAME_END 206 /**< Constant: FRAME-END */ +#define AMQP_REPLY_SUCCESS 200 /**< Constant: REPLY-SUCCESS */ +#define AMQP_CONTENT_TOO_LARGE 311 /**< Constant: CONTENT-TOO-LARGE */ +#define AMQP_NO_ROUTE 312 /**< Constant: NO-ROUTE */ +#define AMQP_NO_CONSUMERS 313 /**< Constant: NO-CONSUMERS */ +#define AMQP_ACCESS_REFUSED 403 /**< Constant: ACCESS-REFUSED */ +#define AMQP_NOT_FOUND 404 /**< Constant: NOT-FOUND */ +#define AMQP_RESOURCE_LOCKED 405 /**< Constant: RESOURCE-LOCKED */ +#define AMQP_PRECONDITION_FAILED 406 /**< Constant: PRECONDITION-FAILED */ +#define AMQP_CONNECTION_FORCED 320 /**< Constant: CONNECTION-FORCED */ +#define AMQP_INVALID_PATH 402 /**< Constant: INVALID-PATH */ +#define AMQP_FRAME_ERROR 501 /**< Constant: FRAME-ERROR */ +#define AMQP_SYNTAX_ERROR 502 /**< Constant: SYNTAX-ERROR */ +#define AMQP_COMMAND_INVALID 503 /**< Constant: COMMAND-INVALID */ +#define AMQP_CHANNEL_ERROR 504 /**< Constant: CHANNEL-ERROR */ +#define AMQP_UNEXPECTED_FRAME 505 /**< Constant: UNEXPECTED-FRAME */ +#define AMQP_RESOURCE_ERROR 506 /**< Constant: RESOURCE-ERROR */ +#define AMQP_NOT_ALLOWED 530 /**< Constant: NOT-ALLOWED */ +#define AMQP_NOT_IMPLEMENTED 540 /**< Constant: NOT-IMPLEMENTED */ +#define AMQP_INTERNAL_ERROR 541 /**< Constant: INTERNAL-ERROR */ /* Function prototypes. */ +/** + * Get constant name string from constant + * + * @param [in] constantNumber constant to get the name of + * @returns string describing the constant. String is managed by + * the library and should not be free()'d by the program + */ AMQP_PUBLIC_FUNCTION char const * AMQP_CALL amqp_constant_name(int constantNumber); +/** + * Checks to see if a constant is a hard error + * + * A hard error occurs when something severe enough + * happens that the connection must be closed. + * + * @param [in] constantNumber the error constant + * @returns true if its a hard error, false otherwise + */ AMQP_PUBLIC_FUNCTION amqp_boolean_t AMQP_CALL amqp_constant_is_hard_error(int constantNumber); +/** + * Get method name string from method number + * + * @param [in] methodNumber the method number + * @returns method name string. String is managed by the library + * and should not be freed()'d by the program + */ AMQP_PUBLIC_FUNCTION char const * AMQP_CALL amqp_method_name(amqp_method_number_t methodNumber); +/** + * Check whether a method has content + * + * A method that has content will receive the method frame + * a properties frame, then 1 to N body frames + * + * @param [in] methodNumber the method number + * @returns true if method has content, false otherwise + */ AMQP_PUBLIC_FUNCTION amqp_boolean_t AMQP_CALL amqp_method_has_content(amqp_method_number_t methodNumber); +/** + * Decodes a method from AMQP wireformat + * + * @param [in] methodNumber the method number for the decoded parameter + * @param [in] pool the memory pool to allocate the decoded method from + * @param [in] encoded the encoded byte string buffer + * @param [out] decoded pointer to the decoded method struct + * @returns 0 on success, an error code otherwise + */ AMQP_PUBLIC_FUNCTION int AMQP_CALL amqp_decode_method(amqp_method_number_t methodNumber, @@ -96,6 +138,15 @@ AMQP_CALL amqp_decode_method(amqp_method_number_t methodNumber, amqp_bytes_t encoded, void **decoded); +/** + * Decodes a header frame properties structure from AMQP wireformat + * + * @param [in] class_id the class id for the decoded parameter + * @param [in] pool the memory pool to allocate the decoded properties from + * @param [in] encoded the encoded byte string buffer + * @param [out] decoded pointer to the decoded properties struct + * @returns 0 on success, an error code otherwise + */ AMQP_PUBLIC_FUNCTION int AMQP_CALL amqp_decode_properties(uint16_t class_id, @@ -103,12 +154,32 @@ AMQP_CALL amqp_decode_properties(uint16_t class_id, amqp_bytes_t encoded, void **decoded); +/** + * Encodes a method structure in AMQP wireformat + * + * @param [in] methodNumber the method number for the decoded parameter + * @param [in] decoded the method structure (e.g., amqp_connection_start_t) + * @param [in] encoded an allocated byte buffer for the encoded method + * structure to be written to. If the buffer isn't large enough + * to hold the encoded method, an error code will be returned. + * @returns 0 on success, an error code otherwise. + */ AMQP_PUBLIC_FUNCTION int AMQP_CALL amqp_encode_method(amqp_method_number_t methodNumber, void *decoded, amqp_bytes_t encoded); +/** + * Encodes a properties structure in AMQP wireformat + * + * @param [in] class_id the class id for the decoded parameter + * @param [in] decoded the properties structure (e.g., amqp_basic_properties_t) + * @param [in] encoded an allocated byte buffer for the encoded properties to written to. + * If the buffer isn't large enough to hold the encoded method, an + * an error code will be returned + * @returns 0 on success, an error code otherwise. + */ AMQP_PUBLIC_FUNCTION int AMQP_CALL amqp_encode_properties(uint16_t class_id, @@ -117,523 +188,813 @@ AMQP_CALL amqp_encode_properties(uint16_t class_id, /* Method field records. */ -#define AMQP_CONNECTION_START_METHOD ((amqp_method_number_t) 0x000A000A) /* 10, 10; 655370 */ +#define AMQP_CONNECTION_START_METHOD ((amqp_method_number_t) 0x000A000A) /**< connection.start method id @internal 10, 10; 655370 */ +/** connection.start method fields */ typedef struct amqp_connection_start_t_ { - uint8_t version_major; - uint8_t version_minor; - amqp_table_t server_properties; - amqp_bytes_t mechanisms; - amqp_bytes_t locales; + uint8_t version_major; /**< version-major */ + uint8_t version_minor; /**< version-minor */ + amqp_table_t server_properties; /**< server-properties */ + amqp_bytes_t mechanisms; /**< mechanisms */ + amqp_bytes_t locales; /**< locales */ } amqp_connection_start_t; -#define AMQP_CONNECTION_START_OK_METHOD ((amqp_method_number_t) 0x000A000B) /* 10, 11; 655371 */ +#define AMQP_CONNECTION_START_OK_METHOD ((amqp_method_number_t) 0x000A000B) /**< connection.start-ok method id @internal 10, 11; 655371 */ +/** connection.start-ok method fields */ typedef struct amqp_connection_start_ok_t_ { - amqp_table_t client_properties; - amqp_bytes_t mechanism; - amqp_bytes_t response; - amqp_bytes_t locale; + amqp_table_t client_properties; /**< client-properties */ + amqp_bytes_t mechanism; /**< mechanism */ + amqp_bytes_t response; /**< response */ + amqp_bytes_t locale; /**< locale */ } amqp_connection_start_ok_t; -#define AMQP_CONNECTION_SECURE_METHOD ((amqp_method_number_t) 0x000A0014) /* 10, 20; 655380 */ +#define AMQP_CONNECTION_SECURE_METHOD ((amqp_method_number_t) 0x000A0014) /**< connection.secure method id @internal 10, 20; 655380 */ +/** connection.secure method fields */ typedef struct amqp_connection_secure_t_ { - amqp_bytes_t challenge; + amqp_bytes_t challenge; /**< challenge */ } amqp_connection_secure_t; -#define AMQP_CONNECTION_SECURE_OK_METHOD ((amqp_method_number_t) 0x000A0015) /* 10, 21; 655381 */ +#define AMQP_CONNECTION_SECURE_OK_METHOD ((amqp_method_number_t) 0x000A0015) /**< connection.secure-ok method id @internal 10, 21; 655381 */ +/** connection.secure-ok method fields */ typedef struct amqp_connection_secure_ok_t_ { - amqp_bytes_t response; + amqp_bytes_t response; /**< response */ } amqp_connection_secure_ok_t; -#define AMQP_CONNECTION_TUNE_METHOD ((amqp_method_number_t) 0x000A001E) /* 10, 30; 655390 */ +#define AMQP_CONNECTION_TUNE_METHOD ((amqp_method_number_t) 0x000A001E) /**< connection.tune method id @internal 10, 30; 655390 */ +/** connection.tune method fields */ typedef struct amqp_connection_tune_t_ { - uint16_t channel_max; - uint32_t frame_max; - uint16_t heartbeat; + uint16_t channel_max; /**< channel-max */ + uint32_t frame_max; /**< frame-max */ + uint16_t heartbeat; /**< heartbeat */ } amqp_connection_tune_t; -#define AMQP_CONNECTION_TUNE_OK_METHOD ((amqp_method_number_t) 0x000A001F) /* 10, 31; 655391 */ +#define AMQP_CONNECTION_TUNE_OK_METHOD ((amqp_method_number_t) 0x000A001F) /**< connection.tune-ok method id @internal 10, 31; 655391 */ +/** connection.tune-ok method fields */ typedef struct amqp_connection_tune_ok_t_ { - uint16_t channel_max; - uint32_t frame_max; - uint16_t heartbeat; + uint16_t channel_max; /**< channel-max */ + uint32_t frame_max; /**< frame-max */ + uint16_t heartbeat; /**< heartbeat */ } amqp_connection_tune_ok_t; -#define AMQP_CONNECTION_OPEN_METHOD ((amqp_method_number_t) 0x000A0028) /* 10, 40; 655400 */ +#define AMQP_CONNECTION_OPEN_METHOD ((amqp_method_number_t) 0x000A0028) /**< connection.open method id @internal 10, 40; 655400 */ +/** connection.open method fields */ typedef struct amqp_connection_open_t_ { - amqp_bytes_t virtual_host; - amqp_bytes_t capabilities; - amqp_boolean_t insist; + amqp_bytes_t virtual_host; /**< virtual-host */ + amqp_bytes_t capabilities; /**< capabilities */ + amqp_boolean_t insist; /**< insist */ } amqp_connection_open_t; -#define AMQP_CONNECTION_OPEN_OK_METHOD ((amqp_method_number_t) 0x000A0029) /* 10, 41; 655401 */ +#define AMQP_CONNECTION_OPEN_OK_METHOD ((amqp_method_number_t) 0x000A0029) /**< connection.open-ok method id @internal 10, 41; 655401 */ +/** connection.open-ok method fields */ typedef struct amqp_connection_open_ok_t_ { - amqp_bytes_t known_hosts; + amqp_bytes_t known_hosts; /**< known-hosts */ } amqp_connection_open_ok_t; -#define AMQP_CONNECTION_CLOSE_METHOD ((amqp_method_number_t) 0x000A0032) /* 10, 50; 655410 */ +#define AMQP_CONNECTION_CLOSE_METHOD ((amqp_method_number_t) 0x000A0032) /**< connection.close method id @internal 10, 50; 655410 */ +/** connection.close method fields */ typedef struct amqp_connection_close_t_ { - uint16_t reply_code; - amqp_bytes_t reply_text; - uint16_t class_id; - uint16_t method_id; + uint16_t reply_code; /**< reply-code */ + amqp_bytes_t reply_text; /**< reply-text */ + uint16_t class_id; /**< class-id */ + uint16_t method_id; /**< method-id */ } amqp_connection_close_t; -#define AMQP_CONNECTION_CLOSE_OK_METHOD ((amqp_method_number_t) 0x000A0033) /* 10, 51; 655411 */ +#define AMQP_CONNECTION_CLOSE_OK_METHOD ((amqp_method_number_t) 0x000A0033) /**< connection.close-ok method id @internal 10, 51; 655411 */ +/** connection.close-ok method fields */ typedef struct amqp_connection_close_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_connection_close_ok_t; -#define AMQP_CONNECTION_BLOCKED_METHOD ((amqp_method_number_t) 0x000A003C) /* 10, 60; 655420 */ +#define AMQP_CONNECTION_BLOCKED_METHOD ((amqp_method_number_t) 0x000A003C) /**< connection.blocked method id @internal 10, 60; 655420 */ +/** connection.blocked method fields */ typedef struct amqp_connection_blocked_t_ { - amqp_bytes_t reason; + amqp_bytes_t reason; /**< reason */ } amqp_connection_blocked_t; -#define AMQP_CONNECTION_UNBLOCKED_METHOD ((amqp_method_number_t) 0x000A003D) /* 10, 61; 655421 */ +#define AMQP_CONNECTION_UNBLOCKED_METHOD ((amqp_method_number_t) 0x000A003D) /**< connection.unblocked method id @internal 10, 61; 655421 */ +/** connection.unblocked method fields */ typedef struct amqp_connection_unblocked_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_connection_unblocked_t; -#define AMQP_CHANNEL_OPEN_METHOD ((amqp_method_number_t) 0x0014000A) /* 20, 10; 1310730 */ +#define AMQP_CHANNEL_OPEN_METHOD ((amqp_method_number_t) 0x0014000A) /**< channel.open method id @internal 20, 10; 1310730 */ +/** channel.open method fields */ typedef struct amqp_channel_open_t_ { - amqp_bytes_t out_of_band; + amqp_bytes_t out_of_band; /**< out-of-band */ } amqp_channel_open_t; -#define AMQP_CHANNEL_OPEN_OK_METHOD ((amqp_method_number_t) 0x0014000B) /* 20, 11; 1310731 */ +#define AMQP_CHANNEL_OPEN_OK_METHOD ((amqp_method_number_t) 0x0014000B) /**< channel.open-ok method id @internal 20, 11; 1310731 */ +/** channel.open-ok method fields */ typedef struct amqp_channel_open_ok_t_ { - amqp_bytes_t channel_id; + amqp_bytes_t channel_id; /**< channel-id */ } amqp_channel_open_ok_t; -#define AMQP_CHANNEL_FLOW_METHOD ((amqp_method_number_t) 0x00140014) /* 20, 20; 1310740 */ +#define AMQP_CHANNEL_FLOW_METHOD ((amqp_method_number_t) 0x00140014) /**< channel.flow method id @internal 20, 20; 1310740 */ +/** channel.flow method fields */ typedef struct amqp_channel_flow_t_ { - amqp_boolean_t active; + amqp_boolean_t active; /**< active */ } amqp_channel_flow_t; -#define AMQP_CHANNEL_FLOW_OK_METHOD ((amqp_method_number_t) 0x00140015) /* 20, 21; 1310741 */ +#define AMQP_CHANNEL_FLOW_OK_METHOD ((amqp_method_number_t) 0x00140015) /**< channel.flow-ok method id @internal 20, 21; 1310741 */ +/** channel.flow-ok method fields */ typedef struct amqp_channel_flow_ok_t_ { - amqp_boolean_t active; + amqp_boolean_t active; /**< active */ } amqp_channel_flow_ok_t; -#define AMQP_CHANNEL_CLOSE_METHOD ((amqp_method_number_t) 0x00140028) /* 20, 40; 1310760 */ +#define AMQP_CHANNEL_CLOSE_METHOD ((amqp_method_number_t) 0x00140028) /**< channel.close method id @internal 20, 40; 1310760 */ +/** channel.close method fields */ typedef struct amqp_channel_close_t_ { - uint16_t reply_code; - amqp_bytes_t reply_text; - uint16_t class_id; - uint16_t method_id; + uint16_t reply_code; /**< reply-code */ + amqp_bytes_t reply_text; /**< reply-text */ + uint16_t class_id; /**< class-id */ + uint16_t method_id; /**< method-id */ } amqp_channel_close_t; -#define AMQP_CHANNEL_CLOSE_OK_METHOD ((amqp_method_number_t) 0x00140029) /* 20, 41; 1310761 */ +#define AMQP_CHANNEL_CLOSE_OK_METHOD ((amqp_method_number_t) 0x00140029) /**< channel.close-ok method id @internal 20, 41; 1310761 */ +/** channel.close-ok method fields */ typedef struct amqp_channel_close_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_channel_close_ok_t; -#define AMQP_ACCESS_REQUEST_METHOD ((amqp_method_number_t) 0x001E000A) /* 30, 10; 1966090 */ +#define AMQP_ACCESS_REQUEST_METHOD ((amqp_method_number_t) 0x001E000A) /**< access.request method id @internal 30, 10; 1966090 */ +/** access.request method fields */ typedef struct amqp_access_request_t_ { - amqp_bytes_t realm; - amqp_boolean_t exclusive; - amqp_boolean_t passive; - amqp_boolean_t active; - amqp_boolean_t write; - amqp_boolean_t read; + amqp_bytes_t realm; /**< realm */ + amqp_boolean_t exclusive; /**< exclusive */ + amqp_boolean_t passive; /**< passive */ + amqp_boolean_t active; /**< active */ + amqp_boolean_t write; /**< write */ + amqp_boolean_t read; /**< read */ } amqp_access_request_t; -#define AMQP_ACCESS_REQUEST_OK_METHOD ((amqp_method_number_t) 0x001E000B) /* 30, 11; 1966091 */ +#define AMQP_ACCESS_REQUEST_OK_METHOD ((amqp_method_number_t) 0x001E000B) /**< access.request-ok method id @internal 30, 11; 1966091 */ +/** access.request-ok method fields */ typedef struct amqp_access_request_ok_t_ { - uint16_t ticket; + uint16_t ticket; /**< ticket */ } amqp_access_request_ok_t; -#define AMQP_EXCHANGE_DECLARE_METHOD ((amqp_method_number_t) 0x0028000A) /* 40, 10; 2621450 */ +#define AMQP_EXCHANGE_DECLARE_METHOD ((amqp_method_number_t) 0x0028000A) /**< exchange.declare method id @internal 40, 10; 2621450 */ +/** exchange.declare method fields */ typedef struct amqp_exchange_declare_t_ { - uint16_t ticket; - amqp_bytes_t exchange; - amqp_bytes_t type; - amqp_boolean_t passive; - amqp_boolean_t durable; - amqp_boolean_t auto_delete; - amqp_boolean_t internal; - amqp_boolean_t nowait; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t type; /**< type */ + amqp_boolean_t passive; /**< passive */ + amqp_boolean_t durable; /**< durable */ + amqp_boolean_t auto_delete; /**< auto-delete */ + amqp_boolean_t internal; /**< internal */ + amqp_boolean_t nowait; /**< nowait */ + amqp_table_t arguments; /**< arguments */ } amqp_exchange_declare_t; -#define AMQP_EXCHANGE_DECLARE_OK_METHOD ((amqp_method_number_t) 0x0028000B) /* 40, 11; 2621451 */ +#define AMQP_EXCHANGE_DECLARE_OK_METHOD ((amqp_method_number_t) 0x0028000B) /**< exchange.declare-ok method id @internal 40, 11; 2621451 */ +/** exchange.declare-ok method fields */ typedef struct amqp_exchange_declare_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_exchange_declare_ok_t; -#define AMQP_EXCHANGE_DELETE_METHOD ((amqp_method_number_t) 0x00280014) /* 40, 20; 2621460 */ +#define AMQP_EXCHANGE_DELETE_METHOD ((amqp_method_number_t) 0x00280014) /**< exchange.delete method id @internal 40, 20; 2621460 */ +/** exchange.delete method fields */ typedef struct amqp_exchange_delete_t_ { - uint16_t ticket; - amqp_bytes_t exchange; - amqp_boolean_t if_unused; - amqp_boolean_t nowait; + uint16_t ticket; /**< ticket */ + amqp_bytes_t exchange; /**< exchange */ + amqp_boolean_t if_unused; /**< if-unused */ + amqp_boolean_t nowait; /**< nowait */ } amqp_exchange_delete_t; -#define AMQP_EXCHANGE_DELETE_OK_METHOD ((amqp_method_number_t) 0x00280015) /* 40, 21; 2621461 */ +#define AMQP_EXCHANGE_DELETE_OK_METHOD ((amqp_method_number_t) 0x00280015) /**< exchange.delete-ok method id @internal 40, 21; 2621461 */ +/** exchange.delete-ok method fields */ typedef struct amqp_exchange_delete_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_exchange_delete_ok_t; -#define AMQP_EXCHANGE_BIND_METHOD ((amqp_method_number_t) 0x0028001E) /* 40, 30; 2621470 */ +#define AMQP_EXCHANGE_BIND_METHOD ((amqp_method_number_t) 0x0028001E) /**< exchange.bind method id @internal 40, 30; 2621470 */ +/** exchange.bind method fields */ typedef struct amqp_exchange_bind_t_ { - uint16_t ticket; - amqp_bytes_t destination; - amqp_bytes_t source; - amqp_bytes_t routing_key; - amqp_boolean_t nowait; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t destination; /**< destination */ + amqp_bytes_t source; /**< source */ + amqp_bytes_t routing_key; /**< routing-key */ + amqp_boolean_t nowait; /**< nowait */ + amqp_table_t arguments; /**< arguments */ } amqp_exchange_bind_t; -#define AMQP_EXCHANGE_BIND_OK_METHOD ((amqp_method_number_t) 0x0028001F) /* 40, 31; 2621471 */ +#define AMQP_EXCHANGE_BIND_OK_METHOD ((amqp_method_number_t) 0x0028001F) /**< exchange.bind-ok method id @internal 40, 31; 2621471 */ +/** exchange.bind-ok method fields */ typedef struct amqp_exchange_bind_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_exchange_bind_ok_t; -#define AMQP_EXCHANGE_UNBIND_METHOD ((amqp_method_number_t) 0x00280028) /* 40, 40; 2621480 */ +#define AMQP_EXCHANGE_UNBIND_METHOD ((amqp_method_number_t) 0x00280028) /**< exchange.unbind method id @internal 40, 40; 2621480 */ +/** exchange.unbind method fields */ typedef struct amqp_exchange_unbind_t_ { - uint16_t ticket; - amqp_bytes_t destination; - amqp_bytes_t source; - amqp_bytes_t routing_key; - amqp_boolean_t nowait; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t destination; /**< destination */ + amqp_bytes_t source; /**< source */ + amqp_bytes_t routing_key; /**< routing-key */ + amqp_boolean_t nowait; /**< nowait */ + amqp_table_t arguments; /**< arguments */ } amqp_exchange_unbind_t; -#define AMQP_EXCHANGE_UNBIND_OK_METHOD ((amqp_method_number_t) 0x00280033) /* 40, 51; 2621491 */ +#define AMQP_EXCHANGE_UNBIND_OK_METHOD ((amqp_method_number_t) 0x00280033) /**< exchange.unbind-ok method id @internal 40, 51; 2621491 */ +/** exchange.unbind-ok method fields */ typedef struct amqp_exchange_unbind_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_exchange_unbind_ok_t; -#define AMQP_QUEUE_DECLARE_METHOD ((amqp_method_number_t) 0x0032000A) /* 50, 10; 3276810 */ +#define AMQP_QUEUE_DECLARE_METHOD ((amqp_method_number_t) 0x0032000A) /**< queue.declare method id @internal 50, 10; 3276810 */ +/** queue.declare method fields */ typedef struct amqp_queue_declare_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_boolean_t passive; - amqp_boolean_t durable; - amqp_boolean_t exclusive; - amqp_boolean_t auto_delete; - amqp_boolean_t nowait; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_boolean_t passive; /**< passive */ + amqp_boolean_t durable; /**< durable */ + amqp_boolean_t exclusive; /**< exclusive */ + amqp_boolean_t auto_delete; /**< auto-delete */ + amqp_boolean_t nowait; /**< nowait */ + amqp_table_t arguments; /**< arguments */ } amqp_queue_declare_t; -#define AMQP_QUEUE_DECLARE_OK_METHOD ((amqp_method_number_t) 0x0032000B) /* 50, 11; 3276811 */ +#define AMQP_QUEUE_DECLARE_OK_METHOD ((amqp_method_number_t) 0x0032000B) /**< queue.declare-ok method id @internal 50, 11; 3276811 */ +/** queue.declare-ok method fields */ typedef struct amqp_queue_declare_ok_t_ { - amqp_bytes_t queue; - uint32_t message_count; - uint32_t consumer_count; + amqp_bytes_t queue; /**< queue */ + uint32_t message_count; /**< message-count */ + uint32_t consumer_count; /**< consumer-count */ } amqp_queue_declare_ok_t; -#define AMQP_QUEUE_BIND_METHOD ((amqp_method_number_t) 0x00320014) /* 50, 20; 3276820 */ +#define AMQP_QUEUE_BIND_METHOD ((amqp_method_number_t) 0x00320014) /**< queue.bind method id @internal 50, 20; 3276820 */ +/** queue.bind method fields */ typedef struct amqp_queue_bind_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_bytes_t exchange; - amqp_bytes_t routing_key; - amqp_boolean_t nowait; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t routing_key; /**< routing-key */ + amqp_boolean_t nowait; /**< nowait */ + amqp_table_t arguments; /**< arguments */ } amqp_queue_bind_t; -#define AMQP_QUEUE_BIND_OK_METHOD ((amqp_method_number_t) 0x00320015) /* 50, 21; 3276821 */ +#define AMQP_QUEUE_BIND_OK_METHOD ((amqp_method_number_t) 0x00320015) /**< queue.bind-ok method id @internal 50, 21; 3276821 */ +/** queue.bind-ok method fields */ typedef struct amqp_queue_bind_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_queue_bind_ok_t; -#define AMQP_QUEUE_PURGE_METHOD ((amqp_method_number_t) 0x0032001E) /* 50, 30; 3276830 */ +#define AMQP_QUEUE_PURGE_METHOD ((amqp_method_number_t) 0x0032001E) /**< queue.purge method id @internal 50, 30; 3276830 */ +/** queue.purge method fields */ typedef struct amqp_queue_purge_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_boolean_t nowait; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_boolean_t nowait; /**< nowait */ } amqp_queue_purge_t; -#define AMQP_QUEUE_PURGE_OK_METHOD ((amqp_method_number_t) 0x0032001F) /* 50, 31; 3276831 */ +#define AMQP_QUEUE_PURGE_OK_METHOD ((amqp_method_number_t) 0x0032001F) /**< queue.purge-ok method id @internal 50, 31; 3276831 */ +/** queue.purge-ok method fields */ typedef struct amqp_queue_purge_ok_t_ { - uint32_t message_count; + uint32_t message_count; /**< message-count */ } amqp_queue_purge_ok_t; -#define AMQP_QUEUE_DELETE_METHOD ((amqp_method_number_t) 0x00320028) /* 50, 40; 3276840 */ +#define AMQP_QUEUE_DELETE_METHOD ((amqp_method_number_t) 0x00320028) /**< queue.delete method id @internal 50, 40; 3276840 */ +/** queue.delete method fields */ typedef struct amqp_queue_delete_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_boolean_t if_unused; - amqp_boolean_t if_empty; - amqp_boolean_t nowait; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_boolean_t if_unused; /**< if-unused */ + amqp_boolean_t if_empty; /**< if-empty */ + amqp_boolean_t nowait; /**< nowait */ } amqp_queue_delete_t; -#define AMQP_QUEUE_DELETE_OK_METHOD ((amqp_method_number_t) 0x00320029) /* 50, 41; 3276841 */ +#define AMQP_QUEUE_DELETE_OK_METHOD ((amqp_method_number_t) 0x00320029) /**< queue.delete-ok method id @internal 50, 41; 3276841 */ +/** queue.delete-ok method fields */ typedef struct amqp_queue_delete_ok_t_ { - uint32_t message_count; + uint32_t message_count; /**< message-count */ } amqp_queue_delete_ok_t; -#define AMQP_QUEUE_UNBIND_METHOD ((amqp_method_number_t) 0x00320032) /* 50, 50; 3276850 */ +#define AMQP_QUEUE_UNBIND_METHOD ((amqp_method_number_t) 0x00320032) /**< queue.unbind method id @internal 50, 50; 3276850 */ +/** queue.unbind method fields */ typedef struct amqp_queue_unbind_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_bytes_t exchange; - amqp_bytes_t routing_key; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t routing_key; /**< routing-key */ + amqp_table_t arguments; /**< arguments */ } amqp_queue_unbind_t; -#define AMQP_QUEUE_UNBIND_OK_METHOD ((amqp_method_number_t) 0x00320033) /* 50, 51; 3276851 */ +#define AMQP_QUEUE_UNBIND_OK_METHOD ((amqp_method_number_t) 0x00320033) /**< queue.unbind-ok method id @internal 50, 51; 3276851 */ +/** queue.unbind-ok method fields */ typedef struct amqp_queue_unbind_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_queue_unbind_ok_t; -#define AMQP_BASIC_QOS_METHOD ((amqp_method_number_t) 0x003C000A) /* 60, 10; 3932170 */ +#define AMQP_BASIC_QOS_METHOD ((amqp_method_number_t) 0x003C000A) /**< basic.qos method id @internal 60, 10; 3932170 */ +/** basic.qos method fields */ typedef struct amqp_basic_qos_t_ { - uint32_t prefetch_size; - uint16_t prefetch_count; - amqp_boolean_t global; + uint32_t prefetch_size; /**< prefetch-size */ + uint16_t prefetch_count; /**< prefetch-count */ + amqp_boolean_t global; /**< global */ } amqp_basic_qos_t; -#define AMQP_BASIC_QOS_OK_METHOD ((amqp_method_number_t) 0x003C000B) /* 60, 11; 3932171 */ +#define AMQP_BASIC_QOS_OK_METHOD ((amqp_method_number_t) 0x003C000B) /**< basic.qos-ok method id @internal 60, 11; 3932171 */ +/** basic.qos-ok method fields */ typedef struct amqp_basic_qos_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_basic_qos_ok_t; -#define AMQP_BASIC_CONSUME_METHOD ((amqp_method_number_t) 0x003C0014) /* 60, 20; 3932180 */ +#define AMQP_BASIC_CONSUME_METHOD ((amqp_method_number_t) 0x003C0014) /**< basic.consume method id @internal 60, 20; 3932180 */ +/** basic.consume method fields */ typedef struct amqp_basic_consume_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_bytes_t consumer_tag; - amqp_boolean_t no_local; - amqp_boolean_t no_ack; - amqp_boolean_t exclusive; - amqp_boolean_t nowait; - amqp_table_t arguments; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_bytes_t consumer_tag; /**< consumer-tag */ + amqp_boolean_t no_local; /**< no-local */ + amqp_boolean_t no_ack; /**< no-ack */ + amqp_boolean_t exclusive; /**< exclusive */ + amqp_boolean_t nowait; /**< nowait */ + amqp_table_t arguments; /**< arguments */ } amqp_basic_consume_t; -#define AMQP_BASIC_CONSUME_OK_METHOD ((amqp_method_number_t) 0x003C0015) /* 60, 21; 3932181 */ +#define AMQP_BASIC_CONSUME_OK_METHOD ((amqp_method_number_t) 0x003C0015) /**< basic.consume-ok method id @internal 60, 21; 3932181 */ +/** basic.consume-ok method fields */ typedef struct amqp_basic_consume_ok_t_ { - amqp_bytes_t consumer_tag; + amqp_bytes_t consumer_tag; /**< consumer-tag */ } amqp_basic_consume_ok_t; -#define AMQP_BASIC_CANCEL_METHOD ((amqp_method_number_t) 0x003C001E) /* 60, 30; 3932190 */ +#define AMQP_BASIC_CANCEL_METHOD ((amqp_method_number_t) 0x003C001E) /**< basic.cancel method id @internal 60, 30; 3932190 */ +/** basic.cancel method fields */ typedef struct amqp_basic_cancel_t_ { - amqp_bytes_t consumer_tag; - amqp_boolean_t nowait; + amqp_bytes_t consumer_tag; /**< consumer-tag */ + amqp_boolean_t nowait; /**< nowait */ } amqp_basic_cancel_t; -#define AMQP_BASIC_CANCEL_OK_METHOD ((amqp_method_number_t) 0x003C001F) /* 60, 31; 3932191 */ +#define AMQP_BASIC_CANCEL_OK_METHOD ((amqp_method_number_t) 0x003C001F) /**< basic.cancel-ok method id @internal 60, 31; 3932191 */ +/** basic.cancel-ok method fields */ typedef struct amqp_basic_cancel_ok_t_ { - amqp_bytes_t consumer_tag; + amqp_bytes_t consumer_tag; /**< consumer-tag */ } amqp_basic_cancel_ok_t; -#define AMQP_BASIC_PUBLISH_METHOD ((amqp_method_number_t) 0x003C0028) /* 60, 40; 3932200 */ +#define AMQP_BASIC_PUBLISH_METHOD ((amqp_method_number_t) 0x003C0028) /**< basic.publish method id @internal 60, 40; 3932200 */ +/** basic.publish method fields */ typedef struct amqp_basic_publish_t_ { - uint16_t ticket; - amqp_bytes_t exchange; - amqp_bytes_t routing_key; - amqp_boolean_t mandatory; - amqp_boolean_t immediate; + uint16_t ticket; /**< ticket */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t routing_key; /**< routing-key */ + amqp_boolean_t mandatory; /**< mandatory */ + amqp_boolean_t immediate; /**< immediate */ } amqp_basic_publish_t; -#define AMQP_BASIC_RETURN_METHOD ((amqp_method_number_t) 0x003C0032) /* 60, 50; 3932210 */ +#define AMQP_BASIC_RETURN_METHOD ((amqp_method_number_t) 0x003C0032) /**< basic.return method id @internal 60, 50; 3932210 */ +/** basic.return method fields */ typedef struct amqp_basic_return_t_ { - uint16_t reply_code; - amqp_bytes_t reply_text; - amqp_bytes_t exchange; - amqp_bytes_t routing_key; + uint16_t reply_code; /**< reply-code */ + amqp_bytes_t reply_text; /**< reply-text */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t routing_key; /**< routing-key */ } amqp_basic_return_t; -#define AMQP_BASIC_DELIVER_METHOD ((amqp_method_number_t) 0x003C003C) /* 60, 60; 3932220 */ +#define AMQP_BASIC_DELIVER_METHOD ((amqp_method_number_t) 0x003C003C) /**< basic.deliver method id @internal 60, 60; 3932220 */ +/** basic.deliver method fields */ typedef struct amqp_basic_deliver_t_ { - amqp_bytes_t consumer_tag; - uint64_t delivery_tag; - amqp_boolean_t redelivered; - amqp_bytes_t exchange; - amqp_bytes_t routing_key; + amqp_bytes_t consumer_tag; /**< consumer-tag */ + uint64_t delivery_tag; /**< delivery-tag */ + amqp_boolean_t redelivered; /**< redelivered */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t routing_key; /**< routing-key */ } amqp_basic_deliver_t; -#define AMQP_BASIC_GET_METHOD ((amqp_method_number_t) 0x003C0046) /* 60, 70; 3932230 */ +#define AMQP_BASIC_GET_METHOD ((amqp_method_number_t) 0x003C0046) /**< basic.get method id @internal 60, 70; 3932230 */ +/** basic.get method fields */ typedef struct amqp_basic_get_t_ { - uint16_t ticket; - amqp_bytes_t queue; - amqp_boolean_t no_ack; + uint16_t ticket; /**< ticket */ + amqp_bytes_t queue; /**< queue */ + amqp_boolean_t no_ack; /**< no-ack */ } amqp_basic_get_t; -#define AMQP_BASIC_GET_OK_METHOD ((amqp_method_number_t) 0x003C0047) /* 60, 71; 3932231 */ +#define AMQP_BASIC_GET_OK_METHOD ((amqp_method_number_t) 0x003C0047) /**< basic.get-ok method id @internal 60, 71; 3932231 */ +/** basic.get-ok method fields */ typedef struct amqp_basic_get_ok_t_ { - uint64_t delivery_tag; - amqp_boolean_t redelivered; - amqp_bytes_t exchange; - amqp_bytes_t routing_key; - uint32_t message_count; + uint64_t delivery_tag; /**< delivery-tag */ + amqp_boolean_t redelivered; /**< redelivered */ + amqp_bytes_t exchange; /**< exchange */ + amqp_bytes_t routing_key; /**< routing-key */ + uint32_t message_count; /**< message-count */ } amqp_basic_get_ok_t; -#define AMQP_BASIC_GET_EMPTY_METHOD ((amqp_method_number_t) 0x003C0048) /* 60, 72; 3932232 */ +#define AMQP_BASIC_GET_EMPTY_METHOD ((amqp_method_number_t) 0x003C0048) /**< basic.get-empty method id @internal 60, 72; 3932232 */ +/** basic.get-empty method fields */ typedef struct amqp_basic_get_empty_t_ { - amqp_bytes_t cluster_id; + amqp_bytes_t cluster_id; /**< cluster-id */ } amqp_basic_get_empty_t; -#define AMQP_BASIC_ACK_METHOD ((amqp_method_number_t) 0x003C0050) /* 60, 80; 3932240 */ +#define AMQP_BASIC_ACK_METHOD ((amqp_method_number_t) 0x003C0050) /**< basic.ack method id @internal 60, 80; 3932240 */ +/** basic.ack method fields */ typedef struct amqp_basic_ack_t_ { - uint64_t delivery_tag; - amqp_boolean_t multiple; + uint64_t delivery_tag; /**< delivery-tag */ + amqp_boolean_t multiple; /**< multiple */ } amqp_basic_ack_t; -#define AMQP_BASIC_REJECT_METHOD ((amqp_method_number_t) 0x003C005A) /* 60, 90; 3932250 */ +#define AMQP_BASIC_REJECT_METHOD ((amqp_method_number_t) 0x003C005A) /**< basic.reject method id @internal 60, 90; 3932250 */ +/** basic.reject method fields */ typedef struct amqp_basic_reject_t_ { - uint64_t delivery_tag; - amqp_boolean_t requeue; + uint64_t delivery_tag; /**< delivery-tag */ + amqp_boolean_t requeue; /**< requeue */ } amqp_basic_reject_t; -#define AMQP_BASIC_RECOVER_ASYNC_METHOD ((amqp_method_number_t) 0x003C0064) /* 60, 100; 3932260 */ +#define AMQP_BASIC_RECOVER_ASYNC_METHOD ((amqp_method_number_t) 0x003C0064) /**< basic.recover-async method id @internal 60, 100; 3932260 */ +/** basic.recover-async method fields */ typedef struct amqp_basic_recover_async_t_ { - amqp_boolean_t requeue; + amqp_boolean_t requeue; /**< requeue */ } amqp_basic_recover_async_t; -#define AMQP_BASIC_RECOVER_METHOD ((amqp_method_number_t) 0x003C006E) /* 60, 110; 3932270 */ +#define AMQP_BASIC_RECOVER_METHOD ((amqp_method_number_t) 0x003C006E) /**< basic.recover method id @internal 60, 110; 3932270 */ +/** basic.recover method fields */ typedef struct amqp_basic_recover_t_ { - amqp_boolean_t requeue; + amqp_boolean_t requeue; /**< requeue */ } amqp_basic_recover_t; -#define AMQP_BASIC_RECOVER_OK_METHOD ((amqp_method_number_t) 0x003C006F) /* 60, 111; 3932271 */ +#define AMQP_BASIC_RECOVER_OK_METHOD ((amqp_method_number_t) 0x003C006F) /**< basic.recover-ok method id @internal 60, 111; 3932271 */ +/** basic.recover-ok method fields */ typedef struct amqp_basic_recover_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_basic_recover_ok_t; -#define AMQP_BASIC_NACK_METHOD ((amqp_method_number_t) 0x003C0078) /* 60, 120; 3932280 */ +#define AMQP_BASIC_NACK_METHOD ((amqp_method_number_t) 0x003C0078) /**< basic.nack method id @internal 60, 120; 3932280 */ +/** basic.nack method fields */ typedef struct amqp_basic_nack_t_ { - uint64_t delivery_tag; - amqp_boolean_t multiple; - amqp_boolean_t requeue; + uint64_t delivery_tag; /**< delivery-tag */ + amqp_boolean_t multiple; /**< multiple */ + amqp_boolean_t requeue; /**< requeue */ } amqp_basic_nack_t; -#define AMQP_TX_SELECT_METHOD ((amqp_method_number_t) 0x005A000A) /* 90, 10; 5898250 */ +#define AMQP_TX_SELECT_METHOD ((amqp_method_number_t) 0x005A000A) /**< tx.select method id @internal 90, 10; 5898250 */ +/** tx.select method fields */ typedef struct amqp_tx_select_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_select_t; -#define AMQP_TX_SELECT_OK_METHOD ((amqp_method_number_t) 0x005A000B) /* 90, 11; 5898251 */ +#define AMQP_TX_SELECT_OK_METHOD ((amqp_method_number_t) 0x005A000B) /**< tx.select-ok method id @internal 90, 11; 5898251 */ +/** tx.select-ok method fields */ typedef struct amqp_tx_select_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_select_ok_t; -#define AMQP_TX_COMMIT_METHOD ((amqp_method_number_t) 0x005A0014) /* 90, 20; 5898260 */ +#define AMQP_TX_COMMIT_METHOD ((amqp_method_number_t) 0x005A0014) /**< tx.commit method id @internal 90, 20; 5898260 */ +/** tx.commit method fields */ typedef struct amqp_tx_commit_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_commit_t; -#define AMQP_TX_COMMIT_OK_METHOD ((amqp_method_number_t) 0x005A0015) /* 90, 21; 5898261 */ +#define AMQP_TX_COMMIT_OK_METHOD ((amqp_method_number_t) 0x005A0015) /**< tx.commit-ok method id @internal 90, 21; 5898261 */ +/** tx.commit-ok method fields */ typedef struct amqp_tx_commit_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_commit_ok_t; -#define AMQP_TX_ROLLBACK_METHOD ((amqp_method_number_t) 0x005A001E) /* 90, 30; 5898270 */ +#define AMQP_TX_ROLLBACK_METHOD ((amqp_method_number_t) 0x005A001E) /**< tx.rollback method id @internal 90, 30; 5898270 */ +/** tx.rollback method fields */ typedef struct amqp_tx_rollback_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_rollback_t; -#define AMQP_TX_ROLLBACK_OK_METHOD ((amqp_method_number_t) 0x005A001F) /* 90, 31; 5898271 */ +#define AMQP_TX_ROLLBACK_OK_METHOD ((amqp_method_number_t) 0x005A001F) /**< tx.rollback-ok method id @internal 90, 31; 5898271 */ +/** tx.rollback-ok method fields */ typedef struct amqp_tx_rollback_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_rollback_ok_t; -#define AMQP_CONFIRM_SELECT_METHOD ((amqp_method_number_t) 0x0055000A) /* 85, 10; 5570570 */ +#define AMQP_CONFIRM_SELECT_METHOD ((amqp_method_number_t) 0x0055000A) /**< confirm.select method id @internal 85, 10; 5570570 */ +/** confirm.select method fields */ typedef struct amqp_confirm_select_t_ { - amqp_boolean_t nowait; + amqp_boolean_t nowait; /**< nowait */ } amqp_confirm_select_t; -#define AMQP_CONFIRM_SELECT_OK_METHOD ((amqp_method_number_t) 0x0055000B) /* 85, 11; 5570571 */ +#define AMQP_CONFIRM_SELECT_OK_METHOD ((amqp_method_number_t) 0x0055000B) /**< confirm.select-ok method id @internal 85, 11; 5570571 */ +/** confirm.select-ok method fields */ typedef struct amqp_confirm_select_ok_t_ { - char dummy; /* Dummy field to avoid empty struct */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_confirm_select_ok_t; /* Class property records. */ -#define AMQP_CONNECTION_CLASS (0x000A) /* 10 */ +#define AMQP_CONNECTION_CLASS (0x000A) /**< connection class id @internal 10 */ +/** connection class properties */ typedef struct amqp_connection_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_connection_properties_t; -#define AMQP_CHANNEL_CLASS (0x0014) /* 20 */ +#define AMQP_CHANNEL_CLASS (0x0014) /**< channel class id @internal 20 */ +/** channel class properties */ typedef struct amqp_channel_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_channel_properties_t; -#define AMQP_ACCESS_CLASS (0x001E) /* 30 */ +#define AMQP_ACCESS_CLASS (0x001E) /**< access class id @internal 30 */ +/** access class properties */ typedef struct amqp_access_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_access_properties_t; -#define AMQP_EXCHANGE_CLASS (0x0028) /* 40 */ +#define AMQP_EXCHANGE_CLASS (0x0028) /**< exchange class id @internal 40 */ +/** exchange class properties */ typedef struct amqp_exchange_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_exchange_properties_t; -#define AMQP_QUEUE_CLASS (0x0032) /* 50 */ +#define AMQP_QUEUE_CLASS (0x0032) /**< queue class id @internal 50 */ +/** queue class properties */ typedef struct amqp_queue_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_queue_properties_t; -#define AMQP_BASIC_CLASS (0x003C) /* 60 */ -#define AMQP_BASIC_CONTENT_TYPE_FLAG (1 << 15) -#define AMQP_BASIC_CONTENT_ENCODING_FLAG (1 << 14) -#define AMQP_BASIC_HEADERS_FLAG (1 << 13) -#define AMQP_BASIC_DELIVERY_MODE_FLAG (1 << 12) -#define AMQP_BASIC_PRIORITY_FLAG (1 << 11) -#define AMQP_BASIC_CORRELATION_ID_FLAG (1 << 10) -#define AMQP_BASIC_REPLY_TO_FLAG (1 << 9) -#define AMQP_BASIC_EXPIRATION_FLAG (1 << 8) -#define AMQP_BASIC_MESSAGE_ID_FLAG (1 << 7) -#define AMQP_BASIC_TIMESTAMP_FLAG (1 << 6) -#define AMQP_BASIC_TYPE_FLAG (1 << 5) -#define AMQP_BASIC_USER_ID_FLAG (1 << 4) -#define AMQP_BASIC_APP_ID_FLAG (1 << 3) -#define AMQP_BASIC_CLUSTER_ID_FLAG (1 << 2) +#define AMQP_BASIC_CLASS (0x003C) /**< basic class id @internal 60 */ +#define AMQP_BASIC_CONTENT_TYPE_FLAG (1 << 15) /**< basic.content-type property flag */ +#define AMQP_BASIC_CONTENT_ENCODING_FLAG (1 << 14) /**< basic.content-encoding property flag */ +#define AMQP_BASIC_HEADERS_FLAG (1 << 13) /**< basic.headers property flag */ +#define AMQP_BASIC_DELIVERY_MODE_FLAG (1 << 12) /**< basic.delivery-mode property flag */ +#define AMQP_BASIC_PRIORITY_FLAG (1 << 11) /**< basic.priority property flag */ +#define AMQP_BASIC_CORRELATION_ID_FLAG (1 << 10) /**< basic.correlation-id property flag */ +#define AMQP_BASIC_REPLY_TO_FLAG (1 << 9) /**< basic.reply-to property flag */ +#define AMQP_BASIC_EXPIRATION_FLAG (1 << 8) /**< basic.expiration property flag */ +#define AMQP_BASIC_MESSAGE_ID_FLAG (1 << 7) /**< basic.message-id property flag */ +#define AMQP_BASIC_TIMESTAMP_FLAG (1 << 6) /**< basic.timestamp property flag */ +#define AMQP_BASIC_TYPE_FLAG (1 << 5) /**< basic.type property flag */ +#define AMQP_BASIC_USER_ID_FLAG (1 << 4) /**< basic.user-id property flag */ +#define AMQP_BASIC_APP_ID_FLAG (1 << 3) /**< basic.app-id property flag */ +#define AMQP_BASIC_CLUSTER_ID_FLAG (1 << 2) /**< basic.cluster-id property flag */ +/** basic class properties */ typedef struct amqp_basic_properties_t_ { - amqp_flags_t _flags; - amqp_bytes_t content_type; - amqp_bytes_t content_encoding; - amqp_table_t headers; - uint8_t delivery_mode; - uint8_t priority; - amqp_bytes_t correlation_id; - amqp_bytes_t reply_to; - amqp_bytes_t expiration; - amqp_bytes_t message_id; - uint64_t timestamp; - amqp_bytes_t type; - amqp_bytes_t user_id; - amqp_bytes_t app_id; - amqp_bytes_t cluster_id; + amqp_flags_t _flags; /**< bit-mask of set fields */ + amqp_bytes_t content_type; /**< content-type */ + amqp_bytes_t content_encoding; /**< content-encoding */ + amqp_table_t headers; /**< headers */ + uint8_t delivery_mode; /**< delivery-mode */ + uint8_t priority; /**< priority */ + amqp_bytes_t correlation_id; /**< correlation-id */ + amqp_bytes_t reply_to; /**< reply-to */ + amqp_bytes_t expiration; /**< expiration */ + amqp_bytes_t message_id; /**< message-id */ + uint64_t timestamp; /**< timestamp */ + amqp_bytes_t type; /**< type */ + amqp_bytes_t user_id; /**< user-id */ + amqp_bytes_t app_id; /**< app-id */ + amqp_bytes_t cluster_id; /**< cluster-id */ } amqp_basic_properties_t; -#define AMQP_TX_CLASS (0x005A) /* 90 */ +#define AMQP_TX_CLASS (0x005A) /**< tx class id @internal 90 */ +/** tx class properties */ typedef struct amqp_tx_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_tx_properties_t; -#define AMQP_CONFIRM_CLASS (0x0055) /* 85 */ +#define AMQP_CONFIRM_CLASS (0x0055) /**< confirm class id @internal 85 */ +/** confirm class properties */ typedef struct amqp_confirm_properties_t_ { - amqp_flags_t _flags; - char dummy; /* Dummy field to avoid empty struct */ + amqp_flags_t _flags; /**< bit-mask of set fields */ + char dummy; /**< Dummy field to avoid empty struct */ } amqp_confirm_properties_t; /* API functions for methods */ -AMQP_PUBLIC_FUNCTION amqp_channel_open_ok_t * AMQP_CALL amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel); -AMQP_PUBLIC_FUNCTION amqp_channel_flow_ok_t * AMQP_CALL amqp_channel_flow(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t active); -AMQP_PUBLIC_FUNCTION amqp_exchange_declare_ok_t * AMQP_CALL amqp_exchange_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_exchange_delete_ok_t * AMQP_CALL amqp_exchange_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_boolean_t if_unused); -AMQP_PUBLIC_FUNCTION amqp_exchange_bind_ok_t * AMQP_CALL amqp_exchange_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_exchange_unbind_ok_t * AMQP_CALL amqp_exchange_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_queue_declare_ok_t * AMQP_CALL amqp_queue_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive, amqp_boolean_t auto_delete, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_queue_bind_ok_t * AMQP_CALL amqp_queue_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_queue_purge_ok_t * AMQP_CALL amqp_queue_purge(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue); -AMQP_PUBLIC_FUNCTION amqp_queue_delete_ok_t * AMQP_CALL amqp_queue_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t if_unused, amqp_boolean_t if_empty); -AMQP_PUBLIC_FUNCTION amqp_queue_unbind_ok_t * AMQP_CALL amqp_queue_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_basic_qos_ok_t * AMQP_CALL amqp_basic_qos(amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global); -AMQP_PUBLIC_FUNCTION amqp_basic_consume_ok_t * AMQP_CALL amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments); -AMQP_PUBLIC_FUNCTION amqp_basic_cancel_ok_t * AMQP_CALL amqp_basic_cancel(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t consumer_tag); -AMQP_PUBLIC_FUNCTION amqp_basic_recover_ok_t * AMQP_CALL amqp_basic_recover(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t requeue); -AMQP_PUBLIC_FUNCTION amqp_tx_select_ok_t * AMQP_CALL amqp_tx_select(amqp_connection_state_t state, amqp_channel_t channel); -AMQP_PUBLIC_FUNCTION amqp_tx_commit_ok_t * AMQP_CALL amqp_tx_commit(amqp_connection_state_t state, amqp_channel_t channel); -AMQP_PUBLIC_FUNCTION amqp_tx_rollback_ok_t * AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state, amqp_channel_t channel); -AMQP_PUBLIC_FUNCTION amqp_confirm_select_ok_t * AMQP_CALL amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel); +/** + * amqp_channel_open + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_channel_open_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_channel_open_ok_t * +AMQP_CALL amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel); +/** + * amqp_channel_flow + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] active active + * @returns amqp_channel_flow_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_channel_flow_ok_t * +AMQP_CALL amqp_channel_flow(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t active); +/** + * amqp_exchange_declare + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] exchange exchange + * @param [in] type type + * @param [in] passive passive + * @param [in] durable durable + * @param [in] auto_delete auto_delete + * @param [in] internal internal + * @param [in] arguments arguments + * @returns amqp_exchange_declare_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_declare_ok_t * +AMQP_CALL amqp_exchange_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t auto_delete, amqp_boolean_t internal, amqp_table_t arguments); +/** + * amqp_exchange_delete + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] exchange exchange + * @param [in] if_unused if_unused + * @returns amqp_exchange_delete_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_delete_ok_t * +AMQP_CALL amqp_exchange_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_boolean_t if_unused); +/** + * amqp_exchange_bind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] destination destination + * @param [in] source source + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_exchange_bind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_bind_ok_t * +AMQP_CALL amqp_exchange_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments); +/** + * amqp_exchange_unbind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] destination destination + * @param [in] source source + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_exchange_unbind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_exchange_unbind_ok_t * +AMQP_CALL amqp_exchange_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t destination, amqp_bytes_t source, amqp_bytes_t routing_key, amqp_table_t arguments); +/** + * amqp_queue_declare + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] passive passive + * @param [in] durable durable + * @param [in] exclusive exclusive + * @param [in] auto_delete auto_delete + * @param [in] arguments arguments + * @returns amqp_queue_declare_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_declare_ok_t * +AMQP_CALL amqp_queue_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive, amqp_boolean_t auto_delete, amqp_table_t arguments); +/** + * amqp_queue_bind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] exchange exchange + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_queue_bind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_bind_ok_t * +AMQP_CALL amqp_queue_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments); +/** + * amqp_queue_purge + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @returns amqp_queue_purge_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_purge_ok_t * +AMQP_CALL amqp_queue_purge(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue); +/** + * amqp_queue_delete + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] if_unused if_unused + * @param [in] if_empty if_empty + * @returns amqp_queue_delete_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_delete_ok_t * +AMQP_CALL amqp_queue_delete(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t if_unused, amqp_boolean_t if_empty); +/** + * amqp_queue_unbind + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] exchange exchange + * @param [in] routing_key routing_key + * @param [in] arguments arguments + * @returns amqp_queue_unbind_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_queue_unbind_ok_t * +AMQP_CALL amqp_queue_unbind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments); +/** + * amqp_basic_qos + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] prefetch_size prefetch_size + * @param [in] prefetch_count prefetch_count + * @param [in] global global + * @returns amqp_basic_qos_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_qos_ok_t * +AMQP_CALL amqp_basic_qos(amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global); +/** + * amqp_basic_consume + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] queue queue + * @param [in] consumer_tag consumer_tag + * @param [in] no_local no_local + * @param [in] no_ack no_ack + * @param [in] exclusive exclusive + * @param [in] arguments arguments + * @returns amqp_basic_consume_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_consume_ok_t * +AMQP_CALL amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments); +/** + * amqp_basic_cancel + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] consumer_tag consumer_tag + * @returns amqp_basic_cancel_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_cancel_ok_t * +AMQP_CALL amqp_basic_cancel(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t consumer_tag); +/** + * amqp_basic_recover + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @param [in] requeue requeue + * @returns amqp_basic_recover_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_basic_recover_ok_t * +AMQP_CALL amqp_basic_recover(amqp_connection_state_t state, amqp_channel_t channel, amqp_boolean_t requeue); +/** + * amqp_tx_select + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_tx_select_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_tx_select_ok_t * +AMQP_CALL amqp_tx_select(amqp_connection_state_t state, amqp_channel_t channel); +/** + * amqp_tx_commit + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_tx_commit_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_tx_commit_ok_t * +AMQP_CALL amqp_tx_commit(amqp_connection_state_t state, amqp_channel_t channel); +/** + * amqp_tx_rollback + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_tx_rollback_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_tx_rollback_ok_t * +AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state, amqp_channel_t channel); +/** + * amqp_confirm_select + * + * @param [in] state connection state + * @param [in] channel the channel to do the RPC on + * @returns amqp_confirm_select_ok_t + */ +AMQP_PUBLIC_FUNCTION +amqp_confirm_select_ok_t * +AMQP_CALL amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel); AMQP_END_DECLS diff --git a/librabbitmq/amqp_openssl.c b/librabbitmq/amqp_openssl.c index ab8a94e..393a84e 100644 --- a/librabbitmq/amqp_openssl.c +++ b/librabbitmq/amqp_openssl.c @@ -1,6 +1,10 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /* - * Copyright 2012-2013 Michael Steinert + * Portions created by Alan Antonuk are Copyright (c) 2012-2014 Alan Antonuk. + * All Rights Reserved. + * + * Portions created by Michael Steinert are Copyright (c) 2012-2014 Michael + * Steinert. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -25,10 +29,6 @@ #include "config.h" #endif -#if defined(__APPLE__) && defined(__MACH__) -# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_6 -#endif - #include "amqp_ssl_socket.h" #include "amqp_socket.h" #include "amqp_hostcheck.h" @@ -271,8 +271,8 @@ amqp_ssl_socket_open(void *base, const char *host, int port, struct timeval *tim goto error_out3; } if (self->verify) { - int status = amqp_ssl_socket_verify_hostname(self, host); - if (status) { + int verify_status = amqp_ssl_socket_verify_hostname(self, host); + if (verify_status) { self->internal_error = 0; status = AMQP_STATUS_SSL_HOSTNAME_VERIFY_FAILED; goto error_out3; diff --git a/librabbitmq/amqp_private.h b/librabbitmq/amqp_private.h index afe182d..cde2ebf 100644 --- a/librabbitmq/amqp_private.h +++ b/librabbitmq/amqp_private.h @@ -6,7 +6,7 @@ * ***** BEGIN LICENSE BLOCK ***** * Version: MIT * - * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Portions created by Alan Antonuk are Copyright (c) 2012-2014 * Alan Antonuk. All Rights Reserved. * * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. @@ -41,6 +41,9 @@ #include "config.h" #endif +#define AMQ_COPYRIGHT "Copyright (c) 2007-2014 VMWare Inc, Tony Garnock-Jones," \ + " and Alan Antonuk." + #include "amqp.h" #include "amqp_framing.h" #include <string.h> @@ -71,6 +74,7 @@ # include <Winsock2.h> #else # include <arpa/inet.h> +# include <sys/uio.h> #endif /* GCC attributes */ diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index 79a7696..29a7389 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -3,7 +3,7 @@ * ***** BEGIN LICENSE BLOCK ***** * Version: MIT * - * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Portions created by Alan Antonuk are Copyright (c) 2012-2014 * Alan Antonuk. All Rights Reserved. * * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. @@ -42,6 +42,7 @@ #include "amqp_timer.h" #include <assert.h> +#include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdio.h> @@ -64,9 +65,14 @@ # include <netdb.h> # include <sys/uio.h> # include <fcntl.h> +# include <poll.h> # include <unistd.h> #endif +#ifdef _WIN32 +# define poll(fdarray, nfds, timeout) WSAPoll(fdarray, nfds, timeout) +#endif + static int amqp_os_socket_init(void) { @@ -275,7 +281,9 @@ int amqp_open_socket_noblock(char const *hostname, AMQP_INIT_TIMER(timer) - if (timeout && (timeout->tv_sec < 0 || timeout->tv_usec < 0)) { + if (timeout && (timeout->tv_sec < 0 || timeout->tv_usec < 0 || + INT_MAX < ((uint64_t)timeout->tv_sec * AMQP_MS_PER_S + + (uint64_t)timeout->tv_usec / AMQP_US_PER_MS))) { return AMQP_STATUS_INVALID_PARAMETER; } @@ -300,7 +308,6 @@ int amqp_open_socket_noblock(char const *hostname, for (addr = address_list; addr; addr = addr->ai_next) { if (-1 != sockfd) { amqp_os_socket_close(sockfd); - sockfd = -1; } sockfd = amqp_os_socket_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); @@ -349,14 +356,12 @@ int amqp_open_socket_noblock(char const *hostname, #endif while(1) { - fd_set write_fd; - fd_set except_fd; + struct pollfd pfd; + int timeout_ms; - FD_ZERO(&write_fd); - FD_SET(sockfd, &write_fd); - - FD_ZERO(&except_fd); - FD_SET(sockfd, &except_fd); + pfd.fd = sockfd; + pfd.events = POLLERR | POLLOUT; + pfd.revents = 0; timer_error = amqp_timer_update(&timer, timeout); @@ -365,11 +370,13 @@ int amqp_open_socket_noblock(char const *hostname, break; } + timeout_ms = timer.tv.tv_sec * AMQP_MS_PER_S + + timer.tv.tv_usec / AMQP_US_PER_MS; /* Win32 requires except_fds to be passed to detect connection * failure. Other platforms only need write_fds, passing except_fds * seems to be harmless otherwise */ - res = select(sockfd+1, NULL, &write_fd, &except_fd, &timer.tv); + res = poll(&pfd, 1, timeout_ms); if (res > 0) { int result; @@ -547,22 +554,29 @@ static int recv_with_timeout(amqp_connection_state_t state, uint64_t start, stru if (timeout) { int fd; - fd_set read_fd; - fd_set except_fd; fd = amqp_get_sockfd(state); if (-1 == fd) { return AMQP_STATUS_CONNECTION_CLOSED; } + if (INT_MAX < (uint64_t)timeout->tv_sec * AMQP_MS_PER_S + + (uint64_t)timeout->tv_usec / AMQP_US_PER_MS) { + return AMQP_STATUS_INVALID_PARAMETER; + } + while (1) { - FD_ZERO(&read_fd); - FD_SET(fd, &read_fd); + struct pollfd pfd; + int timeout_ms; + + pfd.fd = fd; + pfd.events = POLLIN; + pfd.revents = 0; - FD_ZERO(&except_fd); - FD_SET(fd, &except_fd); + timeout_ms = timeout->tv_sec * AMQP_MS_PER_S + + timeout->tv_usec / AMQP_US_PER_MS; - res = select(fd + 1, &read_fd, NULL, &except_fd, timeout); + res = poll(&pfd, 1, timeout_ms); if (0 < res) { break; @@ -1144,7 +1158,7 @@ static amqp_rpc_reply_t amqp_login_inner(amqp_connection_state_t state, } { - amqp_table_entry_t default_properties[2]; + amqp_table_entry_t default_properties[5]; amqp_table_t default_table; amqp_connection_start_ok_t s; amqp_pool_t *channel_pool; @@ -1168,9 +1182,27 @@ static amqp_rpc_reply_t amqp_login_inner(amqp_connection_state_t state, default_properties[0].value.value.bytes = amqp_cstring_bytes("rabbitmq-c"); - default_properties[1].key = amqp_cstring_bytes("information"); + /* version */ + default_properties[1].key = amqp_cstring_bytes("version"); default_properties[1].value.kind = AMQP_FIELD_KIND_UTF8; default_properties[1].value.value.bytes = + amqp_cstring_bytes(AMQP_VERSION_STRING); + + /* platform */ + default_properties[2].key = amqp_cstring_bytes("platform"); + default_properties[2].value.kind = AMQP_FIELD_KIND_UTF8; + default_properties[2].value.value.bytes = + amqp_cstring_bytes(AMQ_PLATFORM); + + /* copyright */ + default_properties[3].key = amqp_cstring_bytes("copyright"); + default_properties[3].value.kind = AMQP_FIELD_KIND_UTF8; + default_properties[3].value.value.bytes = + amqp_cstring_bytes(AMQ_COPYRIGHT); + + default_properties[4].key = amqp_cstring_bytes("information"); + default_properties[4].value.kind = AMQP_FIELD_KIND_UTF8; + default_properties[4].value.value.bytes = amqp_cstring_bytes("See https://github.com/alanxz/rabbitmq-c"); default_table.entries = default_properties; @@ -1245,6 +1277,8 @@ static amqp_rpc_reply_t amqp_login_inner(amqp_connection_state_t state, if (server_channel_max != 0 && server_channel_max < channel_max) { channel_max = server_channel_max; + } else if (server_channel_max == 0 && channel_max == 0) { + channel_max = UINT16_MAX; } if (server_frame_max != 0 && server_frame_max < frame_max) { diff --git a/librabbitmq/amqp_socket.h b/librabbitmq/amqp_socket.h index bdeea63..dad1a1e 100644 --- a/librabbitmq/amqp_socket.h +++ b/librabbitmq/amqp_socket.h @@ -1,6 +1,10 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /* - * Copyright 2012-2013 Michael Steinert + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk. + * All Rights Reserved. + * + * Portions created by Michael Steinert are Copyright (c) 2012-2013 Michael + * Steinert. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -92,7 +96,7 @@ amqp_set_socket(amqp_connection_state_t state, amqp_socket_t *socket); * * This function wraps writev(2) functionality. * - * This function will only reutrn on error, or when all of the bytes referred + * This function will only return on error, or when all of the bytes referred * to in iov have been sent. NOTE: this function may modify the iov struct. * * \param [in,out] self A socket object. diff --git a/librabbitmq/amqp_ssl_socket.h b/librabbitmq/amqp_ssl_socket.h index 7f8ea64..21a346a 100644 --- a/librabbitmq/amqp_ssl_socket.h +++ b/librabbitmq/amqp_ssl_socket.h @@ -1,7 +1,11 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /** \file */ /* - * Copyright 2012-2013 Michael Steinert + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk. + * All Rights Reserved. + * + * Portions created by Michael Steinert are Copyright (c) 2012-2013 Michael + * Steinert. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/librabbitmq/amqp_tcp_socket.h b/librabbitmq/amqp_tcp_socket.h index 95ed206..7614aa5 100644 --- a/librabbitmq/amqp_tcp_socket.h +++ b/librabbitmq/amqp_tcp_socket.h @@ -1,7 +1,11 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /** \file */ /* - * Copyright 2012-2013 Michael Steinert + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk. + * All Rights Reserved. + * + * Portions created by Michael Steinert are Copyright (c) 2012-2013 Michael + * Steinert. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/librabbitmq/amqp_timer.c b/librabbitmq/amqp_timer.c index 95606b8..46410dc 100644 --- a/librabbitmq/amqp_timer.c +++ b/librabbitmq/amqp_timer.c @@ -1,6 +1,7 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /* - * Copyright 2013 Alan Antonuk + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk. + * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -90,12 +91,16 @@ amqp_get_monotonic_timestamp(void) uint64_t amqp_get_monotonic_timestamp(void) { +#ifdef __hpux + return (uint64_t)gethrtime(); +#else struct timespec tp; if (-1 == clock_gettime(CLOCK_MONOTONIC, &tp)) { return 0; } return ((uint64_t)tp.tv_sec * AMQP_NS_PER_S + (uint64_t)tp.tv_nsec); +#endif } #endif /* AMQP_POSIX_TIMER_API */ diff --git a/librabbitmq/amqp_timer.h b/librabbitmq/amqp_timer.h index 8ac3de9..3936922 100644 --- a/librabbitmq/amqp_timer.h +++ b/librabbitmq/amqp_timer.h @@ -1,6 +1,7 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /* - * Copyright 2013 Alan Antonuk + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk. + * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -37,7 +38,10 @@ # include <sys/time.h> #endif -#define AMQP_NS_PER_S 1000000000 +#define AMQP_MS_PER_S 1000 +#define AMQP_US_PER_MS 1000 +#define AMQP_NS_PER_S 1000000000 +#define AMQP_NS_PER_MS 1000000 #define AMQP_NS_PER_US 1000 #define AMQP_INIT_TIMER(structure) { \ diff --git a/librabbitmq/codegen.py b/librabbitmq/codegen.py index 6611716..510a071 100644 --- a/librabbitmq/codegen.py +++ b/librabbitmq/codegen.py @@ -225,7 +225,6 @@ apiMethodInfo = { "amqp_channel_open": ["out_of_band"], "amqp_channel_close": False, # needs special handling "amqp_access_request": False, # huh? - "amqp_exchange_declare": ["auto_delete", "internal"], "amqp_basic_get": False, # get-ok has content } diff --git a/librabbitmq/win32/threads.h b/librabbitmq/win32/threads.h index d1de854..9e261ec 100644 --- a/librabbitmq/win32/threads.h +++ b/librabbitmq/win32/threads.h @@ -1,6 +1,10 @@ /* vim:set ft=c ts=2 sw=2 sts=2 et cindent: */ /* - * Copyright 2012-2013 Michael Steinert + * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk. + * All Rights Reserved. + * + * Portions created by Michael Steinert are Copyright (c) 2012-2013 Michael + * Steinert. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), |