summaryrefslogtreecommitdiff
path: root/librabbitmq/amqp.h
diff options
context:
space:
mode:
authorMichael Steinert <mike.steinert@gmail.com>2012-06-08 15:38:22 -0600
committerAlan Antonuk <alan.antonuk@gmail.com>2013-04-09 15:48:03 -0700
commit0f022fce389543404f86824ed6c5720d2502cd09 (patch)
tree6e39adb0a9268d32e6873a48723f3d84c1316e87 /librabbitmq/amqp.h
parent7240f48af34aea8412473f29e93f6443f79230db (diff)
downloadrabbitmq-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.h53
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>