summaryrefslogtreecommitdiff
path: root/librabbitmq/amqp_api.c
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-05-07 00:40:43 +0100
committerTony Garnock-Jones <tonyg@kcbbs.gen.nz>2009-05-07 00:40:43 +0100
commita32fbd1ba39ab1ba9d1e798b1065b59f7f755267 (patch)
treec850e708249c3305ecdaa5a736ee9fa705a63453 /librabbitmq/amqp_api.c
parentdc04434f7398528ef69954f0f840ac9ce5847347 (diff)
downloadrabbitmq-c-a32fbd1ba39ab1ba9d1e798b1065b59f7f755267.tar.gz
Introduce more mid-level API
Diffstat (limited to 'librabbitmq/amqp_api.c')
-rw-r--r--librabbitmq/amqp_api.c98
1 files changed, 74 insertions, 24 deletions
diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c
index fc8b56c..064436f 100644
--- a/librabbitmq/amqp_api.c
+++ b/librabbitmq/amqp_api.c
@@ -71,31 +71,81 @@ int amqp_basic_publish(amqp_connection_state_t state,
}
amqp_rpc_reply_t amqp_channel_close(amqp_connection_state_t state, int code) {
- amqp_channel_close_t s =
- (amqp_channel_close_t) {
- .reply_code = code,
- .reply_text = {.len = 0, .bytes = NULL},
- .class_id = 0,
- .method_id = 0
- };
- return amqp_simple_rpc(state,
- 1,
- AMQP_CHANNEL_CLOSE_METHOD,
- AMQP_CHANNEL_CLOSE_OK_METHOD,
- &s);
+ return AMQP_SIMPLE_RPC(state, 1, CHANNEL, CLOSE, CLOSE_OK,
+ amqp_channel_close_t,
+ code, {0,NULL}, 0, 0);
}
amqp_rpc_reply_t amqp_connection_close(amqp_connection_state_t state, int code) {
- amqp_connection_close_t s =
- (amqp_connection_close_t) {
- .reply_code = code,
- .reply_text = {.len = 0, .bytes = NULL},
- .class_id = 0,
- .method_id = 0
- };
- return amqp_simple_rpc(state,
- 0,
- AMQP_CONNECTION_CLOSE_METHOD,
- AMQP_CONNECTION_CLOSE_OK_METHOD,
- &s);
+ return AMQP_SIMPLE_RPC(state, 0, CONNECTION, CLOSE, CLOSE_OK,
+ amqp_connection_close_t,
+ code, {0,NULL}, 0, 0);
+}
+
+amqp_rpc_reply_t amqp_rpc_reply;
+
+#define RPC_REPLY(replytype) \
+ (amqp_rpc_reply.reply_type == AMQP_RESPONSE_NORMAL \
+ ? (replytype *) amqp_rpc_reply.reply.decoded \
+ : NULL)
+
+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_boolean_t auto_delete,
+ amqp_table_t arguments)
+{
+ amqp_rpc_reply =
+ AMQP_SIMPLE_RPC(state, channel, EXCHANGE, DECLARE, DECLARE_OK,
+ amqp_exchange_declare_t,
+ 0, exchange, type, passive, durable, auto_delete, 0, 0, arguments);
+ return RPC_REPLY(amqp_exchange_declare_ok_t);
+}
+
+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)
+{
+ amqp_rpc_reply =
+ AMQP_SIMPLE_RPC(state, channel, QUEUE, DECLARE, DECLARE_OK,
+ amqp_queue_declare_t,
+ 0, queue, passive, durable, exclusive, auto_delete, 0, arguments);
+ return RPC_REPLY(amqp_queue_declare_ok_t);
+}
+
+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)
+{
+ amqp_rpc_reply =
+ AMQP_SIMPLE_RPC(state, channel, QUEUE, BIND, BIND_OK,
+ amqp_queue_bind_t,
+ 0, queue, exchange, routing_key, 0, arguments);
+ return RPC_REPLY(amqp_queue_bind_ok_t);
+}
+
+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_rpc_reply =
+ AMQP_SIMPLE_RPC(state, channel, BASIC, CONSUME, CONSUME_OK,
+ amqp_basic_consume_t,
+ 0, queue, consumer_tag, no_local, no_ack, exclusive, 0);
+ return RPC_REPLY(amqp_basic_consume_ok_t);
}