From 50fc9b2b9d369c0f8b4ee90cfd7b38513adddcfd Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Sat, 23 Nov 2013 16:08:20 +0100 Subject: [PATCH] patches: Added amqp_0_4.dpatch: Added support for rabbitmq-c 0.4.x. --- debian/changelog | 4 +- debian/patches/00list | 1 + debian/patches/amqp_0_4.dpatch | 109 +++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 debian/patches/amqp_0_4.dpatch diff --git a/debian/changelog b/debian/changelog index 81156ad..a1f2900 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,8 +8,10 @@ collectd (5.4.0-3) unstable; urgency=low - Removed sample configuration for the write_mongodb plugin; the plugin is not available on Debian; thanks to Bryan Fullerton for reporting this (cf. LP:#1206813, Closes: #724699). + * debian/patches: + - Added amqp_0_4.dpatch: Added support for rabbitmq-c 0.4.x. - -- Sebastian Harl Sat, 23 Nov 2013 11:51:43 +0100 + -- Sebastian Harl Sat, 23 Nov 2013 16:08:05 +0100 collectd (5.4.0-2) unstable; urgency=low diff --git a/debian/patches/00list b/debian/patches/00list index 23aacf6..73b489e 100644 --- a/debian/patches/00list +++ b/debian/patches/00list @@ -2,3 +2,4 @@ rrd_filter_path.dpatch collection_conf_path.dpatch myplugin_includes.dpatch bts559801_plugin_find_fix.dpatch +amqp_0_4.dpatch diff --git a/debian/patches/amqp_0_4.dpatch b/debian/patches/amqp_0_4.dpatch new file mode 100644 index 0000000..58d519e --- /dev/null +++ b/debian/patches/amqp_0_4.dpatch @@ -0,0 +1,109 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## amqp_0_4.dpatch by Sebastian Harl +## +## DP: amqp plugin: Added support for rabbitmq-c 0.4.x. +## DP: +## DP: Upstream introduced a new socket interface and deprecated the old one. +## DP: This leads to compiler errors when using GCC and -Werror. +## DP: Forwarded as https://github.com/collectd/collectd/pull/490 + +@DPATCH@ + +diff --git a/src/amqp.c b/src/amqp.c +index 767a877..bebaea7 100644 +--- a/src/amqp.c ++++ b/src/amqp.c +@@ -38,6 +38,18 @@ + #include + #include + ++#if 1 ++# include ++#endif ++#if 0 ++# include ++#endif ++#if 1 ++/* rabbitmq-c does not currently ship amqp_socket.h ++ * and, thus, does not define this function. */ ++int amqp_socket_close(amqp_socket_t *); ++#endif ++ + /* Defines for the delivery mode. I have no idea why they're not defined by the + * library.. */ + #define CAMQP_DM_VOLATILE 1 +@@ -390,8 +402,12 @@ static int camqp_setup_queue (camqp_config_t *conf) /* {{{ */ + static int camqp_connect (camqp_config_t *conf) /* {{{ */ + { + amqp_rpc_reply_t reply; +- int sockfd; + int status; ++#if 1 ++ amqp_socket_t *socket; ++#else ++ int sockfd; ++#endif + + if (conf->connection != NULL) + return (0); +@@ -403,6 +419,34 @@ static int camqp_connect (camqp_config_t *conf) /* {{{ */ + return (ENOMEM); + } + ++#if 1 ++# define CLOSE_SOCKET() amqp_socket_close (socket) ++ /* TODO: add support for SSL using amqp_ssl_socket_new ++ * and related functions */ ++ socket = amqp_tcp_socket_new (conf->connection); ++ if (! socket) ++ { ++ ERROR ("amqp plugin: amqp_tcp_socket_new failed."); ++ amqp_destroy_connection (conf->connection); ++ conf->connection = NULL; ++ return (ENOMEM); ++ } ++ ++ status = amqp_socket_open (socket, CONF(conf, host), conf->port); ++ if (status < 0) ++ { ++ char errbuf[1024]; ++ status *= -1; ++ ERROR ("amqp plugin: amqp_socket_open failed: %s", ++ sstrerror (status, errbuf, sizeof (errbuf))); ++ CLOSE_SOCKET (); ++ amqp_destroy_connection (conf->connection); ++ conf->connection = NULL; ++ return (status); ++ } ++#else /* HAVE_AMQP_TCP_SOCKET */ ++# define CLOSE_SOCKET close(sockfd) ++ /* this interface is deprecated as of rabbitmq-c 0.4 */ + sockfd = amqp_open_socket (CONF(conf, host), conf->port); + if (sockfd < 0) + { +@@ -415,6 +459,7 @@ static int camqp_connect (camqp_config_t *conf) /* {{{ */ + return (status); + } + amqp_set_sockfd (conf->connection, sockfd); ++#endif + + reply = amqp_login (conf->connection, CONF(conf, vhost), + /* channel max = */ 0, +@@ -427,7 +472,7 @@ static int camqp_connect (camqp_config_t *conf) /* {{{ */ + ERROR ("amqp plugin: amqp_login (vhost = %s, user = %s) failed.", + CONF(conf, vhost), CONF(conf, user)); + amqp_destroy_connection (conf->connection); +- close (sockfd); ++ CLOSE_SOCKET (); + conf->connection = NULL; + return (1); + } +@@ -440,7 +485,7 @@ static int camqp_connect (camqp_config_t *conf) /* {{{ */ + ERROR ("amqp plugin: amqp_channel_open failed."); + amqp_connection_close (conf->connection, AMQP_REPLY_SUCCESS); + amqp_destroy_connection (conf->connection); +- close(sockfd); ++ CLOSE_SOCKET (); + conf->connection = NULL; + return (1); + } -- 2.30.2