From 66a0a987914626fc0ea86067a0ea1dd7a2bebdd2 Mon Sep 17 00:00:00 2001 From: David Wragg Date: Sun, 30 May 2010 23:31:40 +0100 Subject: Make error codes returned by librabbitmq functions opaque Windows doesn't generally use POSIX error codes, which poses a problem for librabbitmq's approach of using those error codes in its API. So make the librabbitmq error codes opaque: They are still be integers, but client code is not supposed to assume anything about them, except that they can be passed to a new amqp_error_string() function which returns the corresponding error message Internally, the error codes are either taken from a set of librabbitmq-specific values, or correspond to an OS-specific (POSIX or win32) error code, with a simple encoding to indicate which is which. --- librabbitmq/amqp_api.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'librabbitmq/amqp_api.c') diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index 91b0bf8..3a4440f 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -60,6 +60,41 @@ #include +static const char *client_error_strings[ERROR_MAX] = { + "could not allocate memory", /* ERROR_NO_MEMORY */ + "received bad AMQP data", /* ERROR_BAD_AQMP_DATA */ + "unknown AMQP class id", /* ERROR_UNKOWN_CLASS */ + "unknown AMQP method id", /* ERROR_UNKOWN_METHOD */ + "unknown host", /* ERROR_HOST_NOT_FOUND */ + "incompatible AMQP version", /* ERROR_INCOMPATIBLE_AMQP_VERSION */ + "connection closed unexpectedly", /* ERROR_CONNECTION_CLOSED */ +}; + +const char *amqp_error_string(int err) +{ + const char *str; + int category = (err & ERROR_CATEGORY_MASK); + err = (err & ~ERROR_CATEGORY_MASK); + + switch (category) { + case ERROR_CATEGORY_CLIENT: + if (err < 1 || err > ERROR_MAX) + str = "(undefined librabbitmq error)"; + else + str = client_error_strings[err - 1]; + break; + + case ERROR_CATEGORY_OS: + str = strerror(err); + break; + + default: + str = "(undefined error category)"; + } + + return strdup(str); +} + #define RPC_REPLY(replytype) \ (state->most_recent_api_result.reply_type == AMQP_RESPONSE_NORMAL \ ? (replytype *) state->most_recent_api_result.reply.decoded \ -- cgit v1.2.1 From 1c198e88d1a0c74676f8d6fade99b2531ba815b8 Mon Sep 17 00:00:00 2001 From: David Wragg Date: Sun, 30 May 2010 23:31:40 +0100 Subject: A Windows port, using MinGW/MSYS --- librabbitmq/amqp_api.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'librabbitmq/amqp_api.c') diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index 3a4440f..9918819 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -52,7 +52,6 @@ #include #include #include -#include #include "amqp.h" #include "amqp_framing.h" @@ -85,9 +84,8 @@ const char *amqp_error_string(int err) break; case ERROR_CATEGORY_OS: - str = strerror(err); - break; - + return amqp_os_error_string(err); + default: str = "(undefined error category)"; } -- cgit v1.2.1 From 7178efdeed81380bffa8013774efbac15e45bf81 Mon Sep 17 00:00:00 2001 From: David Wragg Date: Mon, 26 Jul 2010 02:24:26 +0100 Subject: ERROR_HOST_NOT_FOUND -> ERROR_GETHOSTBYNAME_FAILED --- librabbitmq/amqp_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'librabbitmq/amqp_api.c') diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index 3724a37..722bc86 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -64,7 +64,7 @@ static const char *client_error_strings[ERROR_MAX] = { "received bad AMQP data", /* ERROR_BAD_AQMP_DATA */ "unknown AMQP class id", /* ERROR_UNKOWN_CLASS */ "unknown AMQP method id", /* ERROR_UNKOWN_METHOD */ - "unknown host", /* ERROR_HOST_NOT_FOUND */ + "unknown host", /* ERROR_GETHOSTBYNAME_FAILED */ "incompatible AMQP version", /* ERROR_INCOMPATIBLE_AMQP_VERSION */ "connection closed unexpectedly", /* ERROR_CONNECTION_CLOSED */ }; -- cgit v1.2.1 From 27235c0046dfc87b4f57c652681df4436fce3e0e Mon Sep 17 00:00:00 2001 From: David Wragg Date: Wed, 28 Jul 2010 01:08:49 +0100 Subject: Fix "const char *" to "void *" conversion warnings Functions returning a heap-allocated string should return a "char *", not a "const char *": Because the result is heap-allocated and becomes the responsibility of the caller, it is certainly modifiable. And the pointer will likely get passed to free(), triggering a conversion warning from gcc. So remove all the relevant consts. --- librabbitmq/amqp_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'librabbitmq/amqp_api.c') diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index 722bc86..2b1ed54 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -69,7 +69,7 @@ static const char *client_error_strings[ERROR_MAX] = { "connection closed unexpectedly", /* ERROR_CONNECTION_CLOSED */ }; -const char *amqp_error_string(int err) +char *amqp_error_string(int err) { const char *str; int category = (err & ERROR_CATEGORY_MASK); -- cgit v1.2.1 From fb9f632aadd6160fd73973dee758c1d64873f694 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Wed, 4 Aug 2010 17:00:54 +0100 Subject: it's called routing_key in the spec --- librabbitmq/amqp_api.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'librabbitmq/amqp_api.c') diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index 27fe19a..82f33e1 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -253,13 +253,13 @@ 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 binding_key, + amqp_bytes_t routing_key, amqp_table_t arguments) { state->most_recent_api_result = AMQP_SIMPLE_RPC(state, channel, QUEUE, UNBIND, UNBIND_OK, amqp_queue_unbind_t, - 0, queue, exchange, binding_key, arguments); + 0, queue, exchange, routing_key, arguments); return RPC_REPLY(amqp_queue_unbind_ok_t); } -- cgit v1.2.1 From 10cefe79af380e0402907683a60f93ab9850fdca Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Mon, 16 Aug 2010 13:35:08 +0100 Subject: removed auto-delete parameter from exchange.declare --- librabbitmq/amqp_api.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'librabbitmq/amqp_api.c') diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c index 82f33e1..b2793ff 100644 --- a/librabbitmq/amqp_api.c +++ b/librabbitmq/amqp_api.c @@ -196,13 +196,12 @@ amqp_exchange_declare_ok_t *amqp_exchange_declare(amqp_connection_state_t state, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, - amqp_boolean_t auto_delete, amqp_table_t arguments) { state->most_recent_api_result = AMQP_SIMPLE_RPC(state, channel, EXCHANGE, DECLARE, DECLARE_OK, amqp_exchange_declare_t, - 0, exchange, type, passive, durable, auto_delete, 0, 0, arguments); + 0, exchange, type, passive, durable, 0, 0, 0, arguments); return RPC_REPLY(amqp_exchange_declare_ok_t); } -- cgit v1.2.1