summaryrefslogtreecommitdiff
path: root/librabbitmq/amqp.h
diff options
context:
space:
mode:
Diffstat (limited to 'librabbitmq/amqp.h')
-rw-r--r--librabbitmq/amqp.h467
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
}