Code

patches: Added amqp_0_4.dpatch: Added support for rabbitmq-c 0.4.x. collectd-5.4.0-3
authorSebastian Harl <sh@tokkee.org>
Sat, 23 Nov 2013 15:08:20 +0000 (16:08 +0100)
committerSebastian Harl <sh@tokkee.org>
Sat, 23 Nov 2013 15:08:20 +0000 (16:08 +0100)
debian/changelog
debian/patches/00list
debian/patches/amqp_0_4.dpatch [new file with mode: 0644]

index 81156add4fe8d6f98ef1cfe40f3e2a2924d146f1..a1f2900f2f4fcbdf12c146aa94dcb04220cda7f8 100644 (file)
@@ -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 <tokkee@debian.org>  Sat, 23 Nov 2013 11:51:43 +0100
+ -- Sebastian Harl <tokkee@debian.org>  Sat, 23 Nov 2013 16:08:05 +0100
 
 collectd (5.4.0-2) unstable; urgency=low
 
index 23aacf62e043c084fffcce668440b01881337668..73b489e43f4839c5538bbda5d2a37bb0e3ad36ca 100644 (file)
@@ -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 (file)
index 0000000..58d519e
--- /dev/null
@@ -0,0 +1,109 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## amqp_0_4.dpatch by Sebastian Harl <sh@tokkee.org>
+##
+## 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 <amqp.h>
+ #include <amqp_framing.h>
++#if 1
++# include <amqp_tcp_socket.h>
++#endif
++#if 0
++# include <amqp_socket.h>
++#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);
+     }