diff options
author | Michael Steinert <mike.steinert@gmail.com> | 2012-06-08 15:38:22 -0600 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2013-04-09 15:48:03 -0700 |
commit | 0f022fce389543404f86824ed6c5720d2502cd09 (patch) | |
tree | 6e39adb0a9268d32e6873a48723f3d84c1316e87 /librabbitmq/amqp.h | |
parent | 7240f48af34aea8412473f29e93f6443f79230db (diff) | |
download | rabbitmq-c-github-ask-0f022fce389543404f86824ed6c5720d2502cd09.tar.gz |
Propose new socket API
The general idea is to have a non-instantiable socket base class.
Connection-specific sub-classes provide a constructor and methods for
modifying connection parameters. `amqp_socket_close()` is the
destructor.
Signed-off-by: Michael Steinert <mike.steinert@gmail.com>
Diffstat (limited to 'librabbitmq/amqp.h')
-rw-r--r-- | librabbitmq/amqp.h | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/librabbitmq/amqp.h b/librabbitmq/amqp.h index 0efbc74..734094b 100644 --- a/librabbitmq/amqp.h +++ b/librabbitmq/amqp.h @@ -52,7 +52,6 @@ */ #if defined(_WIN32) && defined(_MSC_VER) -struct iovec; # if defined(AMQP_BUILD) && !defined(AMQP_STATIC) # define AMQP_PUBLIC_FUNCTION __declspec(dllexport) # define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern @@ -67,7 +66,6 @@ struct iovec; # define AMQP_CALL __cdecl #elif defined(_WIN32) && defined(__BORLANDC__) -struct iovec; # if defined(AMQP_BUILD) && !defined(AMQP_STATIC) # define AMQP_PUBLIC_FUNCTION __declspec(dllexport) # define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern @@ -82,7 +80,6 @@ struct iovec; # define AMQP_CALL __cdecl #elif defined(_WIN32) && defined(__MINGW32__) -struct iovec; # if defined(AMQP_BUILD) && !defined(AMQP_STATIC) # define AMQP_PUBLIC_FUNCTION __declspec(dllexport) # define AMQP_PUBLIC_VARIABLE __declspec(dllexport) @@ -97,7 +94,6 @@ struct iovec; # define AMQP_CALL __cdecl #elif defined(_WIN32) && defined(__CYGWIN__) -struct iovec; # if defined(AMQP_BUILD) && !defined(AMQP_STATIC) # define AMQP_PUBLIC_FUNCTION __declspec(dllexport) # define AMQP_PUBLIC_VARIABLE __declspec(dllexport) @@ -124,6 +120,13 @@ struct iovec; # define AMQP_CALL #endif +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define AMQP_DEPRECATED \ + __attribute__ ((__deprecated__)) +#else +# define AMQP_DEPRECATED +#endif + /* Define ssize_t on Win32/64 platforms See: http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-April/030649.html for details */ @@ -321,12 +324,7 @@ typedef enum amqp_sasl_method_enum_ { /* Opaque struct. */ typedef struct amqp_connection_state_t_ *amqp_connection_state_t; -/* Socket callbacks. */ -typedef ssize_t (*amqp_socket_writev_fn)(int, const struct iovec *, int, void *); -typedef ssize_t (*amqp_socket_send_fn)(int, const void *, size_t, int, void *); -typedef ssize_t (*amqp_socket_recv_fn)(int, void *, size_t, int, void *); -typedef int (*amqp_socket_close_fn)(int, void *); -typedef int (*amqp_socket_error_fn)(void *); +typedef struct amqp_socket_t_ amqp_socket_t; AMQP_PUBLIC_FUNCTION char const * @@ -389,17 +387,12 @@ AMQP_CALL amqp_get_sockfd(amqp_connection_state_t state); AMQP_PUBLIC_FUNCTION void -AMQP_CALL amqp_set_sockfd(amqp_connection_state_t state, int sockfd); +AMQP_CALL amqp_set_sockfd(amqp_connection_state_t state, int sockfd) + AMQP_DEPRECATED; AMQP_PUBLIC_FUNCTION void -amqp_set_sockfd_full(amqp_connection_state_t state, int sockfd, - amqp_socket_writev_fn writev_fn, - amqp_socket_send_fn send_fn, - amqp_socket_recv_fn recv_fn, - amqp_socket_close_fn close_fn, - amqp_socket_error_fn error_fn, - void *user_data); +AMQP_CALL amqp_set_socket(amqp_connection_state_t state, amqp_socket_t *socket); AMQP_PUBLIC_FUNCTION int @@ -444,7 +437,8 @@ AMQP_CALL amqp_table_entry_cmp(void const *entry1, void const *entry2); AMQP_PUBLIC_FUNCTION int -AMQP_CALL amqp_open_socket(char const *hostname, int portnumber); +AMQP_CALL amqp_open_socket(char const *hostname, int portnumber) + AMQP_DEPRECATED; AMQP_PUBLIC_FUNCTION int @@ -599,6 +593,27 @@ AMQP_PUBLIC_FUNCTION int AMQP_CALL amqp_parse_url(char *url, struct amqp_connection_info *parsed); +/* socket API */ +AMQP_PUBLIC_FUNCTION +int +AMQP_CALL +amqp_socket_open(amqp_socket_t *self, const char *host, int port); + +AMQP_PUBLIC_FUNCTION +int +AMQP_CALL +amqp_socket_close(amqp_socket_t *self); + +AMQP_PUBLIC_FUNCTION +int +AMQP_CALL +amqp_socket_error(amqp_socket_t *self); + +AMQP_PUBLIC_FUNCTION +int +AMQP_CALL +amqp_socket_get_sockfd(amqp_socket_t *self); + AMQP_END_DECLS #include <amqp_framing.h> |