From 0f022fce389543404f86824ed6c5720d2502cd09 Mon Sep 17 00:00:00 2001 From: Michael Steinert Date: Fri, 8 Jun 2012 15:38:22 -0600 Subject: 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 --- examples/amqps_bind.c | 37 ++++++++++++++++++++++++++++--------- examples/amqps_consumer.c | 38 ++++++++++++++++++++++++++++---------- examples/amqps_exchange_declare.c | 37 ++++++++++++++++++++++++++++--------- examples/amqps_listen.c | 37 ++++++++++++++++++++++++++++--------- examples/amqps_listenq.c | 37 ++++++++++++++++++++++++++++--------- examples/amqps_producer.c | 37 ++++++++++++++++++++++++++++--------- examples/amqps_sendstring.c | 37 ++++++++++++++++++++++++++++--------- examples/amqps_unbind.c | 37 ++++++++++++++++++++++++++++--------- examples/utils.c | 12 +++++++++++- examples/utils.h | 1 + 10 files changed, 236 insertions(+), 74 deletions(-) (limited to 'examples') diff --git a/examples/amqps_bind.c b/examples/amqps_bind.c index 1e2c84f..3255e70 100644 --- a/examples/amqps_bind.c +++ b/examples/amqps_bind.c @@ -35,19 +35,18 @@ #include #include -#include +#include #include #include "utils.h" int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *exchange; char const *bindingkey; char const *queue; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; if (argc < 6) { @@ -64,11 +63,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 6 ? argv[6] : NULL, - argc > 8 ? argv[7] : NULL, - argc > 8 ? argv[8] : NULL), - "Opening SSL/TLS socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 6) { + status = amqp_ssl_socket_set_cacert(socket, argv[6]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 8) { + status = amqp_ssl_socket_set_key(socket, argv[7], argv[8]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_consumer.c b/examples/amqps_consumer.c index 31d251d..cb47dff 100644 --- a/examples/amqps_consumer.c +++ b/examples/amqps_consumer.c @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include @@ -115,13 +115,11 @@ static void run(amqp_connection_state_t conn) int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *exchange; char const *bindingkey; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; - amqp_bytes_t queuename; if (argc < 3) { @@ -137,11 +135,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 3 ? argv[3] : NULL, - argc > 5 ? argv[4] : NULL, - argc > 5 ? argv[5] : NULL), - "Opening SSL/TLS socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 3) { + status = amqp_ssl_socket_set_cacert(socket, argv[3]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 4) { + status = amqp_ssl_socket_set_key(socket, argv[5], argv[5]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_exchange_declare.c b/examples/amqps_exchange_declare.c index 6e81087..1310235 100644 --- a/examples/amqps_exchange_declare.c +++ b/examples/amqps_exchange_declare.c @@ -35,18 +35,17 @@ #include #include -#include +#include #include #include "utils.h" int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *exchange; char const *exchangetype; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; if (argc < 5) { @@ -62,11 +61,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 5 ? argv[5] : NULL, - argc > 7 ? argv[6] : NULL, - argc > 7 ? argv[7] : NULL), - "Opening SSL/TLS socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 5) { + status = amqp_ssl_socket_set_cacert(socket, argv[5]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 7) { + status = amqp_ssl_socket_set_key(socket, argv[6], argv[7]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_listen.c b/examples/amqps_listen.c index 306bbaa..c6344bd 100644 --- a/examples/amqps_listen.c +++ b/examples/amqps_listen.c @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include @@ -44,11 +44,10 @@ int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *exchange; char const *bindingkey; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; amqp_bytes_t queuename; @@ -66,11 +65,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 5 ? argv[5] : NULL, - argc > 7 ? argv[6] : NULL, - argc > 7 ? argv[7] : NULL), - "Opening socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 5) { + status = amqp_ssl_socket_set_cacert(socket, argv[5]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 7) { + status = amqp_ssl_socket_set_key(socket, argv[6], argv[7]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_listenq.c b/examples/amqps_listenq.c index 90b608a..0a9c687 100644 --- a/examples/amqps_listenq.c +++ b/examples/amqps_listenq.c @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include @@ -44,10 +44,9 @@ int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *queuename; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; if (argc < 4) { @@ -62,11 +61,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 4 ? argv[4] : NULL, - argc > 6 ? argv[5] : NULL, - argc > 6 ? argv[6] : NULL), - "Opening socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 4) { + status = amqp_ssl_socket_set_cacert(socket, argv[4]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 6) { + status = amqp_ssl_socket_set_key(socket, argv[5], argv[6]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_producer.c b/examples/amqps_producer.c index 6e00f29..43649ad 100644 --- a/examples/amqps_producer.c +++ b/examples/amqps_producer.c @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include "utils.h" @@ -106,11 +106,10 @@ static void send_batch(amqp_connection_state_t conn, int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; int rate_limit; int message_count; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; if (argc < 5) { @@ -126,11 +125,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 5 ? argv[5] : NULL, - argc > 7 ? argv[6] : NULL, - argc > 7 ? argv[7] : NULL), - "Opening SSL/TLS socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 5) { + status = amqp_ssl_socket_set_cacert(socket, argv[5]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 7) { + status = amqp_ssl_socket_set_key(socket, argv[6], argv[7]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_sendstring.c b/examples/amqps_sendstring.c index 2315982..a888da8 100644 --- a/examples/amqps_sendstring.c +++ b/examples/amqps_sendstring.c @@ -35,19 +35,18 @@ #include #include -#include +#include #include #include "utils.h" int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *exchange; char const *routingkey; char const *messagebody; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; if (argc < 6) { @@ -64,11 +63,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 6 ? argv[6] : NULL, - argc > 8 ? argv[7] : NULL, - argc > 8 ? argv[8] : NULL), - "Opening socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 6) { + status = amqp_ssl_socket_set_cacert(socket, argv[6]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 8) { + status = amqp_ssl_socket_set_key(socket, argv[7], argv[8]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/amqps_unbind.c b/examples/amqps_unbind.c index e429c6d..e9f4317 100644 --- a/examples/amqps_unbind.c +++ b/examples/amqps_unbind.c @@ -35,19 +35,18 @@ #include #include -#include +#include #include #include "utils.h" int main(int argc, char const * const *argv) { char const *hostname; - int port; + int port, status; char const *exchange; char const *bindingkey; char const *queue; - - int sockfd; + amqp_socket_t *socket; amqp_connection_state_t conn; if (argc < 6) { @@ -64,11 +63,31 @@ int main(int argc, char const * const *argv) { conn = amqp_new_connection(); - die_on_error(sockfd = amqp_open_ssl_socket(conn, hostname, port, - argc > 6 ? argv[6] : NULL, - argc > 8 ? argv[7] : NULL, - argc > 8 ? argv[8] : NULL), - "Opening socket"); + socket = amqp_ssl_socket_new(); + if (!socket) { + die("creating SSL/TLS socket"); + } + + if (argc > 6) { + status = amqp_ssl_socket_set_cacert(socket, argv[6]); + if (status) { + die("setting CA certificate"); + } + } + + if (argc > 8) { + status = amqp_ssl_socket_set_key(socket, argv[7], argv[8]); + if (status) { + die("setting client key/cert"); + } + } + + status = amqp_socket_open(socket, hostname, port); + if (status) { + die("opening SSL/TLS connection"); + } + + amqp_set_socket(conn, socket); die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in"); amqp_channel_open(conn, 1); diff --git a/examples/utils.c b/examples/utils.c index 609c354..0830738 100644 --- a/examples/utils.c +++ b/examples/utils.c @@ -34,6 +34,7 @@ * ***** END LICENSE BLOCK ***** */ +#include #include #include #include @@ -45,8 +46,17 @@ #include "utils.h" -void die_on_error(int x, char const *context) +void die(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, "\n"); + exit(1); +} + +void die_on_error(int x, char const *context) { if (x < 0) { char *errstr = amqp_error_string(-x); fprintf(stderr, "%s: %s\n", context, errstr); diff --git a/examples/utils.h b/examples/utils.h index 2e7b15f..dea86da 100644 --- a/examples/utils.h +++ b/examples/utils.h @@ -37,6 +37,7 @@ * ***** END LICENSE BLOCK ***** */ +void die(const char *fmt, ...); extern void die_on_error(int x, char const *context); extern void die_on_amqp_error(amqp_rpc_reply_t x, char const *context); -- cgit v1.2.1