diff options
Diffstat (limited to 'librabbitmq/amqp.h')
-rw-r--r-- | librabbitmq/amqp.h | 467 |
1 files changed, 215 insertions, 252 deletions
diff --git a/librabbitmq/amqp.h b/librabbitmq/amqp.h index 40c8292..1541583 100644 --- a/librabbitmq/amqp.h +++ b/librabbitmq/amqp.h @@ -55,6 +55,16 @@ extern "C" { #endif +#ifdef _WIN32 +#ifdef BUILDING_LIBRABBITMQ +#define RABBITMQ_EXPORT extern __declspec(dllexport) +#else +#define RABBITMQ_EXPORT extern __declspec(dllimport) +#endif +#else +#define RABBITMQ_EXPORT extern +#endif + typedef int amqp_boolean_t; typedef uint32_t amqp_method_number_t; typedef uint32_t amqp_flags_t; @@ -65,29 +75,21 @@ typedef struct amqp_bytes_t_ { void *bytes; } amqp_bytes_t; -#define AMQP_EMPTY_BYTES ((amqp_bytes_t) { .len = 0, .bytes = NULL }) - typedef struct amqp_decimal_t_ { - int decimals; + uint8_t decimals; uint32_t value; } amqp_decimal_t; -#define AMQP_DECIMAL(d,v) ((amqp_decimal_t) { .decimals = (d), .value = (v) }) - typedef struct amqp_table_t_ { int num_entries; struct amqp_table_entry_t_ *entries; } amqp_table_t; -#define AMQP_EMPTY_TABLE ((amqp_table_t) { .num_entries = 0, .entries = NULL }) - typedef struct amqp_array_t_ { int num_entries; struct amqp_field_value_t_ *entries; } amqp_array_t; -#define AMQP_EMPTY_ARRAY ((amqp_array_t) { .num_entries = 0, .entries = NULL }) - /* 0-9 0-9-1 Qpid/Rabbit Type Remarks --------------------------------------------------------------------------- @@ -128,7 +130,7 @@ the code. */ typedef struct amqp_field_value_t_ { - char kind; + uint8_t kind; union { amqp_boolean_t boolean; int8_t i8; @@ -162,6 +164,7 @@ typedef enum { AMQP_FIELD_KIND_I32 = 'I', AMQP_FIELD_KIND_U32 = 'i', AMQP_FIELD_KIND_I64 = 'l', + AMQP_FIELD_KIND_U64 = 'L', AMQP_FIELD_KIND_F32 = 'f', AMQP_FIELD_KIND_F64 = 'd', AMQP_FIELD_KIND_DECIMAL = 'D', @@ -170,47 +173,9 @@ typedef enum { AMQP_FIELD_KIND_TIMESTAMP = 'T', AMQP_FIELD_KIND_TABLE = 'F', AMQP_FIELD_KIND_VOID = 'V', - AMQP_FIELD_KIND_BYTES = 'x', + AMQP_FIELD_KIND_BYTES = 'x' } amqp_field_value_kind_t; -#define _AMQP_TEINIT(ke,ki,v) {.key = (ke), .value = {.kind = AMQP_FIELD_KIND_##ki, .value = {v}}} -#define AMQP_TABLE_ENTRY_BOOLEAN(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), BOOLEAN, .boolean = (v)) -#define AMQP_TABLE_ENTRY_I8(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), I8, .i8 = (v)) -#define AMQP_TABLE_ENTRY_U8(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), U8, .u8 = (v)) -#define AMQP_TABLE_ENTRY_I16(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), I16, .i16 = (v)) -#define AMQP_TABLE_ENTRY_U16(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), U16, .u16 = (v)) -#define AMQP_TABLE_ENTRY_I32(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), I32, .i32 = (v)) -#define AMQP_TABLE_ENTRY_U32(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), U32, .u32 = (v)) -#define AMQP_TABLE_ENTRY_I64(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), I64, .i64 = (v)) -#define AMQP_TABLE_ENTRY_F32(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), F32, .f32 = (v)) -#define AMQP_TABLE_ENTRY_F64(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), F64, .f64 = (v)) -#define AMQP_TABLE_ENTRY_DECIMAL(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), DECIMAL, .decimal = (v)) -#define AMQP_TABLE_ENTRY_UTF8(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), UTF8, .bytes = (v)) -#define AMQP_TABLE_ENTRY_ARRAY(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), ARRAY, .array = (v)) -#define AMQP_TABLE_ENTRY_TIMESTAMP(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), TIMESTAMP, .u64 = (v)) -#define AMQP_TABLE_ENTRY_TABLE(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), TABLE, .table = (v)) -#define AMQP_TABLE_ENTRY_VOID(k) _AMQP_TEINIT(amqp_cstring_bytes(k), VOID, .u8 = 0) -#define AMQP_TABLE_ENTRY_BYTES(k,v) _AMQP_TEINIT(amqp_cstring_bytes(k), BYTES, .bytes = (v)) - -#define _AMQP_FVINIT(ki,v) {.kind = AMQP_FIELD_KIND_##ki, .value = {v}} -#define AMQP_FIELD_VALUE_BOOLEAN(v) _AMQP_FVINIT(BOOLEAN, .boolean = (v)) -#define AMQP_FIELD_VALUE_I8(v) _AMQP_FVINIT(I8, .i8 = (v)) -#define AMQP_FIELD_VALUE_U8(v) _AMQP_FVINIT(U8, .u8 = (v)) -#define AMQP_FIELD_VALUE_I16(v) _AMQP_FVINIT(I16, .i16 = (v)) -#define AMQP_FIELD_VALUE_U16(v) _AMQP_FVINIT(U16, .u16 = (v)) -#define AMQP_FIELD_VALUE_I32(v) _AMQP_FVINIT(I32, .i32 = (v)) -#define AMQP_FIELD_VALUE_U32(v) _AMQP_FVINIT(U32, .u32 = (v)) -#define AMQP_FIELD_VALUE_I64(v) _AMQP_FVINIT(I64, .i64 = (v)) -#define AMQP_FIELD_VALUE_F32(v) _AMQP_FVINIT(F32, .f32 = (v)) -#define AMQP_FIELD_VALUE_F64(v) _AMQP_FVINIT(F64, .f64 = (v)) -#define AMQP_FIELD_VALUE_DECIMAL(v) _AMQP_FVINIT(DECIMAL, .decimal = (v)) -#define AMQP_FIELD_VALUE_UTF8(v) _AMQP_FVINIT(UTF8, .bytes = (v)) -#define AMQP_FIELD_VALUE_ARRAY(v) _AMQP_FVINIT(ARRAY, .array = (v)) -#define AMQP_FIELD_VALUE_TIMESTAMP(v) _AMQP_FVINIT(TIMESTAMP, .u64 = (v)) -#define AMQP_FIELD_VALUE_TABLE(v) _AMQP_FVINIT(TABLE, .table = (v)) -#define AMQP_FIELD_VALUE_VOID(k) _AMQP_FVINIT(VOID, .u8 = 0) -#define AMQP_FIELD_VALUE_BYTES(v) _AMQP_FVINIT(BYTES, .bytes = (v)) - typedef struct amqp_pool_blocklist_t_ { int num_blocks; void **blocklist; @@ -270,211 +235,198 @@ typedef enum amqp_sasl_method_enum_ { AMQP_SASL_METHOD_PLAIN = 0 } amqp_sasl_method_enum; -#define AMQP_PSEUDOFRAME_PROTOCOL_HEADER ((uint8_t) 'A') -#define AMQP_PSEUDOFRAME_PROTOCOL_CHANNEL ((amqp_channel_t) ((((int) 'M') << 8) | ((int) 'Q'))) - -typedef int (*amqp_output_fn_t)(void *context, void *buffer, size_t count); - /* Opaque struct. */ typedef struct amqp_connection_state_t_ *amqp_connection_state_t; -extern char const *amqp_version(void); - -extern void init_amqp_pool(amqp_pool_t *pool, size_t pagesize); -extern void recycle_amqp_pool(amqp_pool_t *pool); -extern void empty_amqp_pool(amqp_pool_t *pool); - -extern void *amqp_pool_alloc(amqp_pool_t *pool, size_t amount); -extern void amqp_pool_alloc_bytes(amqp_pool_t *pool, size_t amount, amqp_bytes_t *output); - -extern amqp_bytes_t amqp_cstring_bytes(char const *cstr); -extern amqp_bytes_t amqp_bytes_malloc_dup(amqp_bytes_t src); -extern amqp_bytes_t amqp_bytes_malloc(size_t amount); -extern void amqp_bytes_free(amqp_bytes_t bytes); - -#define AMQP_BYTES_FREE(b) \ - ({ \ - if ((b).bytes != NULL) { \ - free((b).bytes); \ - (b).bytes = NULL; \ - } \ - }) - -extern amqp_connection_state_t amqp_new_connection(void); -extern int amqp_get_sockfd(amqp_connection_state_t state); -extern void amqp_set_sockfd(amqp_connection_state_t state, - int sockfd); -extern int amqp_tune_connection(amqp_connection_state_t state, - int channel_max, - int frame_max, - int heartbeat); -extern int amqp_get_channel_max(amqp_connection_state_t state); -extern int amqp_destroy_connection(amqp_connection_state_t state); - -extern int amqp_handle_input(amqp_connection_state_t state, - amqp_bytes_t received_data, - amqp_frame_t *decoded_frame); - -extern amqp_boolean_t amqp_release_buffers_ok(amqp_connection_state_t state); - -extern void amqp_release_buffers(amqp_connection_state_t state); - -extern void amqp_maybe_release_buffers(amqp_connection_state_t state); - -extern int amqp_send_frame(amqp_connection_state_t state, - amqp_frame_t const *frame); -extern int amqp_send_frame_to(amqp_connection_state_t state, - amqp_frame_t const *frame, - amqp_output_fn_t fn, - void *context); - -extern int amqp_table_entry_cmp(void const *entry1, void const *entry2); - -extern int amqp_open_socket(char const *hostname, int portnumber); - -extern int amqp_send_header(amqp_connection_state_t state); -extern int amqp_send_header_to(amqp_connection_state_t state, - amqp_output_fn_t fn, - void *context); - -extern amqp_boolean_t amqp_frames_enqueued(amqp_connection_state_t state); - -extern int amqp_simple_wait_frame(amqp_connection_state_t state, - amqp_frame_t *decoded_frame); - -extern int amqp_simple_wait_method(amqp_connection_state_t state, - amqp_channel_t expected_channel, - amqp_method_number_t expected_method, - amqp_method_t *output); - -extern int amqp_send_method(amqp_connection_state_t state, - amqp_channel_t channel, - amqp_method_number_t id, - void *decoded); - -extern amqp_rpc_reply_t amqp_simple_rpc(amqp_connection_state_t state, - amqp_channel_t channel, - amqp_method_number_t request_id, - amqp_method_number_t *expected_reply_ids, - void *decoded_request_method); - -#define AMQP_EXPAND_METHOD(classname, methodname) (AMQP_ ## classname ## _ ## methodname ## _METHOD) - -#define AMQP_SIMPLE_RPC(state, channel, classname, requestname, replyname, structname, ...) \ - ({ \ - structname _simple_rpc_request___ = (structname) { __VA_ARGS__ }; \ - amqp_method_number_t _replies__[2] = { AMQP_EXPAND_METHOD(classname, replyname), 0}; \ - amqp_simple_rpc(state, channel, \ - AMQP_EXPAND_METHOD(classname, requestname), \ - (amqp_method_number_t *)&_replies__, \ - &_simple_rpc_request___); \ - }) - -#define AMQP_MULTIPLE_RESPONSE_RPC(state, channel, classname, requestname, replynames, structname, ...) \ - ({ \ - structname _simple_rpc_request___ = (structname) { __VA_ARGS__ }; \ - amqp_simple_rpc(state, channel, \ - AMQP_EXPAND_METHOD(classname, requestname), \ - replynames, \ - &_simple_rpc_request___); \ - }) - - -extern amqp_rpc_reply_t amqp_login(amqp_connection_state_t state, - char const *vhost, - int channel_max, - int frame_max, - int heartbeat, - amqp_sasl_method_enum sasl_method, ...); - -extern struct amqp_channel_open_ok_t_ *amqp_channel_open(amqp_connection_state_t state, - amqp_channel_t channel); +RABBITMQ_EXPORT char const *amqp_version(void); + +/* Exported empty data structures */ +RABBITMQ_EXPORT const amqp_bytes_t amqp_empty_bytes; +RABBITMQ_EXPORT const amqp_table_t amqp_empty_table; +RABBITMQ_EXPORT const amqp_array_t amqp_empty_array; + +/* Compatibility macros for the above, to avoid the need to update + code written against earlier versions of librabbitmq. */ +#define AMQP_EMPTY_BYTES amqp_empty_bytes +#define AMQP_EMPTY_TABLE amqp_empty_table +#define AMQP_EMPTY_ARRAY amqp_empty_array + +RABBITMQ_EXPORT void init_amqp_pool(amqp_pool_t *pool, size_t pagesize); +RABBITMQ_EXPORT void recycle_amqp_pool(amqp_pool_t *pool); +RABBITMQ_EXPORT void empty_amqp_pool(amqp_pool_t *pool); + +RABBITMQ_EXPORT void *amqp_pool_alloc(amqp_pool_t *pool, size_t amount); +RABBITMQ_EXPORT void amqp_pool_alloc_bytes(amqp_pool_t *pool, + size_t amount, amqp_bytes_t *output); + +RABBITMQ_EXPORT amqp_bytes_t amqp_cstring_bytes(char const *cstr); +RABBITMQ_EXPORT amqp_bytes_t amqp_bytes_malloc_dup(amqp_bytes_t src); +RABBITMQ_EXPORT amqp_bytes_t amqp_bytes_malloc(size_t amount); +RABBITMQ_EXPORT void amqp_bytes_free(amqp_bytes_t bytes); + +RABBITMQ_EXPORT amqp_connection_state_t amqp_new_connection(void); +RABBITMQ_EXPORT int amqp_get_sockfd(amqp_connection_state_t state); +RABBITMQ_EXPORT void amqp_set_sockfd(amqp_connection_state_t state, + int sockfd); +RABBITMQ_EXPORT int amqp_tune_connection(amqp_connection_state_t state, + int channel_max, + int frame_max, + int heartbeat); +RABBITMQ_EXPORT int amqp_get_channel_max(amqp_connection_state_t state); +RABBITMQ_EXPORT int amqp_destroy_connection(amqp_connection_state_t state); + +RABBITMQ_EXPORT int amqp_handle_input(amqp_connection_state_t state, + amqp_bytes_t received_data, + amqp_frame_t *decoded_frame); + +RABBITMQ_EXPORT amqp_boolean_t amqp_release_buffers_ok( + amqp_connection_state_t state); + +RABBITMQ_EXPORT void amqp_release_buffers(amqp_connection_state_t state); + +RABBITMQ_EXPORT void amqp_maybe_release_buffers(amqp_connection_state_t state); + +RABBITMQ_EXPORT int amqp_send_frame(amqp_connection_state_t state, + amqp_frame_t const *frame); + +RABBITMQ_EXPORT int amqp_table_entry_cmp(void const *entry1, + void const *entry2); + +RABBITMQ_EXPORT int amqp_open_socket(char const *hostname, + int portnumber); + +RABBITMQ_EXPORT int amqp_send_header(amqp_connection_state_t state); + +RABBITMQ_EXPORT amqp_boolean_t amqp_frames_enqueued( + amqp_connection_state_t state); + +RABBITMQ_EXPORT int amqp_simple_wait_frame(amqp_connection_state_t state, + amqp_frame_t *decoded_frame); + +RABBITMQ_EXPORT int amqp_simple_wait_method(amqp_connection_state_t state, + amqp_channel_t expected_channel, + amqp_method_number_t expected_method, + amqp_method_t *output); + +RABBITMQ_EXPORT int amqp_send_method(amqp_connection_state_t state, + amqp_channel_t channel, + amqp_method_number_t id, + void *decoded); + +RABBITMQ_EXPORT amqp_rpc_reply_t amqp_simple_rpc(amqp_connection_state_t state, + amqp_channel_t channel, + amqp_method_number_t request_id, + amqp_method_number_t *expected_reply_ids, + void *decoded_request_method); + +RABBITMQ_EXPORT amqp_rpc_reply_t amqp_login(amqp_connection_state_t state, + char const *vhost, + int channel_max, + int frame_max, + int heartbeat, + amqp_sasl_method_enum sasl_method, ...); + +RABBITMQ_EXPORT struct amqp_channel_open_ok_t_ *amqp_channel_open( + amqp_connection_state_t state, + amqp_channel_t channel); struct amqp_basic_properties_t_; -extern int amqp_basic_publish(amqp_connection_state_t state, - amqp_channel_t channel, - amqp_bytes_t exchange, - amqp_bytes_t routing_key, - amqp_boolean_t mandatory, - amqp_boolean_t immediate, - struct amqp_basic_properties_t_ const *properties, - amqp_bytes_t body); - -extern amqp_rpc_reply_t amqp_channel_close(amqp_connection_state_t state, - amqp_channel_t channel, - int code); -extern amqp_rpc_reply_t amqp_connection_close(amqp_connection_state_t state, - int code); - -extern struct amqp_exchange_declare_ok_t_ *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); - -extern struct amqp_queue_declare_ok_t_ *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); - -extern struct amqp_queue_delete_ok_t_ *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); - -extern struct amqp_queue_bind_ok_t_ *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); - -extern struct amqp_queue_unbind_ok_t_ *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); - -extern struct amqp_basic_consume_ok_t_ *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 filter); - -extern int amqp_basic_ack(amqp_connection_state_t state, - amqp_channel_t channel, - uint64_t delivery_tag, - amqp_boolean_t multiple); - -extern amqp_rpc_reply_t amqp_basic_get(amqp_connection_state_t state, - amqp_channel_t channel, - amqp_bytes_t queue, - amqp_boolean_t no_ack); - -extern struct amqp_queue_purge_ok_t_ *amqp_queue_purge(amqp_connection_state_t state, - amqp_channel_t channel, - amqp_bytes_t queue, - amqp_boolean_t no_wait); - -extern struct amqp_tx_select_ok_t_ *amqp_tx_select(amqp_connection_state_t state, - amqp_channel_t channel); - -extern struct amqp_tx_commit_ok_t_ *amqp_tx_commit(amqp_connection_state_t state, - amqp_channel_t channel); - -extern struct amqp_tx_rollback_ok_t_ *amqp_tx_rollback(amqp_connection_state_t state, - amqp_channel_t channel); +RABBITMQ_EXPORT int amqp_basic_publish(amqp_connection_state_t state, + amqp_channel_t channel, + amqp_bytes_t exchange, + amqp_bytes_t routing_key, + amqp_boolean_t mandatory, + amqp_boolean_t immediate, + struct amqp_basic_properties_t_ const *properties, + amqp_bytes_t body); + +RABBITMQ_EXPORT amqp_rpc_reply_t amqp_channel_close( + amqp_connection_state_t state, + amqp_channel_t channel, + int code); +RABBITMQ_EXPORT amqp_rpc_reply_t amqp_connection_close( + amqp_connection_state_t state, + int code); + +RABBITMQ_EXPORT struct amqp_exchange_declare_ok_t_ *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); + +RABBITMQ_EXPORT struct amqp_queue_declare_ok_t_ *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); + +RABBITMQ_EXPORT struct amqp_queue_delete_ok_t_ *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); + +RABBITMQ_EXPORT struct amqp_queue_bind_ok_t_ *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); + +RABBITMQ_EXPORT struct amqp_queue_unbind_ok_t_ *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); + +RABBITMQ_EXPORT struct amqp_basic_consume_ok_t_ *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 filter); + +RABBITMQ_EXPORT int amqp_basic_ack(amqp_connection_state_t state, + amqp_channel_t channel, + uint64_t delivery_tag, + amqp_boolean_t multiple); + +RABBITMQ_EXPORT amqp_rpc_reply_t amqp_basic_get(amqp_connection_state_t state, + amqp_channel_t channel, + amqp_bytes_t queue, + amqp_boolean_t no_ack); + +RABBITMQ_EXPORT struct amqp_queue_purge_ok_t_ *amqp_queue_purge( + amqp_connection_state_t state, + amqp_channel_t channel, + amqp_bytes_t queue, + amqp_boolean_t no_wait); + +RABBITMQ_EXPORT struct amqp_tx_select_ok_t_ *amqp_tx_select( + amqp_connection_state_t state, + amqp_channel_t channel); + +RABBITMQ_EXPORT struct amqp_tx_commit_ok_t_ *amqp_tx_commit( + amqp_connection_state_t state, + amqp_channel_t channel); + +RABBITMQ_EXPORT struct amqp_tx_rollback_ok_t_ *amqp_tx_rollback( + amqp_connection_state_t state, + amqp_channel_t channel); /* * Can be used to see if there is data still in the buffer, if so @@ -483,7 +435,8 @@ extern struct amqp_tx_rollback_ok_t_ *amqp_tx_rollback(amqp_connection_state_t s * * Possibly amqp_frames_enqueued should be used for this? */ -extern amqp_boolean_t amqp_data_in_buffer(amqp_connection_state_t state); +RABBITMQ_EXPORT amqp_boolean_t amqp_data_in_buffer( + amqp_connection_state_t state); /* * For those API operations (such as amqp_basic_ack, @@ -498,7 +451,8 @@ extern amqp_boolean_t amqp_data_in_buffer(amqp_connection_state_t state); * generally do NOT update this per-connection-global amqp_rpc_reply_t * instance. */ -extern amqp_rpc_reply_t amqp_get_rpc_reply(amqp_connection_state_t state); +RABBITMQ_EXPORT amqp_rpc_reply_t amqp_get_rpc_reply( + amqp_connection_state_t state); /* * Get the error string for the given error code. @@ -506,7 +460,16 @@ extern amqp_rpc_reply_t amqp_get_rpc_reply(amqp_connection_state_t state); * The returned string resides on the heap; the caller is responsible * for freeing it. */ -extern char *amqp_error_string(int err); +RABBITMQ_EXPORT char *amqp_error_string(int err); + +RABBITMQ_EXPORT int amqp_decode_table(amqp_bytes_t encoded, + amqp_pool_t *pool, + amqp_table_t *output, + size_t *offset); + +RABBITMQ_EXPORT int amqp_encode_table(amqp_bytes_t encoded, + amqp_table_t *input, + size_t *offset); #ifdef __cplusplus } |