Browse Source

rip out rabbitMQ

Grant Limberg 5 years ago
parent
commit
73b1d57b13

+ 3 - 4
controller/EmbeddedNetworkController.cpp

@@ -456,15 +456,14 @@ static bool _parseRule(json &r,ZT_VirtualNetworkRule &rule)
 
 } // anonymous namespace
 
-EmbeddedNetworkController::EmbeddedNetworkController(Node *node,const char *ztPath,const char *dbPath, int listenPort, MQConfig *mqc) :
+EmbeddedNetworkController::EmbeddedNetworkController(Node *node,const char *ztPath,const char *dbPath, int listenPort) :
 	_startTime(OSUtils::now()),
 	_listenPort(listenPort),
 	_node(node),
 	_ztPath(ztPath),
 	_path(dbPath),
 	_sender((NetworkController::Sender *)0),
-	_db(this),
-	_mqc(mqc)
+	_db(this)
 {
 }
 
@@ -485,7 +484,7 @@ void EmbeddedNetworkController::init(const Identity &signingId,Sender *sender)
 
 #ifdef ZT_CONTROLLER_USE_LIBPQ
 	if ((_path.length() > 9)&&(_path.substr(0,9) == "postgres:")) {
-		_db.addDB(std::shared_ptr<DB>(new PostgreSQL(_signingId,_path.substr(9).c_str(), _listenPort, _mqc)));
+		_db.addDB(std::shared_ptr<DB>(new PostgreSQL(_signingId,_path.substr(9).c_str(), _listenPort)));
 	} else {
 #endif
 		_db.addDB(std::shared_ptr<DB>(new FileDB(_path.c_str())));

+ 1 - 5
controller/EmbeddedNetworkController.hpp

@@ -44,8 +44,6 @@ namespace ZeroTier {
 
 class Node;
 
-struct MQConfig;
-
 class EmbeddedNetworkController : public NetworkController,public DB::ChangeListener
 {
 public:
@@ -53,7 +51,7 @@ public:
 	 * @param node Parent node
 	 * @param dbPath Database path (file path or database credentials)
 	 */
-	EmbeddedNetworkController(Node *node,const char *ztPath,const char *dbPath, int listenPort, MQConfig *mqc = NULL);
+	EmbeddedNetworkController(Node *node,const char *ztPath,const char *dbPath, int listenPort);
 	virtual ~EmbeddedNetworkController();
 
 	virtual void init(const Identity &signingId,Sender *sender);
@@ -150,8 +148,6 @@ private:
 
 	std::unordered_map< _MemberStatusKey,_MemberStatus,_MemberStatusHash > _memberStatus;
 	std::mutex _memberStatus_l;
-
-	MQConfig *_mqc;
 };
 
 } // namespace ZeroTier

+ 12 - 88
controller/PostgreSQL.cpp

@@ -17,13 +17,12 @@
 
 #include "../node/Constants.hpp"
 #include "EmbeddedNetworkController.hpp"
-#include "RabbitMQ.hpp"
 #include "../version.h"
+#include "hiredis.h"
 
 #include <libpq-fe.h>
 #include <sstream>
-#include <amqp.h>
-#include <amqp_tcp_socket.h>
+
 
 using json = nlohmann::json;
 
@@ -69,7 +68,7 @@ std::string join(const std::vector<std::string> &elements, const char * const se
 
 using namespace ZeroTier;
 
-PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, MQConfig *mqc)
+PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort)
 	: DB()
 	, _myId(myId)
 	, _myAddress(myId.address())
@@ -78,7 +77,6 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, M
 	, _run(1)
 	, _waitNoticePrinted(false)
 	, _listenPort(listenPort)
-	, _mqc(mqc)
 {
 	char myAddress[64];
 	_myAddressStr = myId.address().toString(myAddress);
@@ -593,7 +591,7 @@ void PostgreSQL::heartbeat()
 			std::string build = std::to_string(ZEROTIER_ONE_VERSION_BUILD);
 			std::string now = std::to_string(OSUtils::now());
 			std::string host_port = std::to_string(_listenPort);
-			std::string use_rabbitmq = (_mqc != NULL) ? "true" : "false";
+			std::string use_rabbitmq = (false) ? "true" : "false";
 			const char *values[10] = {
 				controllerId,
 				hostname,
@@ -645,10 +643,10 @@ void PostgreSQL::membersDbWatcher()
 
 	initializeMembers(conn);
 
-	if (this->_mqc != NULL) {
-		PQfinish(conn);
-		conn = NULL;
-		_membersWatcher_RabbitMQ();
+	if (false) {
+		// PQfinish(conn);
+		// conn = NULL;
+		// _membersWatcher_RabbitMQ();
 	} else {
 		_membersWatcher_Postgres(conn);
 		PQfinish(conn);
@@ -703,43 +701,6 @@ void PostgreSQL::_membersWatcher_Postgres(PGconn *conn) {
 	}
 }
 
-void PostgreSQL::_membersWatcher_RabbitMQ() {
-	char buf[11] = {0};
-	std::string qname = "member_"+ std::string(_myAddress.toString(buf));
-	RabbitMQ rmq(_mqc, qname.c_str());
-	try {
-		rmq.init();
-	} catch (std::runtime_error &e) {
-		fprintf(stderr, "RABBITMQ ERROR: %s\n", e.what());
-		exit(11);
-	}
-	while (_run == 1) {
-		try {
-			std::string msg = rmq.consume();
-			// fprintf(stderr, "Got Member Update: %s\n", msg.c_str());
-			if (msg.empty()) {
-				continue;
-			}
-			json tmp(json::parse(msg));
-			json &ov = tmp["old_val"];
-			json &nv = tmp["new_val"];
-			json oldConfig, newConfig;
-			if (ov.is_object()) oldConfig = ov;
-			if (nv.is_object()) newConfig = nv;
-			if (oldConfig.is_object() || newConfig.is_object()) {
-				_memberChanged(oldConfig,newConfig,(this->_ready>=2));
-			}
-		} catch (std::runtime_error &e) {
-			fprintf(stderr, "RABBITMQ ERROR member change: %s\n", e.what());
-			break;
-		} catch(std::exception &e ) {
-			fprintf(stderr, "RABBITMQ ERROR member change: %s\n", e.what());
-		} catch(...) {
-			fprintf(stderr, "RABBITMQ ERROR member change: unknown error\n");
-		}
-	}
-}
-
 void PostgreSQL::_membersWatcher_Reids() {
 	char buff[11] = {0};
 	
@@ -756,10 +717,10 @@ void PostgreSQL::networksDbWatcher()
 
 	initializeNetworks(conn);
 
-	if (this->_mqc != NULL) {
-		PQfinish(conn);
-		conn = NULL;
-		_networksWatcher_RabbitMQ();
+	if (false) {
+		// PQfinish(conn);
+		// conn = NULL;
+		// _networksWatcher_RabbitMQ();
 	} else {
 		_networksWatcher_Postgres(conn);
 		PQfinish(conn);
@@ -812,43 +773,6 @@ void PostgreSQL::_networksWatcher_Postgres(PGconn *conn) {
 	}
 }
 
-void PostgreSQL::_networksWatcher_RabbitMQ() {
-	char buf[11] = {0};
-	std::string qname = "network_"+ std::string(_myAddress.toString(buf));
-	RabbitMQ rmq(_mqc, qname.c_str());
-	try {
-		rmq.init();
-	} catch (std::runtime_error &e) {
-		fprintf(stderr, "RABBITMQ ERROR: %s\n", e.what());
-		exit(11);
-	}
-	while (_run == 1) {
-		try {
-			std::string msg = rmq.consume();
-			if (msg.empty()) {
-				continue;
-			}
-			// fprintf(stderr, "Got network update: %s\n", msg.c_str());
-			json tmp(json::parse(msg));
-			json &ov = tmp["old_val"];
-			json &nv = tmp["new_val"];
-			json oldConfig, newConfig;
-			if (ov.is_object()) oldConfig = ov;
-			if (nv.is_object()) newConfig = nv;
-			if (oldConfig.is_object()||newConfig.is_object()) {
-				_networkChanged(oldConfig,newConfig,(this->_ready >= 2));
-			}
-		} catch (std::runtime_error &e) {
-			fprintf(stderr, "RABBITMQ ERROR: %s\n", e.what());
-			break;
-		} catch (std::exception &e) {
-			fprintf(stderr, "RABBITMQ ERROR network watcher: %s\n", e.what());
-		} catch(...) {
-			fprintf(stderr, "RABBITMQ ERROR network watcher: unknown error\n");
-		}
-	}
-}
-
 void PostgreSQL::_networksWatcher_Redis() {
 
 }

+ 1 - 7
controller/PostgreSQL.hpp

@@ -26,8 +26,6 @@ typedef struct pg_conn PGconn;
 
 namespace ZeroTier {
 
-struct MQConfig;
-
 /**
  * A controller database driver that talks to PostgreSQL
  *
@@ -37,7 +35,7 @@ struct MQConfig;
 class PostgreSQL : public DB
 {
 public:
-	PostgreSQL(const Identity &myId, const char *path, int listenPort, MQConfig *mqc = NULL);
+	PostgreSQL(const Identity &myId, const char *path, int listenPort);
 	virtual ~PostgreSQL();
 
 	virtual bool waitForReady();
@@ -59,10 +57,8 @@ private:
 	void heartbeat();
 	void membersDbWatcher();
 	void _membersWatcher_Postgres(PGconn *conn);
-	void _membersWatcher_RabbitMQ();
 	void networksDbWatcher();
 	void _networksWatcher_Postgres(PGconn *conn);
-	void _networksWatcher_RabbitMQ();
 
 	void _membersWatcher_Reids();
 	void _networksWatcher_Redis();
@@ -98,8 +94,6 @@ private:
 	mutable volatile bool _waitNoticePrinted;
 
 	int _listenPort;
-
-	MQConfig *_mqc;
 };
 
 } // namespace ZeroTier

+ 0 - 120
controller/RabbitMQ.cpp

@@ -1,120 +0,0 @@
-/*
- * Copyright (c)2019 ZeroTier, Inc.
- *
- * Use of this software is governed by the Business Source License included
- * in the LICENSE.TXT file in the project's root directory.
- *
- * Change Date: 2023-01-01
- *
- * On the date above, in accordance with the Business Source License, use
- * of this software will be governed by version 2.0 of the Apache License.
- */
-/****/
-
-#include "RabbitMQ.hpp"
-
-#ifdef ZT_CONTROLLER_USE_LIBPQ
-
-#include <amqp.h>
-#include <amqp_tcp_socket.h>
-#include <stdexcept>
-#include <cstring>
-
-namespace ZeroTier
-{
-
-RabbitMQ::RabbitMQ(MQConfig *cfg, const char *queueName)
-	: _mqc(cfg)
-	, _qName(queueName)
-	, _socket(NULL)
-	, _status(0)
-{
-}
-
-RabbitMQ::~RabbitMQ()
-{
-	amqp_channel_close(_conn, _channel, AMQP_REPLY_SUCCESS);
-	amqp_connection_close(_conn, AMQP_REPLY_SUCCESS);
-	amqp_destroy_connection(_conn);
-}
-
-void RabbitMQ::init()
-{
-	struct timeval tval;
-	memset(&tval, 0, sizeof(struct timeval));
-	tval.tv_sec = 5;
-
-	fprintf(stderr, "Initializing RabbitMQ %s\n", _qName);
-	_conn = amqp_new_connection();
-	_socket = amqp_tcp_socket_new(_conn);
-	if (!_socket) {
-		throw std::runtime_error("Can't create socket for RabbitMQ");
-	}
-
-	_status = amqp_socket_open_noblock(_socket, _mqc->host.c_str(), _mqc->port, &tval);
-	if (_status) {
-		throw std::runtime_error("Can't connect to RabbitMQ");
-	}
-
-	amqp_rpc_reply_t r = amqp_login(_conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN,
-		_mqc->username.c_str(), _mqc->password.c_str());
-	if (r.reply_type != AMQP_RESPONSE_NORMAL) {
-		throw std::runtime_error("RabbitMQ Login Error");
-	}
-
-	static int chan = 0;
-	{
-		Mutex::Lock l(_chan_m);
-		_channel = ++chan;
-	}
-	amqp_channel_open(_conn, _channel);
-	r = amqp_get_rpc_reply(_conn);
-	if(r.reply_type != AMQP_RESPONSE_NORMAL) {
-		throw std::runtime_error("Error opening communication channel");
-	}
-
-	_q = amqp_queue_declare(_conn, _channel, amqp_cstring_bytes(_qName), 0, 0, 0, 0, amqp_empty_table);
-	r = amqp_get_rpc_reply(_conn);
-	if (r.reply_type != AMQP_RESPONSE_NORMAL) {
-		throw std::runtime_error("Error declaring queue " + std::string(_qName));
-	}
-
-	amqp_basic_consume(_conn, _channel, amqp_cstring_bytes(_qName), amqp_empty_bytes, 0, 1, 0, amqp_empty_table);
-	r = amqp_get_rpc_reply(_conn);
-	if (r.reply_type != AMQP_RESPONSE_NORMAL) {
-		throw std::runtime_error("Error consuming queue " + std::string(_qName));
-	}
-	fprintf(stderr, "RabbitMQ Init OK %s\n", _qName);
-}
-
-std::string RabbitMQ::consume()
-{
-	amqp_rpc_reply_t res;
-	amqp_envelope_t envelope;
-	amqp_maybe_release_buffers(_conn);
-
-	struct timeval timeout;
-	timeout.tv_sec = 1;
-	timeout.tv_usec = 0;
-
-	res = amqp_consume_message(_conn, &envelope, &timeout, 0);
-	if (res.reply_type != AMQP_RESPONSE_NORMAL) {
-		if (res.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION && res.library_error == AMQP_STATUS_TIMEOUT) {
-			// timeout waiting for message.  Return empty string
-			return "";
-		} else {
-			throw std::runtime_error("Error getting message");
-		}
-	}
-
-	std::string msg(
-		(const char*)envelope.message.body.bytes,
-		envelope.message.body.len
-	);
-	amqp_destroy_envelope(&envelope);
-	return msg;
-}
-
-}
-
-#endif // ZT_CONTROLLER_USE_LIBPQ

+ 0 - 69
controller/RabbitMQ.hpp

@@ -1,69 +0,0 @@
-/*
- * Copyright (c)2019 ZeroTier, Inc.
- *
- * Use of this software is governed by the Business Source License included
- * in the LICENSE.TXT file in the project's root directory.
- *
- * Change Date: 2023-01-01
- *
- * On the date above, in accordance with the Business Source License, use
- * of this software will be governed by version 2.0 of the Apache License.
- */
-/****/
-
-#ifndef ZT_CONTROLLER_RABBITMQ_HPP
-#define ZT_CONTROLLER_RABBITMQ_HPP
-
-#include "DB.hpp"
-#include <string>
-
-namespace ZeroTier
-{
-struct MQConfig {
-	std::string host;
-	int port;
-	std::string username;
-	std::string password;
-};
-}
-
-#ifdef ZT_CONTROLLER_USE_LIBPQ
-
-#include "../node/Mutex.hpp"
-
-#include <amqp.h>
-#include <amqp_tcp_socket.h>
-
-
-namespace ZeroTier
-{
-
-class RabbitMQ {
-public:
-	RabbitMQ(MQConfig *cfg, const char *queueName);
-	~RabbitMQ();
-
-	void init();
-
-	std::string consume();
-
-private:
-	MQConfig *_mqc;
-	const char *_qName;
-
-	amqp_socket_t *_socket;
-	amqp_connection_state_t _conn;
-	amqp_queue_declare_ok_t *_q;
-	int _status;
-
-	int _channel;
-
-	Mutex _chan_m;
-};
-
-}
-
-#endif // ZT_CONTROLLER_USE_LIBPQ
-
-#endif // ZT_CONTROLLER_RABBITMQ_HPP
-

+ 0 - 2538
ext/librabbitmq/centos_x64/include/amqp.h

@@ -1,2538 +0,0 @@
-/** \file */
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MIT
- *
- * Portions created by Alan Antonuk are Copyright (c) 2012-2014
- * Alan Antonuk. All Rights Reserved.
- *
- * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc.
- * All Rights Reserved.
- *
- * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010
- * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- * ***** END LICENSE BLOCK *****
- */
-
-#ifndef AMQP_H
-#define AMQP_H
-
-/** \cond HIDE_FROM_DOXYGEN */
-
-#ifdef __cplusplus
-#define AMQP_BEGIN_DECLS extern "C" {
-#define AMQP_END_DECLS }
-#else
-#define AMQP_BEGIN_DECLS
-#define AMQP_END_DECLS
-#endif
-
-/*
- * \internal
- * Important API decorators:
- *  AMQP_PUBLIC_FUNCTION - a public API function
- *  AMQP_PUBLIC_VARIABLE - a public API external variable
- *  AMQP_CALL - calling convension (used on Win32)
- */
-
-#if defined(_WIN32) && defined(_MSC_VER)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(_WIN32) && defined(__BORLANDC__)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(_WIN32) && defined(__MINGW32__)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(_WIN32) && defined(__CYGWIN__)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport)
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define AMQP_PUBLIC_FUNCTION __attribute__((visibility("default")))
-#define AMQP_PUBLIC_VARIABLE __attribute__((visibility("default"))) extern
-#define AMQP_CALL
-#else
-#define AMQP_PUBLIC_FUNCTION
-#define AMQP_PUBLIC_VARIABLE extern
-#define AMQP_CALL
-#endif
-
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
-#define AMQP_DEPRECATED(function) function __attribute__((__deprecated__))
-#elif defined(_MSC_VER)
-#define AMQP_DEPRECATED(function) __declspec(deprecated) function
-#else
-#define AMQP_DEPRECATED(function)
-#endif
-
-/* Define ssize_t on Win32/64 platforms
-   See: http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-April/030649.html for
-   details
-   */
-#if !defined(_W64)
-#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-#define _W64 __w64
-#else
-#define _W64
-#endif
-#endif
-
-#ifdef _MSC_VER
-#ifdef _WIN64
-typedef __int64 ssize_t;
-#else
-typedef _W64 int ssize_t;
-#endif
-#endif
-
-#if defined(_WIN32) && defined(__MINGW32__)
-#include <sys/types.h>
-#endif
-
-/** \endcond */
-
-#include <stddef.h>
-#include <stdint.h>
-
-struct timeval;
-
-AMQP_BEGIN_DECLS
-
-/**
- * \def AMQP_VERSION_MAJOR
- *
- * Major library version number compile-time constant
- *
- * The major version is incremented when backwards incompatible API changes
- * are made.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-
-/**
- * \def AMQP_VERSION_MINOR
- *
- * Minor library version number compile-time constant
- *
- * The minor version is incremented when new APIs are added. Existing APIs
- * are left alone.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-
-/**
- * \def AMQP_VERSION_PATCH
- *
- * Patch library version number compile-time constant
- *
- * The patch version is incremented when library code changes, but the API
- * is not changed.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-
-/**
- * \def AMQP_VERSION_IS_RELEASE
- *
- * Version constant set to 1 for tagged release, 0 otherwise
- *
- * NOTE: versions that are not tagged releases are not guaranteed to be API/ABI
- * compatible with older releases, and may change commit-to-commit.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-/*
- * Developer note: when changing these, be sure to update SOVERSION constants
- *  in CMakeLists.txt and configure.ac
- */
-
-#define AMQP_VERSION_MAJOR 0
-#define AMQP_VERSION_MINOR 10
-#define AMQP_VERSION_PATCH 0
-#define AMQP_VERSION_IS_RELEASE 0
-
-/**
- * \def AMQP_VERSION_CODE
- *
- * Helper macro to geneate a packed version code suitable for
- * comparison with AMQP_VERSION.
- *
- * \sa amqp_version_number() AMQP_VERSION_MAJOR, AMQP_VERSION_MINOR,
- *     AMQP_VERSION_PATCH, AMQP_VERSION_IS_RELEASE, AMQP_VERSION
- *
- * \since v0.6.1
- */
-#define AMQP_VERSION_CODE(major, minor, patch, release) \
-  ((major << 24) | (minor << 16) | (patch << 8) | (release))
-
-/**
- * \def AMQP_VERSION
- *
- * Packed version number
- *
- * AMQP_VERSION is a 4-byte unsigned integer with the most significant byte
- * set to AMQP_VERSION_MAJOR, the second most significant byte set to
- * AMQP_VERSION_MINOR, third most significant byte set to AMQP_VERSION_PATCH,
- * and the lowest byte set to AMQP_VERSION_IS_RELEASE.
- *
- * For example version 2.3.4 which is released version would be encoded as
- * 0x02030401
- *
- * \sa amqp_version_number() AMQP_VERSION_MAJOR, AMQP_VERSION_MINOR,
- *     AMQP_VERSION_PATCH, AMQP_VERSION_IS_RELEASE, AMQP_VERSION_CODE
- *
- * \since v0.4.0
- */
-#define AMQP_VERSION                                        \
-  AMQP_VERSION_CODE(AMQP_VERSION_MAJOR, AMQP_VERSION_MINOR, \
-                    AMQP_VERSION_PATCH, AMQP_VERSION_IS_RELEASE)
-
-/** \cond HIDE_FROM_DOXYGEN */
-#define AMQ_STRINGIFY(s) AMQ_STRINGIFY_HELPER(s)
-#define AMQ_STRINGIFY_HELPER(s) #s
-
-#define AMQ_VERSION_STRING          \
-  AMQ_STRINGIFY(AMQP_VERSION_MAJOR) \
-  "." AMQ_STRINGIFY(AMQP_VERSION_MINOR) "." AMQ_STRINGIFY(AMQP_VERSION_PATCH)
-/** \endcond */
-
-/**
- * \def AMQP_VERSION_STRING
- *
- * Version string compile-time constant
- *
- * Non-released versions of the library will have "-pre" appended to the
- * version string
- *
- * \sa amqp_version()
- *
- * \since v0.4.0
- */
-#if AMQP_VERSION_IS_RELEASE
-#define AMQP_VERSION_STRING AMQ_VERSION_STRING
-#else
-#define AMQP_VERSION_STRING AMQ_VERSION_STRING "-pre"
-#endif
-
-/**
- * Returns the rabbitmq-c version as a packed integer.
- *
- * See \ref AMQP_VERSION
- *
- * \return packed 32-bit integer representing version of library at runtime
- *
- * \sa AMQP_VERSION, amqp_version()
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-uint32_t AMQP_CALL amqp_version_number(void);
-
-/**
- * Returns the rabbitmq-c version as a string.
- *
- * See \ref AMQP_VERSION_STRING
- *
- * \return a statically allocated string describing the version of rabbitmq-c.
- *
- * \sa amqp_version_number(), AMQP_VERSION_STRING, AMQP_VERSION
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-char const *AMQP_CALL amqp_version(void);
-
-/**
- * \def AMQP_DEFAULT_FRAME_SIZE
- *
- * Default frame size (128Kb)
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.4.0
- */
-#define AMQP_DEFAULT_FRAME_SIZE 131072
-
-/**
- * \def AMQP_DEFAULT_MAX_CHANNELS
- *
- * Default maximum number of channels (2047, RabbitMQ default limit of 2048,
- * minus 1 for channel 0). RabbitMQ set a default limit of 2048 channels per
- * connection in v3.7.5 to prevent broken clients from leaking too many
- * channels.
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.4.0
- */
-#define AMQP_DEFAULT_MAX_CHANNELS 2047
-
-/**
- * \def AMQP_DEFAULT_HEARTBEAT
- *
- * Default heartbeat interval (0, heartbeat disabled)
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.4.0
- */
-#define AMQP_DEFAULT_HEARTBEAT 0
-
-/**
- * \def AMQP_DEFAULT_VHOST
- *
- * Default RabbitMQ vhost: "/"
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.9.0
- */
-#define AMQP_DEFAULT_VHOST "/"
-
-/**
- * boolean type 0 = false, true otherwise
- *
- * \since v0.1
- */
-typedef int amqp_boolean_t;
-
-/**
- * Method number
- *
- * \since v0.1
- */
-typedef uint32_t amqp_method_number_t;
-
-/**
- * Bitmask for flags
- *
- * \since v0.1
- */
-typedef uint32_t amqp_flags_t;
-
-/**
- * Channel type
- *
- * \since v0.1
- */
-typedef uint16_t amqp_channel_t;
-
-/**
- * Buffer descriptor
- *
- * \since v0.1
- */
-typedef struct amqp_bytes_t_ {
-  size_t len;  /**< length of the buffer in bytes */
-  void *bytes; /**< pointer to the beginning of the buffer */
-} amqp_bytes_t;
-
-/**
- * Decimal data type
- *
- * \since v0.1
- */
-typedef struct amqp_decimal_t_ {
-  uint8_t decimals; /**< the location of the decimal point */
-  uint32_t value;   /**< the value before the decimal point is applied */
-} amqp_decimal_t;
-
-/**
- * AMQP field table
- *
- * An AMQP field table is a set of key-value pairs.
- * A key is a UTF-8 encoded string up to 128 bytes long, and are not null
- * terminated.
- * A value can be one of several different datatypes. \sa
- * amqp_field_value_kind_t
- *
- * \sa amqp_table_entry_t
- *
- * \since v0.1
- */
-typedef struct amqp_table_t_ {
-  int num_entries;                     /**< length of entries array */
-  struct amqp_table_entry_t_ *entries; /**< an array of table entries */
-} amqp_table_t;
-
-/**
- * An AMQP Field Array
- *
- * A repeated set of field values, all must be of the same type
- *
- * \since v0.1
- */
-typedef struct amqp_array_t_ {
-  int num_entries;                     /**< Number of entries in the table */
-  struct amqp_field_value_t_ *entries; /**< linked list of field values */
-} amqp_array_t;
-
-/*
-  0-9   0-9-1   Qpid/Rabbit  Type               Remarks
----------------------------------------------------------------------------
-        t       t            Boolean
-        b       b            Signed 8-bit
-        B                    Unsigned 8-bit
-        U       s            Signed 16-bit      (A1)
-        u                    Unsigned 16-bit
-  I     I       I            Signed 32-bit
-        i                    Unsigned 32-bit
-        L       l            Signed 64-bit      (B)
-        l                    Unsigned 64-bit
-        f       f            32-bit float
-        d       d            64-bit float
-  D     D       D            Decimal
-        s                    Short string       (A2)
-  S     S       S            Long string
-        A                    Nested Array
-  T     T       T            Timestamp (u64)
-  F     F       F            Nested Table
-  V     V       V            Void
-                x            Byte array
-
-Remarks:
-
- A1, A2: Notice how the types **CONFLICT** here. In Qpid and Rabbit,
-         's' means a signed 16-bit integer; in 0-9-1, it means a
-          short string.
-
- B: Notice how the signednesses **CONFLICT** here. In Qpid and Rabbit,
-    'l' means a signed 64-bit integer; in 0-9-1, it means an unsigned
-    64-bit integer.
-
-I'm going with the Qpid/Rabbit types, where there's a conflict, and
-the 0-9-1 types otherwise. 0-8 is a subset of 0-9, which is a subset
-of the other two, so this will work for both 0-8 and 0-9-1 branches of
-the code.
-*/
-
-/**
- * A field table value
- *
- * \since v0.1
- */
-typedef struct amqp_field_value_t_ {
-  uint8_t kind; /**< the type of the entry /sa amqp_field_value_kind_t */
-  union {
-    amqp_boolean_t boolean; /**< boolean type AMQP_FIELD_KIND_BOOLEAN */
-    int8_t i8;              /**< int8_t type AMQP_FIELD_KIND_I8 */
-    uint8_t u8;             /**< uint8_t type AMQP_FIELD_KIND_U8 */
-    int16_t i16;            /**< int16_t type AMQP_FIELD_KIND_I16 */
-    uint16_t u16;           /**< uint16_t type AMQP_FIELD_KIND_U16 */
-    int32_t i32;            /**< int32_t type AMQP_FIELD_KIND_I32 */
-    uint32_t u32;           /**< uint32_t type AMQP_FIELD_KIND_U32 */
-    int64_t i64;            /**< int64_t type AMQP_FIELD_KIND_I64 */
-    uint64_t u64;           /**< uint64_t type AMQP_FIELD_KIND_U64,
-                               AMQP_FIELD_KIND_TIMESTAMP */
-    float f32;              /**< float type AMQP_FIELD_KIND_F32 */
-    double f64;             /**< double type AMQP_FIELD_KIND_F64 */
-    amqp_decimal_t decimal; /**< amqp_decimal_t AMQP_FIELD_KIND_DECIMAL */
-    amqp_bytes_t bytes;     /**< amqp_bytes_t type AMQP_FIELD_KIND_UTF8,
-                               AMQP_FIELD_KIND_BYTES */
-    amqp_table_t table;     /**< amqp_table_t type AMQP_FIELD_KIND_TABLE */
-    amqp_array_t array;     /**< amqp_array_t type AMQP_FIELD_KIND_ARRAY */
-  } value;                  /**< a union of the value */
-} amqp_field_value_t;
-
-/**
- * An entry in a field-table
- *
- * \sa amqp_table_encode(), amqp_table_decode(), amqp_table_clone()
- *
- * \since v0.1
- */
-typedef struct amqp_table_entry_t_ {
-  amqp_bytes_t key; /**< the table entry key. Its a null-terminated UTF-8
-                     * string, with a maximum size of 128 bytes */
-  amqp_field_value_t value; /**< the table entry values */
-} amqp_table_entry_t;
-
-/**
- * Field value types
- *
- * \since v0.1
- */
-typedef enum {
-  AMQP_FIELD_KIND_BOOLEAN =
-      't', /**< boolean type. 0 = false, 1 = true @see amqp_boolean_t */
-  AMQP_FIELD_KIND_I8 = 'b',  /**< 8-bit signed integer, datatype: int8_t */
-  AMQP_FIELD_KIND_U8 = 'B',  /**< 8-bit unsigned integer, datatype: uint8_t */
-  AMQP_FIELD_KIND_I16 = 's', /**< 16-bit signed integer, datatype: int16_t */
-  AMQP_FIELD_KIND_U16 = 'u', /**< 16-bit unsigned integer, datatype: uint16_t */
-  AMQP_FIELD_KIND_I32 = 'I', /**< 32-bit signed integer, datatype: int32_t */
-  AMQP_FIELD_KIND_U32 = 'i', /**< 32-bit unsigned integer, datatype: uint32_t */
-  AMQP_FIELD_KIND_I64 = 'l', /**< 64-bit signed integer, datatype: int64_t */
-  AMQP_FIELD_KIND_U64 = 'L', /**< 64-bit unsigned integer, datatype: uint64_t */
-  AMQP_FIELD_KIND_F32 =
-      'f', /**< single-precision floating point value, datatype: float */
-  AMQP_FIELD_KIND_F64 =
-      'd', /**< double-precision floating point value, datatype: double */
-  AMQP_FIELD_KIND_DECIMAL =
-      'D', /**< amqp-decimal value, datatype: amqp_decimal_t */
-  AMQP_FIELD_KIND_UTF8 = 'S',      /**< UTF-8 null-terminated character string,
-                                      datatype: amqp_bytes_t */
-  AMQP_FIELD_KIND_ARRAY = 'A',     /**< field array (repeated values of another
-                                      datatype. datatype: amqp_array_t */
-  AMQP_FIELD_KIND_TIMESTAMP = 'T', /**< 64-bit timestamp. datatype uint64_t */
-  AMQP_FIELD_KIND_TABLE = 'F', /**< field table. encapsulates a table inside a
-                                  table entry. datatype: amqp_table_t */
-  AMQP_FIELD_KIND_VOID = 'V',  /**< empty entry */
-  AMQP_FIELD_KIND_BYTES =
-      'x' /**< unformatted byte string, datatype: amqp_bytes_t */
-} amqp_field_value_kind_t;
-
-/**
- * A list of allocation blocks
- *
- * \since v0.1
- */
-typedef struct amqp_pool_blocklist_t_ {
-  int num_blocks;   /**< Number of blocks in the block list */
-  void **blocklist; /**< Array of memory blocks */
-} amqp_pool_blocklist_t;
-
-/**
- * A memory pool
- *
- * \since v0.1
- */
-typedef struct amqp_pool_t_ {
-  size_t pagesize; /**< the size of the page in bytes. Allocations less than or
-                    * equal to this size are allocated in the pages block list.
-                    * Allocations greater than this are allocated in their own
-                    * own block in the large_blocks block list */
-
-  amqp_pool_blocklist_t pages; /**< blocks that are the size of pagesize */
-  amqp_pool_blocklist_t
-      large_blocks; /**< allocations larger than the pagesize */
-
-  int next_page;     /**< an index to the next unused page block */
-  char *alloc_block; /**< pointer to the current allocation block */
-  size_t alloc_used; /**< number of bytes in the current allocation block that
-                        has been used */
-} amqp_pool_t;
-
-/**
- * An amqp method
- *
- * \since v0.1
- */
-typedef struct amqp_method_t_ {
-  amqp_method_number_t id; /**< the method id number */
-  void *decoded;           /**< pointer to the decoded method,
-                            *    cast to the appropriate type to use */
-} amqp_method_t;
-
-/**
- * An AMQP frame
- *
- * \since v0.1
- */
-typedef struct amqp_frame_t_ {
-  uint8_t frame_type;     /**< frame type. The types:
-                           * - AMQP_FRAME_METHOD - use the method union member
-                           * - AMQP_FRAME_HEADER - use the properties union member
-                           * - AMQP_FRAME_BODY - use the body_fragment union member
-                           */
-  amqp_channel_t channel; /**< the channel the frame was received on */
-  union {
-    amqp_method_t
-        method; /**< a method, use if frame_type == AMQP_FRAME_METHOD */
-    struct {
-      uint16_t class_id;        /**< the class for the properties */
-      uint64_t body_size;       /**< size of the body in bytes */
-      void *decoded;            /**< the decoded properties */
-      amqp_bytes_t raw;         /**< amqp-encoded properties structure */
-    } properties;               /**< message header, a.k.a., properties,
-                                      use if frame_type == AMQP_FRAME_HEADER */
-    amqp_bytes_t body_fragment; /**< a body fragment, use if frame_type ==
-                                   AMQP_FRAME_BODY */
-    struct {
-      uint8_t transport_high;         /**< @internal first byte of handshake */
-      uint8_t transport_low;          /**< @internal second byte of handshake */
-      uint8_t protocol_version_major; /**< @internal third byte of handshake */
-      uint8_t protocol_version_minor; /**< @internal fourth byte of handshake */
-    } protocol_header; /**< Used only when doing the initial handshake with the
-                          broker, don't use otherwise */
-  } payload;           /**< the payload of the frame */
-} amqp_frame_t;
-
-/**
- * Response type
- *
- * \since v0.1
- */
-typedef enum amqp_response_type_enum_ {
-  AMQP_RESPONSE_NONE = 0, /**< the library got an EOF from the socket */
-  AMQP_RESPONSE_NORMAL, /**< response normal, the RPC completed successfully */
-  AMQP_RESPONSE_LIBRARY_EXCEPTION, /**< library error, an error occurred in the
-                                      library, examine the library_error */
-  AMQP_RESPONSE_SERVER_EXCEPTION   /**< server exception, the broker returned an
-                                      error, check replay */
-} amqp_response_type_enum;
-
-/**
- * Reply from a RPC method on the broker
- *
- * \since v0.1
- */
-typedef struct amqp_rpc_reply_t_ {
-  amqp_response_type_enum reply_type; /**< the reply type:
-                                       * - AMQP_RESPONSE_NORMAL - the RPC
-                                       * completed successfully
-                                       * - AMQP_RESPONSE_SERVER_EXCEPTION - the
-                                       * broker returned
-                                       *     an exception, check the reply field
-                                       * - AMQP_RESPONSE_LIBRARY_EXCEPTION - the
-                                       * library
-                                       *    encountered an error, check the
-                                       * library_error field
-                                       */
-  amqp_method_t reply; /**< in case of AMQP_RESPONSE_SERVER_EXCEPTION this
-                        * field will be set to the method returned from the
-                        * broker */
-  int library_error;   /**< in case of AMQP_RESPONSE_LIBRARY_EXCEPTION this
-                        *    field will be set to an error code. An error
-                        *     string can be retrieved using amqp_error_string */
-} amqp_rpc_reply_t;
-
-/**
- * SASL method type
- *
- * \since v0.1
- */
-typedef enum amqp_sasl_method_enum_ {
-  AMQP_SASL_METHOD_UNDEFINED = -1, /**< Invalid SASL method */
-  AMQP_SASL_METHOD_PLAIN =
-      0, /**< the PLAIN SASL method for authentication to the broker */
-  AMQP_SASL_METHOD_EXTERNAL =
-      1 /**< the EXTERNAL SASL method for authentication to the broker */
-} amqp_sasl_method_enum;
-
-/**
- * connection state object
- *
- * \since v0.1
- */
-typedef struct amqp_connection_state_t_ *amqp_connection_state_t;
-
-/**
- * Socket object
- *
- * \since v0.4.0
- */
-typedef struct amqp_socket_t_ amqp_socket_t;
-
-/**
- * Status codes
- *
- * \since v0.4.0
- */
-/* NOTE: When updating this enum, update the strings in librabbitmq/amqp_api.c
- */
-typedef enum amqp_status_enum_ {
-  AMQP_STATUS_OK = 0x0,                             /**< Operation successful */
-  AMQP_STATUS_NO_MEMORY = -0x0001,                  /**< Memory allocation
-                                                         failed */
-  AMQP_STATUS_BAD_AMQP_DATA = -0x0002,              /**< Incorrect or corrupt
-                                                         data was received from
-                                                         the broker. This is a
-                                                         protocol error. */
-  AMQP_STATUS_UNKNOWN_CLASS = -0x0003,              /**< An unknown AMQP class
-                                                         was received. This is
-                                                         a protocol error. */
-  AMQP_STATUS_UNKNOWN_METHOD = -0x0004,             /**< An unknown AMQP method
-                                                         was received. This is
-                                                         a protocol error. */
-  AMQP_STATUS_HOSTNAME_RESOLUTION_FAILED = -0x0005, /**< Unable to resolve the
-                                                     * hostname */
-  AMQP_STATUS_INCOMPATIBLE_AMQP_VERSION = -0x0006,  /**< The broker advertised
-                                                         an incompaible AMQP
-                                                         version */
-  AMQP_STATUS_CONNECTION_CLOSED = -0x0007,          /**< The connection to the
-                                                         broker has been closed
-                                                         */
-  AMQP_STATUS_BAD_URL = -0x0008,                    /**< malformed AMQP URL */
-  AMQP_STATUS_SOCKET_ERROR = -0x0009,               /**< A socket error
-                                                         occurred */
-  AMQP_STATUS_INVALID_PARAMETER = -0x000A,          /**< An invalid parameter
-                                                         was passed into the
-                                                         function */
-  AMQP_STATUS_TABLE_TOO_BIG = -0x000B,              /**< The amqp_table_t object
-                                                         cannot be serialized
-                                                         because the output
-                                                         buffer is too small */
-  AMQP_STATUS_WRONG_METHOD = -0x000C,               /**< The wrong method was
-                                                         received */
-  AMQP_STATUS_TIMEOUT = -0x000D,                    /**< Operation timed out */
-  AMQP_STATUS_TIMER_FAILURE = -0x000E,              /**< The underlying system
-                                                         timer facility failed */
-  AMQP_STATUS_HEARTBEAT_TIMEOUT = -0x000F,          /**< Timed out waiting for
-                                                         heartbeat */
-  AMQP_STATUS_UNEXPECTED_STATE = -0x0010,           /**< Unexpected protocol
-                                                         state */
-  AMQP_STATUS_SOCKET_CLOSED = -0x0011,              /**< Underlying socket is
-                                                         closed */
-  AMQP_STATUS_SOCKET_INUSE = -0x0012,               /**< Underlying socket is
-                                                         already open */
-  AMQP_STATUS_BROKER_UNSUPPORTED_SASL_METHOD = -0x0013, /**< Broker does not
-                                                          support the requested
-                                                          SASL mechanism */
-  AMQP_STATUS_UNSUPPORTED = -0x0014, /**< Parameter is unsupported
-                                       in this version */
-  _AMQP_STATUS_NEXT_VALUE = -0x0015, /**< Internal value */
-
-  AMQP_STATUS_TCP_ERROR = -0x0100,                /**< A generic TCP error
-                                                       occurred */
-  AMQP_STATUS_TCP_SOCKETLIB_INIT_ERROR = -0x0101, /**< An error occurred trying
-                                                       to initialize the
-                                                       socket library*/
-  _AMQP_STATUS_TCP_NEXT_VALUE = -0x0102,          /**< Internal value */
-
-  AMQP_STATUS_SSL_ERROR = -0x0200,                  /**< A generic SSL error
-                                                         occurred. */
-  AMQP_STATUS_SSL_HOSTNAME_VERIFY_FAILED = -0x0201, /**< SSL validation of
-                                                         hostname against
-                                                         peer certificate
-                                                         failed */
-  AMQP_STATUS_SSL_PEER_VERIFY_FAILED = -0x0202,     /**< SSL validation of peer
-                                                         certificate failed. */
-  AMQP_STATUS_SSL_CONNECTION_FAILED = -0x0203, /**< SSL handshake failed. */
-  _AMQP_STATUS_SSL_NEXT_VALUE = -0x0204        /**< Internal value */
-} amqp_status_enum;
-
-/**
- * AMQP delivery modes.
- * Use these values for the #amqp_basic_properties_t::delivery_mode field.
- *
- * \since v0.5
- */
-typedef enum {
-  AMQP_DELIVERY_NONPERSISTENT = 1, /**< Non-persistent message */
-  AMQP_DELIVERY_PERSISTENT = 2     /**< Persistent message */
-} amqp_delivery_mode_enum;
-
-AMQP_END_DECLS
-
-#include <amqp_framing.h>
-
-AMQP_BEGIN_DECLS
-
-/**
- * Empty bytes structure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_VARIABLE const amqp_bytes_t amqp_empty_bytes;
-
-/**
- * Empty table structure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_VARIABLE const amqp_table_t amqp_empty_table;
-
-/**
- * Empty table array structure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_VARIABLE const amqp_array_t amqp_empty_array;
-
-/* Compatibility macros for the above, to avoid the need to update
-   code written against earlier versions of librabbitmq. */
-
-/**
- * \def AMQP_EMPTY_BYTES
- *
- * Deprecated, use \ref amqp_empty_bytes instead
- *
- * \deprecated use \ref amqp_empty_bytes instead
- *
- * \since v0.1
- */
-#define AMQP_EMPTY_BYTES amqp_empty_bytes
-
-/**
- * \def AMQP_EMPTY_TABLE
- *
- * Deprecated, use \ref amqp_empty_table instead
- *
- * \deprecated use \ref amqp_empty_table instead
- *
- * \since v0.1
- */
-#define AMQP_EMPTY_TABLE amqp_empty_table
-
-/**
- * \def AMQP_EMPTY_ARRAY
- *
- * Deprecated, use \ref amqp_empty_array instead
- *
- * \deprecated use \ref amqp_empty_array instead
- *
- * \since v0.1
- */
-#define AMQP_EMPTY_ARRAY amqp_empty_array
-
-/**
- * Initializes an amqp_pool_t memory allocation pool for use
- *
- * Readies an allocation pool for use. An amqp_pool_t
- * must be initialized before use
- *
- * \param [in] pool the amqp_pool_t structure to initialize.
- *              Calling this function on a pool a pool that has
- *              already been initialized will result in undefined
- *              behavior
- * \param [in] pagesize the unit size that the pool will allocate
- *              memory chunks in. Anything allocated against the pool
- *              with a requested size will be carved out of a block
- *              this size. Allocations larger than this will be
- *              allocated individually
- *
- * \sa recycle_amqp_pool(), empty_amqp_pool(), amqp_pool_alloc(),
- *     amqp_pool_alloc_bytes(), amqp_pool_t
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL init_amqp_pool(amqp_pool_t *pool, size_t pagesize);
-
-/**
- * Recycles an amqp_pool_t memory allocation pool
- *
- * Recycles the space allocate by the pool
- *
- * This invalidates all allocations made against the pool before this call is
- * made, any use of any allocations made before recycle_amqp_pool() is called
- * will result in undefined behavior.
- *
- * Note: this may or may not release memory, to force memory to be released
- * call empty_amqp_pool().
- *
- * \param [in] pool the amqp_pool_t to recycle
- *
- * \sa recycle_amqp_pool(), empty_amqp_pool(), amqp_pool_alloc(),
- *      amqp_pool_alloc_bytes()
- *
- * \since v0.1
- *
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL recycle_amqp_pool(amqp_pool_t *pool);
-
-/**
- * Empties an amqp memory pool
- *
- * Releases all memory associated with an allocation pool
- *
- * \param [in] pool the amqp_pool_t to empty
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL empty_amqp_pool(amqp_pool_t *pool);
-
-/**
- * Allocates a block of memory from an amqp_pool_t memory pool
- *
- * Memory will be aligned on a 8-byte boundary. If a 0-length allocation is
- * requested, a NULL pointer will be returned.
- *
- * \param [in] pool the allocation pool to allocate the memory from
- * \param [in] amount the size of the allocation in bytes.
- * \return a pointer to the memory block, or NULL if the allocation cannot
- *          be satisfied.
- *
- * \sa init_amqp_pool(), recycle_amqp_pool(), empty_amqp_pool(),
- *     amqp_pool_alloc_bytes()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void *AMQP_CALL amqp_pool_alloc(amqp_pool_t *pool, size_t amount);
-
-/**
- * Allocates a block of memory from an amqp_pool_t to an amqp_bytes_t
- *
- * Memory will be aligned on a 8-byte boundary. If a 0-length allocation is
- * requested, output.bytes = NULL.
- *
- * \param [in] pool the allocation pool to allocate the memory from
- * \param [in] amount the size of the allocation in bytes
- * \param [in] output the location to store the pointer. On success
- *              output.bytes will be set to the beginning of the buffer
- *              output.len will be set to amount
- *              On error output.bytes will be set to NULL and output.len
- *              set to 0
- *
- * \sa init_amqp_pool(), recycle_amqp_pool(), empty_amqp_pool(),
- *     amqp_pool_alloc()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_pool_alloc_bytes(amqp_pool_t *pool, size_t amount,
-                                     amqp_bytes_t *output);
-
-/**
- * Wraps a c string in an amqp_bytes_t
- *
- * Takes a string, calculates its length and creates an
- * amqp_bytes_t that points to it. The string is not duplicated.
- *
- * For a given input cstr, The amqp_bytes_t output.bytes is the
- * same as cstr, output.len is the length of the string not including
- * the \0 terminator
- *
- * This function uses strlen() internally so cstr must be properly
- * terminated
- *
- * \param [in] cstr the c string to wrap
- * \return an amqp_bytes_t that describes the string
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_bytes_t AMQP_CALL amqp_cstring_bytes(char const *cstr);
-
-/**
- * Duplicates an amqp_bytes_t buffer.
- *
- * The buffer is cloned and the contents copied.
- *
- * The memory associated with the output is allocated
- * with amqp_bytes_malloc() and should be freed with
- * amqp_bytes_free()
- *
- * \param [in] src
- * \return a clone of the src
- *
- * \sa amqp_bytes_free(), amqp_bytes_malloc()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_bytes_t AMQP_CALL amqp_bytes_malloc_dup(amqp_bytes_t src);
-
-/**
- * Allocates a amqp_bytes_t buffer
- *
- * Creates an amqp_bytes_t buffer of the specified amount, the buffer should be
- * freed using amqp_bytes_free()
- *
- * \param [in] amount the size of the buffer in bytes
- * \returns an amqp_bytes_t with amount bytes allocated.
- *           output.bytes will be set to NULL on error
- *
- * \sa amqp_bytes_free(), amqp_bytes_malloc_dup()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_bytes_t AMQP_CALL amqp_bytes_malloc(size_t amount);
-
-/**
- * Frees an amqp_bytes_t buffer
- *
- * Frees a buffer allocated with amqp_bytes_malloc() or amqp_bytes_malloc_dup()
- *
- * Calling amqp_bytes_free on buffers not allocated with one
- * of those two functions will result in undefined behavior
- *
- * \param [in] bytes the buffer to free
- *
- * \sa amqp_bytes_malloc(), amqp_bytes_malloc_dup()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_bytes_free(amqp_bytes_t bytes);
-
-/**
- * Allocate and initialize a new amqp_connection_state_t object
- *
- * amqp_connection_state_t objects created with this function
- * should be freed with amqp_destroy_connection()
- *
- * \returns an opaque pointer on success, NULL or 0 on failure.
- *
- * \sa amqp_destroy_connection()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_connection_state_t AMQP_CALL amqp_new_connection(void);
-
-/**
- * Get the underlying socket descriptor for the connection
- *
- * \warning Use the socket returned from this function carefully, incorrect use
- * of the socket outside of the library will lead to undefined behavior.
- * Additionally rabbitmq-c may use the socket differently version-to-version,
- * what may work in one version, may break in the next version. Be sure to
- * throughly test any applications that use the socket returned by this
- * function especially when using a newer version of rabbitmq-c
- *
- * \param [in] state the connection object
- * \returns the socket descriptor if one has been set, -1 otherwise
- *
- * \sa amqp_tcp_socket_new(), amqp_ssl_socket_new(), amqp_socket_open()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_sockfd(amqp_connection_state_t state);
-
-/**
- * Deprecated, use amqp_tcp_socket_new() or amqp_ssl_socket_new()
- *
- * \deprecated Use amqp_tcp_socket_new() or amqp_ssl_socket_new()
- *
- * Sets the socket descriptor associated with the connection. The socket
- * should be connected to a broker, and should not be read to or written from
- * before calling this function.  A socket descriptor can be created and opened
- * using amqp_open_socket()
- *
- * \param [in] state the connection object
- * \param [in] sockfd the socket
- *
- * \sa amqp_open_socket(), amqp_tcp_socket_new(), amqp_ssl_socket_new()
- *
- * \since v0.1
- */
-AMQP_DEPRECATED(AMQP_PUBLIC_FUNCTION void AMQP_CALL
-                    amqp_set_sockfd(amqp_connection_state_t state, int sockfd));
-
-/**
- * Tune client side parameters
- *
- * \warning This function may call abort() if the connection is in a certain
- *  state. As such it should probably not be called code outside the library.
- *  connection parameters should be specified when calling amqp_login() or
- *  amqp_login_with_properties()
- *
- * This function changes channel_max, frame_max, and heartbeat parameters, on
- * the client side only. It does not try to renegotiate these parameters with
- * the broker. Using this function will lead to unexpected results.
- *
- * \param [in] state the connection object
- * \param [in] channel_max the maximum number of channels.
- *              The largest this can be is 65535
- * \param [in] frame_max the maximum size of an frame.
- *              The smallest this can be is 4096
- *              The largest this can be is 2147483647
- *              Unless you know what you're doing the recommended
- *              size is 131072 or 128KB
- * \param [in] heartbeat the number of seconds between heartbeats
- *
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value otherwise.
- *  Possible error codes include:
- *  - AMQP_STATUS_NO_MEMORY memory allocation failed.
- *  - AMQP_STATUS_TIMER_FAILURE the underlying system timer indicated it
- *    failed.
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_tune_connection(amqp_connection_state_t state,
-                                   int channel_max, int frame_max,
-                                   int heartbeat);
-
-/**
- * Get the maximum number of channels the connection can handle
- *
- * The maximum number of channels is set when connection negotiation takes
- * place in amqp_login() or amqp_login_with_properties().
- *
- * \param [in] state the connection object
- * \return the maximum number of channels. 0 if there is no limit
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_channel_max(amqp_connection_state_t state);
-
-/**
- * Get the maximum size of an frame the connection can handle
- *
- * The maximum size of an frame is set when connection negotiation takes
- * place in amqp_login() or amqp_login_with_properties().
- *
- * \param [in] state the connection object
- * \return the maximum size of an frame.
- *
- * \since v0.6
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_frame_max(amqp_connection_state_t state);
-
-/**
- * Get the number of seconds between heartbeats of the connection
- *
- * The number of seconds between heartbeats is set when connection
- * negotiation takes place in amqp_login() or amqp_login_with_properties().
- *
- * \param [in] state the connection object
- * \return the number of seconds between heartbeats.
- *
- * \since v0.6
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_heartbeat(amqp_connection_state_t state);
-
-/**
- * Destroys an amqp_connection_state_t object
- *
- * Destroys a amqp_connection_state_t object that was created with
- * amqp_new_connection(). If the connection with the broker is open, it will be
- * implicitly closed with a reply code of 200 (success). Any memory that
- * would be freed with amqp_maybe_release_buffers() or
- * amqp_maybe_release_buffers_on_channel() will be freed, and use of that
- * memory will caused undefined behavior.
- *
- * \param [in] state the connection object
- * \return AMQP_STATUS_OK on success. amqp_status_enum value failure
- *
- * \sa amqp_new_connection()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_destroy_connection(amqp_connection_state_t state);
-
-/**
- * Process incoming data
- *
- * \warning This is a low-level function intended for those who want to
- *  have greater control over input and output over the socket from the
- *  broker. Correctly using this function requires in-depth knowledge of AMQP
- *  and rabbitmq-c.
- *
- * For a given buffer of data received from the broker, decode the first
- * frame in the buffer. If more than one frame is contained in the input buffer
- * the return value will be less than the received_data size, the caller should
- * adjust received_data buffer descriptor to point to the beginning of the
- * buffer + the return value.
- *
- * \param [in] state the connection object
- * \param [in] received_data a buffer of data received from the broker. The
- *  function will return the number of bytes of the buffer it used. The
- *  function copies these bytes to an internal buffer: this part of the buffer
- *  may be reused after this function successfully completes.
- * \param [in,out] decoded_frame caller should pass in a pointer to an
- *  amqp_frame_t struct. If there is enough data in received_data for a
- *  complete frame, decoded_frame->frame_type will be set to something OTHER
- *  than 0. decoded_frame may contain members pointing to memory owned by
- *  the state object. This memory can be recycled with
- *  amqp_maybe_release_buffers() or amqp_maybe_release_buffers_on_channel().
- * \return number of bytes consumed from received_data or 0 if a 0-length
- *  buffer was passed. A negative return value indicates failure. Possible
- * errors:
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_handle_input(amqp_connection_state_t state,
-                                amqp_bytes_t received_data,
-                                amqp_frame_t *decoded_frame);
-
-/**
- * Check to see if connection memory can be released
- *
- * \deprecated This function is deprecated in favor of
- *  amqp_maybe_release_buffers() or amqp_maybe_release_buffers_on_channel()
- *
- * Checks the state of an amqp_connection_state_t object to see if
- * amqp_release_buffers() can be called successfully.
- *
- * \param [in] state the connection object
- * \returns TRUE if the buffers can be released FALSE otherwise
- *
- * \sa amqp_release_buffers() amqp_maybe_release_buffers()
- *  amqp_maybe_release_buffers_on_channel()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_release_buffers_ok(amqp_connection_state_t state);
-
-/**
- * Release amqp_connection_state_t owned memory
- *
- * \deprecated This function is deprecated in favor of
- *  amqp_maybe_release_buffers() or amqp_maybe_release_buffers_on_channel()
- *
- * \warning caller should ensure amqp_release_buffers_ok() returns true before
- *  calling this function. Failure to do so may result in abort() being called.
- *
- * Release memory owned by the amqp_connection_state_t for reuse by the
- * library. Use of any memory returned by the library before this function is
- * called will result in undefined behavior.
- *
- * \note internally rabbitmq-c tries to reuse memory when possible. As a result
- * its possible calling this function may not have a noticeable effect on
- * memory usage.
- *
- * \param [in] state the connection object
- *
- * \sa amqp_release_buffers_ok() amqp_maybe_release_buffers()
- *  amqp_maybe_release_buffers_on_channel()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_release_buffers(amqp_connection_state_t state);
-
-/**
- * Release amqp_connection_state_t owned memory
- *
- * Release memory owned by the amqp_connection_state_t object related to any
- * channel, allowing reuse by the library. Use of any memory returned by the
- * library before this function is called with result in undefined behavior.
- *
- * \note internally rabbitmq-c tries to reuse memory when possible. As a result
- * its possible calling this function may not have a noticeable effect on
- * memory usage.
- *
- * \param [in] state the connection object
- *
- * \sa amqp_maybe_release_buffers_on_channel()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_maybe_release_buffers(amqp_connection_state_t state);
-
-/**
- * Release amqp_connection_state_t owned memory related to a channel
- *
- * Release memory owned by the amqp_connection_state_t object related to the
- * specified channel, allowing reuse by the library. Use of any memory returned
- * the library for a specific channel will result in undefined behavior.
- *
- * \note internally rabbitmq-c tries to reuse memory when possible. As a result
- * its possible calling this function may not have a noticeable effect on
- * memory usage.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel specifier for which memory should be
- *  released. Note that the library does not care about the state of the
- *  channel when calling this function
- *
- * \sa amqp_maybe_release_buffers()
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_maybe_release_buffers_on_channel(
-    amqp_connection_state_t state, amqp_channel_t channel);
-
-/**
- * Send a frame to the broker
- *
- * \param [in] state the connection object
- * \param [in] frame the frame to send to the broker
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value on error.
- *  Possible error codes:
- *  - AMQP_STATUS_BAD_AMQP_DATA the serialized form of the method or
- *    properties was too large to fit in a single AMQP frame, or the
- *    method contains an invalid value. The frame was not sent.
- *  - AMQP_STATUS_TABLE_TOO_BIG the serialized form of an amqp_table_t is
- *    too large to fit in a single AMQP frame. Frame was not sent.
- *  - AMQP_STATUS_UNKNOWN_METHOD an invalid method type was passed in
- *  - AMQP_STATUS_UNKNOWN_CLASS an invalid properties type was passed in
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure. The frame
- *    was sent
- *  - AMQP_STATUS_SOCKET_ERROR
- *  - AMQP_STATUS_SSL_ERROR
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_send_frame(amqp_connection_state_t state,
-                              amqp_frame_t const *frame);
-
-/**
- * Compare two table entries
- *
- * Works just like strcmp(), comparing two the table keys, datatype, then values
- *
- * \param [in] entry1 the entry on the left
- * \param [in] entry2 the entry on the right
- * \return 0 if entries are equal, 0 < if left is greater, 0 > if right is
- * greater
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_table_entry_cmp(void const *entry1, void const *entry2);
-
-/**
- * Open a socket to a remote host
- *
- * \deprecated This function is deprecated in favor of amqp_socket_open()
- *
- * Looks up the hostname, then attempts to open a socket to the host using
- * the specified portnumber. It also sets various options on the socket to
- * improve performance and correctness.
- *
- * \param [in] hostname this can be a hostname or IP address.
- *              Both IPv4 and IPv6 are acceptable
- * \param [in] portnumber the port to connect on. RabbitMQ brokers
- *              listen on port 5672, and 5671 for SSL
- * \return a positive value indicates success and is the sockfd. A negative
- *  value (see amqp_status_enum)is returned on failure. Possible error codes:
- *  - AMQP_STATUS_TCP_SOCKETLIB_INIT_ERROR Initialization of underlying socket
- *    library failed.
- *  - AMQP_STATUS_HOSTNAME_RESOLUTION_FAILED hostname lookup failed.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. errno or
- *    WSAGetLastError() may return more useful information.
- *
- * \note IPv6 support was added in v0.3
- *
- * \sa amqp_socket_open() amqp_set_sockfd()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_open_socket(char const *hostname, int portnumber);
-
-/**
- * Send initial AMQP header to the broker
- *
- * \warning this is a low level function intended for those who want to
- * interact with the broker at a very low level. Use of this function without
- * understanding what it does will result in AMQP protocol errors.
- *
- * This function sends the AMQP protocol header to the broker.
- *
- * \param [in] state the connection object
- * \return AMQP_STATUS_OK on success, a negative value on failure. Possible
- *  error codes:
- * - AMQP_STATUS_CONNECTION_CLOSED the connection to the broker was closed.
- * - AMQP_STATUS_SOCKET_ERROR a socket error occurred. It is likely the
- *   underlying socket has been closed. errno or WSAGetLastError() may provide
- *   further information.
- * - AMQP_STATUS_SSL_ERROR a SSL error occurred. The connection to the broker
- *   was closed.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_send_header(amqp_connection_state_t state);
-
-/**
- * Checks to see if there are any incoming frames ready to be read
- *
- * Checks to see if there are any amqp_frame_t objects buffered by the
- * amqp_connection_state_t object. Having one or more frames buffered means
- * that amqp_simple_wait_frame() or amqp_simple_wait_frame_noblock() will
- * return a frame without potentially blocking on a read() call.
- *
- * \param [in] state the connection object
- * \return TRUE if there are frames enqueued, FALSE otherwise
- *
- * \sa amqp_simple_wait_frame() amqp_simple_wait_frame_noblock()
- *  amqp_data_in_buffer()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_frames_enqueued(amqp_connection_state_t state);
-
-/**
- * Read a single amqp_frame_t
- *
- * Waits for the next amqp_frame_t frame to be read from the broker.
- * This function has the potential to block for a long time in the case of
- * waiting for a basic.deliver method frame from the broker.
- *
- * The library may buffer frames. When an amqp_connection_state_t object
- * has frames buffered calling amqp_simple_wait_frame() will return an
- * amqp_frame_t without entering a blocking read(). You can test to see if
- * an amqp_connection_state_t object has frames buffered by calling the
- * amqp_frames_enqueued() function.
- *
- * The library has a socket read buffer. When there is data in an
- * amqp_connection_state_t read buffer, amqp_simple_wait_frame() may return an
- * amqp_frame_t without entering a blocking read(). You can test to see if an
- * amqp_connection_state_t object has data in its read buffer by calling the
- * amqp_data_in_buffer() function.
- *
- * \param [in] state the connection object
- * \param [out] decoded_frame the frame
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value
- *  is returned otherwise. Possible errors include:
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *  - AMQP_STATUS_HEARTBEAT_TIMEOUT timed out while waiting for heartbeat
- *    from the broker. The connection has been closed.
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. The connection has
- *    been closed
- *  - AMQP_STATUS_SSL_ERROR a SSL socket error occurred. The connection has
- *    been closed.
- *
- * \sa amqp_simple_wait_frame_noblock() amqp_frames_enqueued()
- *  amqp_data_in_buffer()
- *
- * \note as of v0.4.0 this function will no longer return heartbeat frames
- *  when enabled by specifying a non-zero heartbeat value in amqp_login().
- *  Heartbeating is handled internally by the library.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_simple_wait_frame(amqp_connection_state_t state,
-                                     amqp_frame_t *decoded_frame);
-
-/**
- * Read a single amqp_frame_t with a timeout.
- *
- * Waits for the next amqp_frame_t frame to be read from the broker, up to
- * a timespan specified by tv. The function will return AMQP_STATUS_TIMEOUT
- * if the timeout is reached. The tv value is not modified by the function.
- *
- * If a 0 timeval is specified, the function behaves as if its non-blocking: it
- * will test to see if a frame can be read from the broker, and return
- * immediately.
- *
- * If NULL is passed in for tv, the function will behave like
- * amqp_simple_wait_frame() and block until a frame is received from the broker
- *
- * The library may buffer frames.  When an amqp_connection_state_t object
- * has frames buffered calling amqp_simple_wait_frame_noblock() will return an
- * amqp_frame_t without entering a blocking read(). You can test to see if an
- * amqp_connection_state_t object has frames buffered by calling the
- * amqp_frames_enqueued() function.
- *
- * The library has a socket read buffer. When there is data in an
- * amqp_connection_state_t read buffer, amqp_simple_wait_frame_noblock() may
- * return
- * an amqp_frame_t without entering a blocking read(). You can test to see if an
- * amqp_connection_state_t object has data in its read buffer by calling the
- * amqp_data_in_buffer() function.
- *
- * \note This function does not return heartbeat frames. When enabled,
- *  heartbeating is handed internally internally by the library.
- *
- * \param [in,out] state the connection object
- * \param [out] decoded_frame the frame
- * \param [in] tv the maximum time to wait for a frame to be read. Setting
- * tv->tv_sec = 0 and tv->tv_usec = 0 will do a non-blocking read. Specifying
- * NULL for tv will make the function block until a frame is read.
- * \return AMQP_STATUS_OK on success. An amqp_status_enum value is returned
- *  otherwise. Possible errors include:
- *  - AMQP_STATUS_TIMEOUT the timeout was reached while waiting for a frame
- *    from the broker.
- *  - AMQP_STATUS_INVALID_PARAMETER the tv parameter contains an invalid value.
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *  - AMQP_STATUS_HEARTBEAT_TIMEOUT timed out while waiting for heartbeat
- *    from the broker. The connection has been closed.
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. The connection has
- *    been closed
- *  - AMQP_STATUS_SSL_ERROR a SSL socket error occurred. The connection has
- *    been closed.
- *
- * \sa amqp_simple_wait_frame() amqp_frames_enqueued() amqp_data_in_buffer()
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_simple_wait_frame_noblock(amqp_connection_state_t state,
-                                             amqp_frame_t *decoded_frame,
-                                             struct timeval *tv);
-
-/**
- * Waits for a specific method from the broker
- *
- * \warning You probably don't want to use this function. If this function
- *  doesn't receive exactly the frame requested it closes the whole connection.
- *
- * Waits for a single method on a channel from the broker.
- * If a frame is received that does not match expected_channel
- * or expected_method the program will abort
- *
- * \param [in] state the connection object
- * \param [in] expected_channel the channel that the method should be delivered
- *  on
- * \param [in] expected_method the method to wait for
- * \param [out] output the method
- * \returns AMQP_STATUS_OK on success. An amqp_status_enum value is returned
- *  otherwise. Possible errors include:
- *  - AMQP_STATUS_WRONG_METHOD a frame containing the wrong method, wrong frame
- *    type or wrong channel was received. The connection is closed.
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *  - AMQP_STATUS_HEARTBEAT_TIMEOUT timed out while waiting for heartbeat
- *    from the broker. The connection has been closed.
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. The connection has
- *    been closed
- *  - AMQP_STATUS_SSL_ERROR a SSL socket error occurred. The connection has
- *    been closed.
- *
- * \since v0.1
- */
-
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_simple_wait_method(amqp_connection_state_t state,
-                                      amqp_channel_t expected_channel,
-                                      amqp_method_number_t expected_method,
-                                      amqp_method_t *output);
-
-/**
- * Sends a method to the broker
- *
- * This is a thin wrapper around amqp_send_frame(), providing a way to send
- * a method to the broker on a specified channel.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel object
- * \param [in] id the method number
- * \param [in] decoded the method object
- * \returns AMQP_STATUS_OK on success, an amqp_status_enum value otherwise.
- *  Possible errors include:
- *  - AMQP_STATUS_BAD_AMQP_DATA the serialized form of the method or
- *    properties was too large to fit in a single AMQP frame, or the
- *    method contains an invalid value. The frame was not sent.
- *  - AMQP_STATUS_TABLE_TOO_BIG the serialized form of an amqp_table_t is
- *    too large to fit in a single AMQP frame. Frame was not sent.
- *  - AMQP_STATUS_UNKNOWN_METHOD an invalid method type was passed in
- *  - AMQP_STATUS_UNKNOWN_CLASS an invalid properties type was passed in
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure. The frame
- *    was sent
- *  - AMQP_STATUS_SOCKET_ERROR
- *  - AMQP_STATUS_SSL_ERROR
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_send_method(amqp_connection_state_t state,
-                               amqp_channel_t channel, amqp_method_number_t id,
-                               void *decoded);
-
-/**
- * Sends a method to the broker and waits for a method response
- *
- * \param [in] state the connection object
- * \param [in] channel the channel object
- * \param [in] request_id the method number of the request
- * \param [in] expected_reply_ids a 0 terminated array of expected response
- *             method numbers
- * \param [in] decoded_request_method the method to be sent to the broker
- * \return a amqp_rpc_reply_t:
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. RPC completed successfully
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. An exception occurred
- *    within the library. Examine r.library_error and compare it against
- *    amqp_status_enum values to determine the error.
- *
- * \sa amqp_simple_rpc_decoded()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_simple_rpc(
-    amqp_connection_state_t state, amqp_channel_t channel,
-    amqp_method_number_t request_id, amqp_method_number_t *expected_reply_ids,
-    void *decoded_request_method);
-
-/**
- * Sends a method to the broker and waits for a method response
- *
- * \param [in] state the connection object
- * \param [in] channel the channel object
- * \param [in] request_id the method number of the request
- * \param [in] reply_id the method number expected in response
- * \param [in] decoded_request_method the request method
- * \return a pointer to the method returned from the broker, or NULL on error.
- *  On error amqp_get_rpc_reply() will return an amqp_rpc_reply_t with
- *  details on the error that occurred.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void *AMQP_CALL amqp_simple_rpc_decoded(amqp_connection_state_t state,
-                                        amqp_channel_t channel,
-                                        amqp_method_number_t request_id,
-                                        amqp_method_number_t reply_id,
-                                        void *decoded_request_method);
-
-/**
- * Get the last global amqp_rpc_reply
- *
- * The API methods corresponding to most synchronous AMQP methods
- * return a pointer to the decoded method result.  Upon error, they
- * return NULL, and we need some way of discovering what, if anything,
- * went wrong. amqp_get_rpc_reply() returns the most recent
- * amqp_rpc_reply_t instance corresponding to such an API operation
- * for the given connection.
- *
- * Only use it for operations that do not themselves return
- * amqp_rpc_reply_t; operations that do return amqp_rpc_reply_t
- * generally do NOT update this per-connection-global amqp_rpc_reply_t
- * instance.
- *
- * \param [in] state the connection object
- * \return the most recent amqp_rpc_reply_t:
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. RPC completed successfully
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. An exception occurred
- *    within the library. Examine r.library_error and compare it against
- *    amqp_status_enum values to determine the error.
- *
- * \sa amqp_simple_rpc_decoded()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_get_rpc_reply(amqp_connection_state_t state);
-
-/**
- * Login to the broker
- *
- * After using amqp_open_socket and amqp_set_sockfd, call
- * amqp_login to complete connecting to the broker
- *
- * \param [in] state the connection object
- * \param [in] vhost the virtual host to connect to on the broker. The default
- *              on most brokers is "/"
- * \param [in] channel_max the limit for number of channels for the connection.
- *              0 means no limit, and is a good default
- *              (AMQP_DEFAULT_MAX_CHANNELS)
- *              Note that the maximum number of channels the protocol supports
- *              is 65535 (2^16, with the 0-channel reserved). The server can
- *              set a lower channel_max and then the client will use the lowest
- *              of the two
- * \param [in] frame_max the maximum size of an AMQP frame on the wire to
- *              request of the broker for this connection. 4096 is the minimum
- *              size, 2^31-1 is the maximum, a good default is 131072 (128KB),
- *              or AMQP_DEFAULT_FRAME_SIZE
- * \param [in] heartbeat the number of seconds between heartbeat frames to
- *              request of the broker. A value of 0 disables heartbeats.
- *              Note rabbitmq-c only has partial support for heartbeats, as of
- *              v0.4.0 they are only serviced during amqp_basic_publish() and
- *              amqp_simple_wait_frame()/amqp_simple_wait_frame_noblock()
- * \param [in] sasl_method the SASL method to authenticate with the broker.
- *              followed by the authentication information. The following SASL
- *              methods are implemented:
- *              -  AMQP_SASL_METHOD_PLAIN, the AMQP_SASL_METHOD_PLAIN argument
- *                 should be followed by two arguments in this order:
- *                 const char* username, and const char* password.
- *              -  AMQP_SASL_METHOD_EXTERNAL, the AMQP_SASL_METHOD_EXTERNAL
- *                 argument should be followed one argument:
- *                 const char* identity.
- * \return amqp_rpc_reply_t indicating success or failure.
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. Login completed successfully
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. In most cases errors
- *    from the broker when logging in will be represented by the broker closing
- *    the socket. In this case r.library_error will be set to
- *    AMQP_STATUS_CONNECTION_CLOSED. This error can represent a number of
- *    error conditions including: invalid vhost, authentication failure.
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_login(amqp_connection_state_t state,
-                                      char const *vhost, int channel_max,
-                                      int frame_max, int heartbeat,
-                                      amqp_sasl_method_enum sasl_method, ...);
-
-/**
- * Login to the broker passing a properties table
- *
- * This function is similar to amqp_login() and differs in that it provides a
- * way to pass client properties to the broker. This is commonly used to
- * negotiate newer protocol features as they are supported by the broker.
- *
- * \param [in] state the connection object
- * \param [in] vhost the virtual host to connect to on the broker. The default
- *              on most brokers is "/"
- * \param [in] channel_max the limit for the number of channels for the
- *             connection.
- *             0 means no limit, and is a good default
- *             (AMQP_DEFAULT_MAX_CHANNELS)
- *             Note that the maximum number of channels the protocol supports
- *             is 65535 (2^16, with the 0-channel reserved). The server can
- *             set a lower channel_max and then the client will use the lowest
- *             of the two
- * \param [in] frame_max the maximum size of an AMQP frame ont he wire to
- *              request of the broker for this connection. 4096 is the minimum
- *              size, 2^31-1 is the maximum, a good default is 131072 (128KB),
- *              or AMQP_DEFAULT_FRAME_SIZE
- * \param [in] heartbeat the number of seconds between heartbeat frame to
- *             request of the broker. A value of 0 disables heartbeats.
- *             Note rabbitmq-c only has partial support for hearts, as of
- *             v0.4.0 heartbeats are only serviced during amqp_basic_publish(),
- *             and amqp_simple_wait_frame()/amqp_simple_wait_frame_noblock()
- * \param [in] properties a table of properties to send the broker.
- * \param [in] sasl_method the SASL method to authenticate with the broker
- *             followed by the authentication information. The following SASL
- *             methods are implemented:
- *             -  AMQP_SASL_METHOD_PLAIN, the AMQP_SASL_METHOD_PLAIN argument
- *                should be followed by two arguments in this order:
- *                const char* username, and const char* password.
- *             -  AMQP_SASL_METHOD_EXTERNAL, the AMQP_SASL_METHOD_EXTERNAL
- *                argument should be followed one argument:
- *                const char* identity.
- * \return amqp_rpc_reply_t indicating success or failure.
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. Login completed successfully
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. In most cases errors
- *    from the broker when logging in will be represented by the broker closing
- *    the socket. In this case r.library_error will be set to
- *    AMQP_STATUS_CONNECTION_CLOSED. This error can represent a number of
- *    error conditions including: invalid vhost, authentication failure.
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_login_with_properties(
-    amqp_connection_state_t state, char const *vhost, int channel_max,
-    int frame_max, int heartbeat, const amqp_table_t *properties,
-    amqp_sasl_method_enum sasl_method, ...);
-
-struct amqp_basic_properties_t_;
-
-/**
- * Publish a message to the broker
- *
- * Publish a message on an exchange with a routing key.
- *
- * Note that at the AMQ protocol level basic.publish is an async method:
- * this means error conditions that occur on the broker (such as publishing to
- * a non-existent exchange) will not be reflected in the return value of this
- * function.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] exchange the exchange on the broker to publish to
- * \param [in] routing_key the routing key to use when publishing the message
- * \param [in] mandatory indicate to the broker that the message MUST be routed
- *              to a queue. If the broker cannot do this it should respond with
- *              a basic.return method.
- * \param [in] immediate indicate to the broker that the message MUST be
- *             delivered to a consumer immediately. If the broker cannot do this
- *             it should respond with a basic.return method.
- * \param [in] properties the properties associated with the message
- * \param [in] body the message body
- * \return AMQP_STATUS_OK on success, amqp_status_enum value on failure. Note
- *         that basic.publish is an async method, the return value from this
- *         function only indicates that the message data was successfully
- *         transmitted to the broker. It does not indicate failures that occur
- *         on the broker, such as publishing to a non-existent exchange.
- *         Possible error values:
- *         - AMQP_STATUS_TIMER_FAILURE: system timer facility returned an error
- *           the message was not sent.
- *         - AMQP_STATUS_HEARTBEAT_TIMEOUT: connection timed out waiting for a
- *           heartbeat from the broker. The message was not sent.
- *         - AMQP_STATUS_NO_MEMORY: memory allocation failed. The message was
- *           not sent.
- *         - AMQP_STATUS_TABLE_TOO_BIG: a table in the properties was too large
- *           to fit in a single frame. Message was not sent.
- *         - AMQP_STATUS_CONNECTION_CLOSED: the connection was closed.
- *         - AMQP_STATUS_SSL_ERROR: a SSL error occurred.
- *         - AMQP_STATUS_TCP_ERROR: a TCP error occurred. errno or
- *           WSAGetLastError() may provide more information
- *
- * Note: this function does heartbeat processing as of v0.4.0
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_publish(
-    amqp_connection_state_t state, amqp_channel_t channel,
-    amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_boolean_t mandatory,
-    amqp_boolean_t immediate, struct amqp_basic_properties_t_ const *properties,
-    amqp_bytes_t body);
-
-/**
- * Closes an channel
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] code the reason for closing the channel, AMQP_REPLY_SUCCESS is a
- *             good default
- * \return amqp_rpc_reply_t indicating success or failure
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_channel_close(amqp_connection_state_t state,
-                                              amqp_channel_t channel, int code);
-
-/**
- * Closes the entire connection
- *
- * Implicitly closes all channels and informs the broker the connection
- * is being closed, after receiving acknowledgment from the broker it closes
- * the socket.
- *
- * \param [in] state the connection object
- * \param [in] code the reason code for closing the connection.
- *             AMQP_REPLY_SUCCESS is a good default.
- * \return amqp_rpc_reply_t indicating the result
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_connection_close(amqp_connection_state_t state,
-                                                 int code);
-
-/**
- * Acknowledges a message
- *
- * Does a basic.ack on a received message
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] delivery_tag the delivery tag of the message to be ack'd
- * \param [in] multiple if true, ack all messages up to this delivery tag, if
- *              false ack only this delivery tag
- * \return 0 on success,  0 > on failing to send the ack to the broker.
- *            this will not indicate failure if something goes wrong on the
- *            broker
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_ack(amqp_connection_state_t state,
-                             amqp_channel_t channel, uint64_t delivery_tag,
-                             amqp_boolean_t multiple);
-
-/**
- * Do a basic.get
- *
- * Synchonously polls the broker for a message in a queue, and
- * retrieves the message if a message is in the queue.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier to use
- * \param [in] queue the queue name to retrieve from
- * \param [in] no_ack if true the message is automatically ack'ed
- *              if false amqp_basic_ack should be called once the message
- *              retrieved has been processed
- * \return amqp_rpc_reply indicating success or failure
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_basic_get(amqp_connection_state_t state,
-                                          amqp_channel_t channel,
-                                          amqp_bytes_t queue,
-                                          amqp_boolean_t no_ack);
-
-/**
- * Do a basic.reject
- *
- * Actively reject a message that has been delivered
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] delivery_tag the delivery tag of the message to reject
- * \param [in] requeue indicate to the broker whether it should requeue the
- *              message or just discard it.
- * \return 0 on success, 0 > on failing to send the reject method to the broker.
- *          This will not indicate failure if something goes wrong on the
- * broker.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_reject(amqp_connection_state_t state,
-                                amqp_channel_t channel, uint64_t delivery_tag,
-                                amqp_boolean_t requeue);
-
-/**
- * Do a basic.nack
- *
- * Actively reject a message, this has the same effect as amqp_basic_reject()
- * however, amqp_basic_nack() can negatively acknowledge multiple messages with
- * one call much like amqp_basic_ack() can acknowledge mutliple messages with
- * one call.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] delivery_tag the delivery tag of the message to reject
- * \param [in] multiple if set to 1 negatively acknowledge all unacknowledged
- *              messages on this channel.
- * \param [in] requeue indicate to the broker whether it should requeue the
- *              message or dead-letter it.
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value otherwise.
- *
- * \since v0.5.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_nack(amqp_connection_state_t state,
-                              amqp_channel_t channel, uint64_t delivery_tag,
-                              amqp_boolean_t multiple, amqp_boolean_t requeue);
-/**
- * Check to see if there is data left in the receive buffer
- *
- * Can be used to see if there is data still in the buffer, if so
- * calling amqp_simple_wait_frame will not immediately enter a
- * blocking read.
- *
- * \param [in] state the connection object
- * \return true if there is data in the recieve buffer, false otherwise
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_data_in_buffer(amqp_connection_state_t state);
-
-/**
- * Get the error string for the given error code.
- *
- * \deprecated This function has been deprecated in favor of
- *  \ref amqp_error_string2() which returns statically allocated
- *  string which do not need to be freed by the caller.
- *
- * The returned string resides on the heap; the caller is responsible
- * for freeing it.
- *
- * \param [in] err return error code
- * \return the error string
- *
- * \since v0.1
- */
-AMQP_DEPRECATED(
-    AMQP_PUBLIC_FUNCTION char *AMQP_CALL amqp_error_string(int err));
-
-/**
- * Get the error string for the given error code.
- *
- * Get an error string associated with an error code. The string is statically
- * allocated and does not need to be freed
- *
- * \param [in] err the error code
- * \return the error string
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-const char *AMQP_CALL amqp_error_string2(int err);
-
-/**
- * Deserialize an amqp_table_t from AMQP wireformat
- *
- * This is an internal function and is not typically used by
- * client applications
- *
- * \param [in] encoded the buffer containing the serialized data
- * \param [in] pool memory pool used to allocate the table entries from
- * \param [in] output the amqp_table_t structure to fill in. Any existing
- *             entries will be erased
- * \param [in,out] offset The offset into the encoded buffer to start
- *                 reading the serialized table. It will be updated
- *                 by this function to end of the table
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value on failure
- *  Possible error codes:
- *  - AMQP_STATUS_NO_MEMORY out of memory
- *  - AMQP_STATUS_BAD_AMQP_DATA invalid wireformat
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_decode_table(amqp_bytes_t encoded, amqp_pool_t *pool,
-                                amqp_table_t *output, size_t *offset);
-
-/**
- * Serializes an amqp_table_t to the AMQP wireformat
- *
- * This is an internal function and is not typically used by
- * client applications
- *
- * \param [in] encoded the buffer where to serialize the table to
- * \param [in] input the amqp_table_t to serialize
- * \param [in,out] offset The offset into the encoded buffer to start
- *                 writing the serialized table. It will be updated
- *                 by this function to where writing left off
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value on failure
- *  Possible error codes:
- *  - AMQP_STATUS_TABLE_TOO_BIG the serialized form is too large for the
- *    buffer
- *  - AMQP_STATUS_BAD_AMQP_DATA invalid table
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_encode_table(amqp_bytes_t encoded, amqp_table_t *input,
-                                size_t *offset);
-
-/**
- * Create a deep-copy of an amqp_table_t object
- *
- * Creates a deep-copy of an amqp_table_t object, using the provided pool
- * object to allocate the necessary memory. This memory can be freed later by
- * call recycle_amqp_pool(), or empty_amqp_pool()
- *
- * \param [in] original the table to copy
- * \param [in,out] clone the table to copy to
- * \param [in] pool the initialized memory pool to do allocations for the table
- *             from
- * \return AMQP_STATUS_OK on success, amqp_status_enum value on failure.
- *  Possible error values:
- *  - AMQP_STATUS_NO_MEMORY - memory allocation failure.
- *  - AMQP_STATUS_INVALID_PARAMETER - invalid table (e.g., no key name)
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_table_clone(const amqp_table_t *original,
-                               amqp_table_t *clone, amqp_pool_t *pool);
-
-/**
- * A message object
- *
- * \since v0.4.0
- */
-typedef struct amqp_message_t_ {
-  amqp_basic_properties_t properties; /**< message properties */
-  amqp_bytes_t body;                  /**< message body */
-  amqp_pool_t pool;                   /**< pool used to allocate properties */
-} amqp_message_t;
-
-/**
- * Reads the next message on a channel
- *
- * Reads a complete message (header + body) on a specified channel. This
- * function is intended to be used with amqp_basic_get() or when an
- * AMQP_BASIC_DELIVERY_METHOD method is received.
- *
- * \param [in,out] state the connection object
- * \param [in] channel the channel on which to read the message from
- * \param [in,out] message a pointer to a amqp_message_t object. Caller should
- *                 call amqp_message_destroy() when it is done using the
- *                 fields in the message object.  The caller is responsible for
- *                 allocating/destroying the amqp_message_t object itself.
- * \param [in] flags pass in 0. Currently unused.
- * \returns a amqp_rpc_reply_t object. ret.reply_type == AMQP_RESPONSE_NORMAL on
- * success.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_read_message(amqp_connection_state_t state,
-                                             amqp_channel_t channel,
-                                             amqp_message_t *message,
-                                             int flags);
-
-/**
- * Frees memory associated with a amqp_message_t allocated in amqp_read_message
- *
- * \param [in] message
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_destroy_message(amqp_message_t *message);
-
-/**
- * Envelope object
- *
- * \since v0.4.0
- */
-typedef struct amqp_envelope_t_ {
-  amqp_channel_t channel; /**< channel message was delivered on */
-  amqp_bytes_t
-      consumer_tag;      /**< the consumer tag the message was delivered to */
-  uint64_t delivery_tag; /**< the messages delivery tag */
-  amqp_boolean_t redelivered; /**< flag indicating whether this message is being
-                                 redelivered */
-  amqp_bytes_t exchange;      /**< exchange this message was published to */
-  amqp_bytes_t
-      routing_key; /**< the routing key this message was published with */
-  amqp_message_t message; /**< the message */
-} amqp_envelope_t;
-
-/**
- * Wait for and consume a message
- *
- * Waits for a basic.deliver method on any channel, upon receipt of
- * basic.deliver it reads that message, and returns. If any other method is
- * received before basic.deliver, this function will return an amqp_rpc_reply_t
- * with ret.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION, and
- * ret.library_error == AMQP_STATUS_UNEXPECTED_STATE. The caller should then
- * call amqp_simple_wait_frame() to read this frame and take appropriate action.
- *
- * This function should be used after starting a consumer with the
- * amqp_basic_consume() function
- *
- * \param [in,out] state the connection object
- * \param [in,out] envelope a pointer to a amqp_envelope_t object. Caller
- *                 should call #amqp_destroy_envelope() when it is done using
- *                 the fields in the envelope object. The caller is responsible
- *                 for allocating/destroying the amqp_envelope_t object itself.
- * \param [in] timeout a timeout to wait for a message delivery. Passing in
- *             NULL will result in blocking behavior.
- * \param [in] flags pass in 0. Currently unused.
- * \returns a amqp_rpc_reply_t object.  ret.reply_type == AMQP_RESPONSE_NORMAL
- *          on success. If ret.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION,
- *          and ret.library_error == AMQP_STATUS_UNEXPECTED_STATE, a frame other
- *          than AMQP_BASIC_DELIVER_METHOD was received, the caller should call
- *          amqp_simple_wait_frame() to read this frame and take appropriate
- *          action.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_consume_message(amqp_connection_state_t state,
-                                                amqp_envelope_t *envelope,
-                                                struct timeval *timeout,
-                                                int flags);
-
-/**
- * Frees memory associated with a amqp_envelope_t allocated in
- * amqp_consume_message()
- *
- * \param [in] envelope
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_destroy_envelope(amqp_envelope_t *envelope);
-
-/**
- * Parameters used to connect to the RabbitMQ broker
- *
- * \since v0.2
- */
-struct amqp_connection_info {
-  char *user; /**< the username to authenticate with the broker, default on most
-                 broker is 'guest' */
-  char *password; /**< the password to authenticate with the broker, default on
-                     most brokers is 'guest' */
-  char *host;     /**< the hostname of the broker */
-  char *vhost; /**< the virtual host on the broker to connect to, a good default
-                  is "/" */
-  int port;    /**< the port that the broker is listening on, default on most
-                  brokers is 5672 */
-  amqp_boolean_t ssl;
-};
-
-/**
- * Initialze an amqp_connection_info to default values
- *
- * The default values are:
- * - user: "guest"
- * - password: "guest"
- * - host: "localhost"
- * - vhost: "/"
- * - port: 5672
- *
- * \param [out] parsed the connection info to set defaults on
- *
- * \since v0.2
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL
-    amqp_default_connection_info(struct amqp_connection_info *parsed);
-
-/**
- * Parse a connection URL
- *
- * An amqp connection url takes the form:
- *
- * amqp://[$USERNAME[:$PASSWORD]\@]$HOST[:$PORT]/[$VHOST]
- *
- * Examples:
- *  amqp://guest:guest\@localhost:5672//
- *  amqp://guest:guest\@localhost/myvhost
- *
- *  Any missing parts of the URL will be set to the defaults specified in
- *  amqp_default_connection_info. For amqps: URLs the default port will be set
- *  to 5671 instead of 5672 for non-SSL URLs.
- *
- * \note This function modifies url parameter.
- *
- * \param [in] url URI to parse, note that this parameter is modified by the
- *             function.
- * \param [out] parsed the connection info gleaned from the URI. The char*
- *              members will point to parts of the url input parameter.
- *              Memory management will depend on how the url is allocated.
- * \returns AMQP_STATUS_OK on success, AMQP_STATUS_BAD_URL on failure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_parse_url(char *url, struct amqp_connection_info *parsed);
-
-/* socket API */
-
-/**
- * Open a socket connection.
- *
- * This function opens a socket connection returned from amqp_tcp_socket_new()
- * or amqp_ssl_socket_new(). This function should be called after setting
- * socket options and prior to assigning the socket to an AMQP connection with
- * amqp_set_socket().
- *
- * \param [in,out] self A socket object.
- * \param [in] host Connect to this host.
- * \param [in] port Connect on this remote port.
- *
- * \return AMQP_STATUS_OK on success, an amqp_status_enum on failure
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_socket_open(amqp_socket_t *self, const char *host, int port);
-
-/**
- * Open a socket connection.
- *
- * This function opens a socket connection returned from amqp_tcp_socket_new()
- * or amqp_ssl_socket_new(). This function should be called after setting
- * socket options and prior to assigning the socket to an AMQP connection with
- * amqp_set_socket().
- *
- * \param [in,out] self A socket object.
- * \param [in] host Connect to this host.
- * \param [in] port Connect on this remote port.
- * \param [in] timeout Max allowed time to spent on opening. If NULL - run in
- *             blocking mode
- *
- * \return AMQP_STATUS_OK on success, an amqp_status_enum on failure.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_socket_open_noblock(amqp_socket_t *self, const char *host,
-                                       int port, struct timeval *timeout);
-
-/**
- * Get the socket descriptor in use by a socket object.
- *
- * Retrieve the underlying socket descriptor. This function can be used to
- * perform low-level socket operations that aren't supported by the socket
- * interface. Use with caution!
- *
- * \param [in,out] self A socket object.
- *
- * \return The underlying socket descriptor, or -1 if there is no socket
- *  descriptor associated with
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_socket_get_sockfd(amqp_socket_t *self);
-
-/**
- * Get the socket object associated with a amqp_connection_state_t
- *
- * \param [in] state the connection object to get the socket from
- * \return a pointer to the socket object, or NULL if one has not been assigned
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_socket_t *AMQP_CALL amqp_get_socket(amqp_connection_state_t state);
-
-/**
- * Get the broker properties table
- *
- * \param [in] state the connection object
- * \return a pointer to an amqp_table_t containing the properties advertised
- *  by the broker on connection. The connection object owns the table, it
- *  should not be modified.
- *
- * \since v0.5.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_table_t *AMQP_CALL
-    amqp_get_server_properties(amqp_connection_state_t state);
-
-/**
- * Get the client properties table
- *
- * Get the properties that were passed to the broker on connection.
- *
- * \param [in] state the connection object
- * \return a pointer to an amqp_table_t containing the properties advertised
- *  by the client on connection. The connection object owns the table, it
- *  should not be modified.
- *
- * \since v0.7.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_table_t *AMQP_CALL
-    amqp_get_client_properties(amqp_connection_state_t state);
-
-/**
- * Get the login handshake timeout.
- *
- * amqp_login and amqp_login_with_properties perform the login handshake with
- * the broker.  This function returns the timeout associated with completing
- * this operation from the client side. This value can be set by using the
- * amqp_set_handshake_timeout.
- *
- * Note that the RabbitMQ broker has configurable timeout for completing the
- * login handshake, the default is 10 seconds.  rabbitmq-c has a default of 12
- * seconds.
- *
- * \param [in] state the connection object
- * \return a struct timeval representing the current login timeout for the state
- *  object. A NULL value represents an infinite timeout. The memory returned is
- *  owned by the connection object.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-struct timeval *AMQP_CALL
-    amqp_get_handshake_timeout(amqp_connection_state_t state);
-
-/**
- * Set the login handshake timeout.
- *
- * amqp_login and amqp_login_with_properties perform the login handshake with
- * the broker. This function sets the timeout associated with completing this
- * operation from the client side.
- *
- * The timeout must be set before amqp_login or amqp_login_with_properties is
- * called to change from the default timeout.
- *
- * Note that the RabbitMQ broker has a configurable timeout for completing the
- * login handshake, the default is 10 seconds. rabbitmq-c has a default of 12
- * seconds.
- *
- * \param [in] state the connection object
- * \param [in] timeout a struct timeval* representing new login timeout for the
- *  state object. NULL represents an infinite timeout. The value of timeout is
- *  copied internally, the caller is responsible for ownership of the passed in
- *  pointer, it does not need to remain valid after this function is called.
- * \return AMQP_STATUS_OK on success.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_set_handshake_timeout(amqp_connection_state_t state,
-                                         struct timeval *timeout);
-
-/**
- * Get the RPC timeout
- *
- * Gets the timeout for any RPC-style AMQP command (e.g., amqp_queue_declare).
- * This timeout may be changed at any time by calling \amqp_set_rpc_timeout
- * function with a new timeout. The timeout applies individually to each RPC
- * that is made.
- *
- * The default value is NULL, or an infinite timeout.
- *
- * When an RPC times out, the function will return an error AMQP_STATUS_TIMEOUT,
- * and the connection will be closed.
- *
- *\warning RPC-timeouts are an advanced feature intended to be used to detect
- * dead connections quickly when the rabbitmq-c implementation of heartbeats
- * does not work. Do not use RPC timeouts unless you understand the implications
- * of doing so.
- *
- * \param [in] state the connection object
- * \return a struct timeval representing the current RPC timeout for the state
- * object. A NULL value represents an infinite timeout. The memory returned is
- * owned by the connection object.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-struct timeval *AMQP_CALL amqp_get_rpc_timeout(amqp_connection_state_t state);
-
-/**
- * Set the RPC timeout
- *
- * Sets the timeout for any RPC-style AMQP command (e.g., amqp_queue_declare).
- * This timeout may be changed at any time by calling this function with a new
- * timeout. The timeout applies individually to each RPC that is made.
- *
- * The default value is NULL, or an infinite timeout.
- *
- * When an RPC times out, the function will return an error AMQP_STATUS_TIMEOUT,
- * and the connection will be closed.
- *
- *\warning RPC-timeouts are an advanced feature intended to be used to detect
- * dead connections quickly when the rabbitmq-c implementation of heartbeats
- * does not work. Do not use RPC timeouts unless you understand the implications
- * of doing so.
- *
- * \param [in] state the connection object
- * \param [in] timeout a struct timeval* representing new RPC timeout for the
- * state object. NULL represents an infinite timeout. The value of timeout is
- * copied internally, the caller is responsible for ownership of the passed
- * pointer, it does not need to remain valid after this function is called.
- * \return AMQP_STATUS_SUCCESS on success.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_set_rpc_timeout(amqp_connection_state_t state,
-                                   struct timeval *timeout);
-
-AMQP_END_DECLS
-
-#endif /* AMQP_H */

+ 0 - 1144
ext/librabbitmq/centos_x64/include/amqp_framing.h

@@ -1,1144 +0,0 @@
-/* Generated code. Do not edit. Edit and re-run codegen.py instead.
- *
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MIT
- *
- * Portions created by Alan Antonuk are Copyright (c) 2012-2013
- * Alan Antonuk. All Rights Reserved.
- *
- * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc.
- * All Rights Reserved.
- *
- * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010
- * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- * ***** END LICENSE BLOCK *****
- */
-
-/** @file amqp_framing.h */
-#ifndef AMQP_FRAMING_H
-#define AMQP_FRAMING_H
-
-#include <amqp.h>
-
-AMQP_BEGIN_DECLS
-
-#define AMQP_PROTOCOL_VERSION_MAJOR 0 /**< AMQP protocol version major */
-#define AMQP_PROTOCOL_VERSION_MINOR 9 /**< AMQP protocol version minor */
-#define AMQP_PROTOCOL_VERSION_REVISION                                   \
-  1                                  /**< AMQP protocol version revision \
-                                        */
-#define AMQP_PROTOCOL_PORT 5672      /**< Default AMQP Port */
-#define AMQP_FRAME_METHOD 1          /**< Constant: FRAME-METHOD */
-#define AMQP_FRAME_HEADER 2          /**< Constant: FRAME-HEADER */
-#define AMQP_FRAME_BODY 3            /**< Constant: FRAME-BODY */
-#define AMQP_FRAME_HEARTBEAT 8       /**< Constant: FRAME-HEARTBEAT */
-#define AMQP_FRAME_MIN_SIZE 4096     /**< Constant: FRAME-MIN-SIZE */
-#define AMQP_FRAME_END 206           /**< Constant: FRAME-END */
-#define AMQP_REPLY_SUCCESS 200       /**< Constant: REPLY-SUCCESS */
-#define AMQP_CONTENT_TOO_LARGE 311   /**< Constant: CONTENT-TOO-LARGE */
-#define AMQP_NO_ROUTE 312            /**< Constant: NO-ROUTE */
-#define AMQP_NO_CONSUMERS 313        /**< Constant: NO-CONSUMERS */
-#define AMQP_ACCESS_REFUSED 403      /**< Constant: ACCESS-REFUSED */
-#define AMQP_NOT_FOUND 404           /**< Constant: NOT-FOUND */
-#define AMQP_RESOURCE_LOCKED 405     /**< Constant: RESOURCE-LOCKED */
-#define AMQP_PRECONDITION_FAILED 406 /**< Constant: PRECONDITION-FAILED */
-#define AMQP_CONNECTION_FORCED 320   /**< Constant: CONNECTION-FORCED */
-#define AMQP_INVALID_PATH 402        /**< Constant: INVALID-PATH */
-#define AMQP_FRAME_ERROR 501         /**< Constant: FRAME-ERROR */
-#define AMQP_SYNTAX_ERROR 502        /**< Constant: SYNTAX-ERROR */
-#define AMQP_COMMAND_INVALID 503     /**< Constant: COMMAND-INVALID */
-#define AMQP_CHANNEL_ERROR 504       /**< Constant: CHANNEL-ERROR */
-#define AMQP_UNEXPECTED_FRAME 505    /**< Constant: UNEXPECTED-FRAME */
-#define AMQP_RESOURCE_ERROR 506      /**< Constant: RESOURCE-ERROR */
-#define AMQP_NOT_ALLOWED 530         /**< Constant: NOT-ALLOWED */
-#define AMQP_NOT_IMPLEMENTED 540     /**< Constant: NOT-IMPLEMENTED */
-#define AMQP_INTERNAL_ERROR 541      /**< Constant: INTERNAL-ERROR */
-
-/* Function prototypes. */
-
-/**
- * Get constant name string from constant
- *
- * @param [in] constantNumber constant to get the name of
- * @returns string describing the constant. String is managed by
- *           the library and should not be free()'d by the program
- */
-AMQP_PUBLIC_FUNCTION
-char const *AMQP_CALL amqp_constant_name(int constantNumber);
-
-/**
- * Checks to see if a constant is a hard error
- *
- * A hard error occurs when something severe enough
- * happens that the connection must be closed.
- *
- * @param [in] constantNumber the error constant
- * @returns true if its a hard error, false otherwise
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_constant_is_hard_error(int constantNumber);
-
-/**
- * Get method name string from method number
- *
- * @param [in] methodNumber the method number
- * @returns method name string. String is managed by the library
- *           and should not be freed()'d by the program
- */
-AMQP_PUBLIC_FUNCTION
-char const *AMQP_CALL amqp_method_name(amqp_method_number_t methodNumber);
-
-/**
- * Check whether a method has content
- *
- * A method that has content will receive the method frame
- * a properties frame, then 1 to N body frames
- *
- * @param [in] methodNumber the method number
- * @returns true if method has content, false otherwise
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL
-    amqp_method_has_content(amqp_method_number_t methodNumber);
-
-/**
- * Decodes a method from AMQP wireformat
- *
- * @param [in] methodNumber the method number for the decoded parameter
- * @param [in] pool the memory pool to allocate the decoded method from
- * @param [in] encoded the encoded byte string buffer
- * @param [out] decoded pointer to the decoded method struct
- * @returns 0 on success, an error code otherwise
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_decode_method(amqp_method_number_t methodNumber,
-                                 amqp_pool_t *pool, amqp_bytes_t encoded,
-                                 void **decoded);
-
-/**
- * Decodes a header frame properties structure from AMQP wireformat
- *
- * @param [in] class_id the class id for the decoded parameter
- * @param [in] pool the memory pool to allocate the decoded properties from
- * @param [in] encoded the encoded byte string buffer
- * @param [out] decoded pointer to the decoded properties struct
- * @returns 0 on success, an error code otherwise
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_decode_properties(uint16_t class_id, amqp_pool_t *pool,
-                                     amqp_bytes_t encoded, void **decoded);
-
-/**
- * Encodes a method structure in AMQP wireformat
- *
- * @param [in] methodNumber the method number for the decoded parameter
- * @param [in] decoded the method structure (e.g., amqp_connection_start_t)
- * @param [in] encoded an allocated byte buffer for the encoded method
- *              structure to be written to. If the buffer isn't large enough
- *              to hold the encoded method, an error code will be returned.
- * @returns 0 on success, an error code otherwise.
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_encode_method(amqp_method_number_t methodNumber,
-                                 void *decoded, amqp_bytes_t encoded);
-
-/**
- * Encodes a properties structure in AMQP wireformat
- *
- * @param [in] class_id the class id for the decoded parameter
- * @param [in] decoded the properties structure (e.g., amqp_basic_properties_t)
- * @param [in] encoded an allocated byte buffer for the encoded properties to
- * written to.
- *              If the buffer isn't large enough to hold the encoded method, an
- *              an error code will be returned
- * @returns 0 on success, an error code otherwise.
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_encode_properties(uint16_t class_id, void *decoded,
-                                     amqp_bytes_t encoded);
-
-/* Method field records. */
-
-#define AMQP_CONNECTION_START_METHOD                                 \
-  ((amqp_method_number_t)0x000A000A) /**< connection.start method id \
-                                        @internal 10, 10; 655370 */
-/** connection.start method fields */
-typedef struct amqp_connection_start_t_ {
-  uint8_t version_major;          /**< version-major */
-  uint8_t version_minor;          /**< version-minor */
-  amqp_table_t server_properties; /**< server-properties */
-  amqp_bytes_t mechanisms;        /**< mechanisms */
-  amqp_bytes_t locales;           /**< locales */
-} amqp_connection_start_t;
-
-#define AMQP_CONNECTION_START_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A000B) /**< connection.start-ok method id \
-                                        @internal 10, 11; 655371 */
-/** connection.start-ok method fields */
-typedef struct amqp_connection_start_ok_t_ {
-  amqp_table_t client_properties; /**< client-properties */
-  amqp_bytes_t mechanism;         /**< mechanism */
-  amqp_bytes_t response;          /**< response */
-  amqp_bytes_t locale;            /**< locale */
-} amqp_connection_start_ok_t;
-
-#define AMQP_CONNECTION_SECURE_METHOD                                 \
-  ((amqp_method_number_t)0x000A0014) /**< connection.secure method id \
-                                        @internal 10, 20; 655380 */
-/** connection.secure method fields */
-typedef struct amqp_connection_secure_t_ {
-  amqp_bytes_t challenge; /**< challenge */
-} amqp_connection_secure_t;
-
-#define AMQP_CONNECTION_SECURE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A0015) /**< connection.secure-ok method id \
-                                        @internal 10, 21; 655381 */
-/** connection.secure-ok method fields */
-typedef struct amqp_connection_secure_ok_t_ {
-  amqp_bytes_t response; /**< response */
-} amqp_connection_secure_ok_t;
-
-#define AMQP_CONNECTION_TUNE_METHOD                                 \
-  ((amqp_method_number_t)0x000A001E) /**< connection.tune method id \
-                                        @internal 10, 30; 655390 */
-/** connection.tune method fields */
-typedef struct amqp_connection_tune_t_ {
-  uint16_t channel_max; /**< channel-max */
-  uint32_t frame_max;   /**< frame-max */
-  uint16_t heartbeat;   /**< heartbeat */
-} amqp_connection_tune_t;
-
-#define AMQP_CONNECTION_TUNE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A001F) /**< connection.tune-ok method id \
-                                        @internal 10, 31; 655391 */
-/** connection.tune-ok method fields */
-typedef struct amqp_connection_tune_ok_t_ {
-  uint16_t channel_max; /**< channel-max */
-  uint32_t frame_max;   /**< frame-max */
-  uint16_t heartbeat;   /**< heartbeat */
-} amqp_connection_tune_ok_t;
-
-#define AMQP_CONNECTION_OPEN_METHOD                                 \
-  ((amqp_method_number_t)0x000A0028) /**< connection.open method id \
-                                        @internal 10, 40; 655400 */
-/** connection.open method fields */
-typedef struct amqp_connection_open_t_ {
-  amqp_bytes_t virtual_host; /**< virtual-host */
-  amqp_bytes_t capabilities; /**< capabilities */
-  amqp_boolean_t insist;     /**< insist */
-} amqp_connection_open_t;
-
-#define AMQP_CONNECTION_OPEN_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A0029) /**< connection.open-ok method id \
-                                        @internal 10, 41; 655401 */
-/** connection.open-ok method fields */
-typedef struct amqp_connection_open_ok_t_ {
-  amqp_bytes_t known_hosts; /**< known-hosts */
-} amqp_connection_open_ok_t;
-
-#define AMQP_CONNECTION_CLOSE_METHOD                                 \
-  ((amqp_method_number_t)0x000A0032) /**< connection.close method id \
-                                        @internal 10, 50; 655410 */
-/** connection.close method fields */
-typedef struct amqp_connection_close_t_ {
-  uint16_t reply_code;     /**< reply-code */
-  amqp_bytes_t reply_text; /**< reply-text */
-  uint16_t class_id;       /**< class-id */
-  uint16_t method_id;      /**< method-id */
-} amqp_connection_close_t;
-
-#define AMQP_CONNECTION_CLOSE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A0033) /**< connection.close-ok method id \
-                                        @internal 10, 51; 655411 */
-/** connection.close-ok method fields */
-typedef struct amqp_connection_close_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_connection_close_ok_t;
-
-#define AMQP_CONNECTION_BLOCKED_METHOD                                 \
-  ((amqp_method_number_t)0x000A003C) /**< connection.blocked method id \
-                                        @internal 10, 60; 655420 */
-/** connection.blocked method fields */
-typedef struct amqp_connection_blocked_t_ {
-  amqp_bytes_t reason; /**< reason */
-} amqp_connection_blocked_t;
-
-#define AMQP_CONNECTION_UNBLOCKED_METHOD                                 \
-  ((amqp_method_number_t)0x000A003D) /**< connection.unblocked method id \
-                                        @internal 10, 61; 655421 */
-/** connection.unblocked method fields */
-typedef struct amqp_connection_unblocked_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_connection_unblocked_t;
-
-#define AMQP_CHANNEL_OPEN_METHOD                                           \
-  ((amqp_method_number_t)0x0014000A) /**< channel.open method id @internal \
-                                        20, 10; 1310730 */
-/** channel.open method fields */
-typedef struct amqp_channel_open_t_ {
-  amqp_bytes_t out_of_band; /**< out-of-band */
-} amqp_channel_open_t;
-
-#define AMQP_CHANNEL_OPEN_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0014000B) /**< channel.open-ok method id \
-                                        @internal 20, 11; 1310731 */
-/** channel.open-ok method fields */
-typedef struct amqp_channel_open_ok_t_ {
-  amqp_bytes_t channel_id; /**< channel-id */
-} amqp_channel_open_ok_t;
-
-#define AMQP_CHANNEL_FLOW_METHOD                                           \
-  ((amqp_method_number_t)0x00140014) /**< channel.flow method id @internal \
-                                        20, 20; 1310740 */
-/** channel.flow method fields */
-typedef struct amqp_channel_flow_t_ {
-  amqp_boolean_t active; /**< active */
-} amqp_channel_flow_t;
-
-#define AMQP_CHANNEL_FLOW_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00140015) /**< channel.flow-ok method id \
-                                        @internal 20, 21; 1310741 */
-/** channel.flow-ok method fields */
-typedef struct amqp_channel_flow_ok_t_ {
-  amqp_boolean_t active; /**< active */
-} amqp_channel_flow_ok_t;
-
-#define AMQP_CHANNEL_CLOSE_METHOD                                           \
-  ((amqp_method_number_t)0x00140028) /**< channel.close method id @internal \
-                                        20, 40; 1310760 */
-/** channel.close method fields */
-typedef struct amqp_channel_close_t_ {
-  uint16_t reply_code;     /**< reply-code */
-  amqp_bytes_t reply_text; /**< reply-text */
-  uint16_t class_id;       /**< class-id */
-  uint16_t method_id;      /**< method-id */
-} amqp_channel_close_t;
-
-#define AMQP_CHANNEL_CLOSE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00140029) /**< channel.close-ok method id \
-                                        @internal 20, 41; 1310761 */
-/** channel.close-ok method fields */
-typedef struct amqp_channel_close_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_channel_close_ok_t;
-
-#define AMQP_ACCESS_REQUEST_METHOD                                           \
-  ((amqp_method_number_t)0x001E000A) /**< access.request method id @internal \
-                                        30, 10; 1966090 */
-/** access.request method fields */
-typedef struct amqp_access_request_t_ {
-  amqp_bytes_t realm;       /**< realm */
-  amqp_boolean_t exclusive; /**< exclusive */
-  amqp_boolean_t passive;   /**< passive */
-  amqp_boolean_t active;    /**< active */
-  amqp_boolean_t write;     /**< write */
-  amqp_boolean_t read;      /**< read */
-} amqp_access_request_t;
-
-#define AMQP_ACCESS_REQUEST_OK_METHOD                                 \
-  ((amqp_method_number_t)0x001E000B) /**< access.request-ok method id \
-                                        @internal 30, 11; 1966091 */
-/** access.request-ok method fields */
-typedef struct amqp_access_request_ok_t_ {
-  uint16_t ticket; /**< ticket */
-} amqp_access_request_ok_t;
-
-#define AMQP_EXCHANGE_DECLARE_METHOD                                 \
-  ((amqp_method_number_t)0x0028000A) /**< exchange.declare method id \
-                                        @internal 40, 10; 2621450 */
-/** exchange.declare method fields */
-typedef struct amqp_exchange_declare_t_ {
-  uint16_t ticket;            /**< ticket */
-  amqp_bytes_t exchange;      /**< exchange */
-  amqp_bytes_t type;          /**< type */
-  amqp_boolean_t passive;     /**< passive */
-  amqp_boolean_t durable;     /**< durable */
-  amqp_boolean_t auto_delete; /**< auto-delete */
-  amqp_boolean_t internal;    /**< internal */
-  amqp_boolean_t nowait;      /**< nowait */
-  amqp_table_t arguments;     /**< arguments */
-} amqp_exchange_declare_t;
-
-#define AMQP_EXCHANGE_DECLARE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0028000B) /**< exchange.declare-ok method id \
-                                        @internal 40, 11; 2621451 */
-/** exchange.declare-ok method fields */
-typedef struct amqp_exchange_declare_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_declare_ok_t;
-
-#define AMQP_EXCHANGE_DELETE_METHOD                                 \
-  ((amqp_method_number_t)0x00280014) /**< exchange.delete method id \
-                                        @internal 40, 20; 2621460 */
-/** exchange.delete method fields */
-typedef struct amqp_exchange_delete_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_boolean_t if_unused; /**< if-unused */
-  amqp_boolean_t nowait;    /**< nowait */
-} amqp_exchange_delete_t;
-
-#define AMQP_EXCHANGE_DELETE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00280015) /**< exchange.delete-ok method id \
-                                        @internal 40, 21; 2621461 */
-/** exchange.delete-ok method fields */
-typedef struct amqp_exchange_delete_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_delete_ok_t;
-
-#define AMQP_EXCHANGE_BIND_METHOD                                           \
-  ((amqp_method_number_t)0x0028001E) /**< exchange.bind method id @internal \
-                                        40, 30; 2621470 */
-/** exchange.bind method fields */
-typedef struct amqp_exchange_bind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t destination; /**< destination */
-  amqp_bytes_t source;      /**< source */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t nowait;    /**< nowait */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_exchange_bind_t;
-
-#define AMQP_EXCHANGE_BIND_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0028001F) /**< exchange.bind-ok method id \
-                                        @internal 40, 31; 2621471 */
-/** exchange.bind-ok method fields */
-typedef struct amqp_exchange_bind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_bind_ok_t;
-
-#define AMQP_EXCHANGE_UNBIND_METHOD                                 \
-  ((amqp_method_number_t)0x00280028) /**< exchange.unbind method id \
-                                        @internal 40, 40; 2621480 */
-/** exchange.unbind method fields */
-typedef struct amqp_exchange_unbind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t destination; /**< destination */
-  amqp_bytes_t source;      /**< source */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t nowait;    /**< nowait */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_exchange_unbind_t;
-
-#define AMQP_EXCHANGE_UNBIND_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00280033) /**< exchange.unbind-ok method id \
-                                        @internal 40, 51; 2621491 */
-/** exchange.unbind-ok method fields */
-typedef struct amqp_exchange_unbind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_unbind_ok_t;
-
-#define AMQP_QUEUE_DECLARE_METHOD                                           \
-  ((amqp_method_number_t)0x0032000A) /**< queue.declare method id @internal \
-                                        50, 10; 3276810 */
-/** queue.declare method fields */
-typedef struct amqp_queue_declare_t_ {
-  uint16_t ticket;            /**< ticket */
-  amqp_bytes_t queue;         /**< queue */
-  amqp_boolean_t passive;     /**< passive */
-  amqp_boolean_t durable;     /**< durable */
-  amqp_boolean_t exclusive;   /**< exclusive */
-  amqp_boolean_t auto_delete; /**< auto-delete */
-  amqp_boolean_t nowait;      /**< nowait */
-  amqp_table_t arguments;     /**< arguments */
-} amqp_queue_declare_t;
-
-#define AMQP_QUEUE_DECLARE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0032000B) /**< queue.declare-ok method id \
-                                        @internal 50, 11; 3276811 */
-/** queue.declare-ok method fields */
-typedef struct amqp_queue_declare_ok_t_ {
-  amqp_bytes_t queue;      /**< queue */
-  uint32_t message_count;  /**< message-count */
-  uint32_t consumer_count; /**< consumer-count */
-} amqp_queue_declare_ok_t;
-
-#define AMQP_QUEUE_BIND_METHOD                                               \
-  ((amqp_method_number_t)0x00320014) /**< queue.bind method id @internal 50, \
-                                        20; 3276820 */
-/** queue.bind method fields */
-typedef struct amqp_queue_bind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t queue;       /**< queue */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t nowait;    /**< nowait */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_queue_bind_t;
-
-#define AMQP_QUEUE_BIND_OK_METHOD                                           \
-  ((amqp_method_number_t)0x00320015) /**< queue.bind-ok method id @internal \
-                                        50, 21; 3276821 */
-/** queue.bind-ok method fields */
-typedef struct amqp_queue_bind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_queue_bind_ok_t;
-
-#define AMQP_QUEUE_PURGE_METHOD                                           \
-  ((amqp_method_number_t)0x0032001E) /**< queue.purge method id @internal \
-                                        50, 30; 3276830 */
-/** queue.purge method fields */
-typedef struct amqp_queue_purge_t_ {
-  uint16_t ticket;       /**< ticket */
-  amqp_bytes_t queue;    /**< queue */
-  amqp_boolean_t nowait; /**< nowait */
-} amqp_queue_purge_t;
-
-#define AMQP_QUEUE_PURGE_OK_METHOD                                           \
-  ((amqp_method_number_t)0x0032001F) /**< queue.purge-ok method id @internal \
-                                        50, 31; 3276831 */
-/** queue.purge-ok method fields */
-typedef struct amqp_queue_purge_ok_t_ {
-  uint32_t message_count; /**< message-count */
-} amqp_queue_purge_ok_t;
-
-#define AMQP_QUEUE_DELETE_METHOD                                           \
-  ((amqp_method_number_t)0x00320028) /**< queue.delete method id @internal \
-                                        50, 40; 3276840 */
-/** queue.delete method fields */
-typedef struct amqp_queue_delete_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t queue;       /**< queue */
-  amqp_boolean_t if_unused; /**< if-unused */
-  amqp_boolean_t if_empty;  /**< if-empty */
-  amqp_boolean_t nowait;    /**< nowait */
-} amqp_queue_delete_t;
-
-#define AMQP_QUEUE_DELETE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00320029) /**< queue.delete-ok method id \
-                                        @internal 50, 41; 3276841 */
-/** queue.delete-ok method fields */
-typedef struct amqp_queue_delete_ok_t_ {
-  uint32_t message_count; /**< message-count */
-} amqp_queue_delete_ok_t;
-
-#define AMQP_QUEUE_UNBIND_METHOD                                           \
-  ((amqp_method_number_t)0x00320032) /**< queue.unbind method id @internal \
-                                        50, 50; 3276850 */
-/** queue.unbind method fields */
-typedef struct amqp_queue_unbind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t queue;       /**< queue */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_queue_unbind_t;
-
-#define AMQP_QUEUE_UNBIND_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00320033) /**< queue.unbind-ok method id \
-                                        @internal 50, 51; 3276851 */
-/** queue.unbind-ok method fields */
-typedef struct amqp_queue_unbind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_queue_unbind_ok_t;
-
-#define AMQP_BASIC_QOS_METHOD                                               \
-  ((amqp_method_number_t)0x003C000A) /**< basic.qos method id @internal 60, \
-                                        10; 3932170 */
-/** basic.qos method fields */
-typedef struct amqp_basic_qos_t_ {
-  uint32_t prefetch_size;  /**< prefetch-size */
-  uint16_t prefetch_count; /**< prefetch-count */
-  amqp_boolean_t global;   /**< global */
-} amqp_basic_qos_t;
-
-#define AMQP_BASIC_QOS_OK_METHOD                                           \
-  ((amqp_method_number_t)0x003C000B) /**< basic.qos-ok method id @internal \
-                                        60, 11; 3932171 */
-/** basic.qos-ok method fields */
-typedef struct amqp_basic_qos_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_basic_qos_ok_t;
-
-#define AMQP_BASIC_CONSUME_METHOD                                           \
-  ((amqp_method_number_t)0x003C0014) /**< basic.consume method id @internal \
-                                        60, 20; 3932180 */
-/** basic.consume method fields */
-typedef struct amqp_basic_consume_t_ {
-  uint16_t ticket;           /**< ticket */
-  amqp_bytes_t queue;        /**< queue */
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-  amqp_boolean_t no_local;   /**< no-local */
-  amqp_boolean_t no_ack;     /**< no-ack */
-  amqp_boolean_t exclusive;  /**< exclusive */
-  amqp_boolean_t nowait;     /**< nowait */
-  amqp_table_t arguments;    /**< arguments */
-} amqp_basic_consume_t;
-
-#define AMQP_BASIC_CONSUME_OK_METHOD                                 \
-  ((amqp_method_number_t)0x003C0015) /**< basic.consume-ok method id \
-                                        @internal 60, 21; 3932181 */
-/** basic.consume-ok method fields */
-typedef struct amqp_basic_consume_ok_t_ {
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-} amqp_basic_consume_ok_t;
-
-#define AMQP_BASIC_CANCEL_METHOD                                           \
-  ((amqp_method_number_t)0x003C001E) /**< basic.cancel method id @internal \
-                                        60, 30; 3932190 */
-/** basic.cancel method fields */
-typedef struct amqp_basic_cancel_t_ {
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-  amqp_boolean_t nowait;     /**< nowait */
-} amqp_basic_cancel_t;
-
-#define AMQP_BASIC_CANCEL_OK_METHOD                                 \
-  ((amqp_method_number_t)0x003C001F) /**< basic.cancel-ok method id \
-                                        @internal 60, 31; 3932191 */
-/** basic.cancel-ok method fields */
-typedef struct amqp_basic_cancel_ok_t_ {
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-} amqp_basic_cancel_ok_t;
-
-#define AMQP_BASIC_PUBLISH_METHOD                                           \
-  ((amqp_method_number_t)0x003C0028) /**< basic.publish method id @internal \
-                                        60, 40; 3932200 */
-/** basic.publish method fields */
-typedef struct amqp_basic_publish_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t mandatory; /**< mandatory */
-  amqp_boolean_t immediate; /**< immediate */
-} amqp_basic_publish_t;
-
-#define AMQP_BASIC_RETURN_METHOD                                           \
-  ((amqp_method_number_t)0x003C0032) /**< basic.return method id @internal \
-                                        60, 50; 3932210 */
-/** basic.return method fields */
-typedef struct amqp_basic_return_t_ {
-  uint16_t reply_code;      /**< reply-code */
-  amqp_bytes_t reply_text;  /**< reply-text */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-} amqp_basic_return_t;
-
-#define AMQP_BASIC_DELIVER_METHOD                                           \
-  ((amqp_method_number_t)0x003C003C) /**< basic.deliver method id @internal \
-                                        60, 60; 3932220 */
-/** basic.deliver method fields */
-typedef struct amqp_basic_deliver_t_ {
-  amqp_bytes_t consumer_tag;  /**< consumer-tag */
-  uint64_t delivery_tag;      /**< delivery-tag */
-  amqp_boolean_t redelivered; /**< redelivered */
-  amqp_bytes_t exchange;      /**< exchange */
-  amqp_bytes_t routing_key;   /**< routing-key */
-} amqp_basic_deliver_t;
-
-#define AMQP_BASIC_GET_METHOD                                               \
-  ((amqp_method_number_t)0x003C0046) /**< basic.get method id @internal 60, \
-                                        70; 3932230 */
-/** basic.get method fields */
-typedef struct amqp_basic_get_t_ {
-  uint16_t ticket;       /**< ticket */
-  amqp_bytes_t queue;    /**< queue */
-  amqp_boolean_t no_ack; /**< no-ack */
-} amqp_basic_get_t;
-
-#define AMQP_BASIC_GET_OK_METHOD                                           \
-  ((amqp_method_number_t)0x003C0047) /**< basic.get-ok method id @internal \
-                                        60, 71; 3932231 */
-/** basic.get-ok method fields */
-typedef struct amqp_basic_get_ok_t_ {
-  uint64_t delivery_tag;      /**< delivery-tag */
-  amqp_boolean_t redelivered; /**< redelivered */
-  amqp_bytes_t exchange;      /**< exchange */
-  amqp_bytes_t routing_key;   /**< routing-key */
-  uint32_t message_count;     /**< message-count */
-} amqp_basic_get_ok_t;
-
-#define AMQP_BASIC_GET_EMPTY_METHOD                                 \
-  ((amqp_method_number_t)0x003C0048) /**< basic.get-empty method id \
-                                        @internal 60, 72; 3932232 */
-/** basic.get-empty method fields */
-typedef struct amqp_basic_get_empty_t_ {
-  amqp_bytes_t cluster_id; /**< cluster-id */
-} amqp_basic_get_empty_t;
-
-#define AMQP_BASIC_ACK_METHOD                                               \
-  ((amqp_method_number_t)0x003C0050) /**< basic.ack method id @internal 60, \
-                                        80; 3932240 */
-/** basic.ack method fields */
-typedef struct amqp_basic_ack_t_ {
-  uint64_t delivery_tag;   /**< delivery-tag */
-  amqp_boolean_t multiple; /**< multiple */
-} amqp_basic_ack_t;
-
-#define AMQP_BASIC_REJECT_METHOD                                           \
-  ((amqp_method_number_t)0x003C005A) /**< basic.reject method id @internal \
-                                        60, 90; 3932250 */
-/** basic.reject method fields */
-typedef struct amqp_basic_reject_t_ {
-  uint64_t delivery_tag;  /**< delivery-tag */
-  amqp_boolean_t requeue; /**< requeue */
-} amqp_basic_reject_t;
-
-#define AMQP_BASIC_RECOVER_ASYNC_METHOD                                 \
-  ((amqp_method_number_t)0x003C0064) /**< basic.recover-async method id \
-                                        @internal 60, 100; 3932260 */
-/** basic.recover-async method fields */
-typedef struct amqp_basic_recover_async_t_ {
-  amqp_boolean_t requeue; /**< requeue */
-} amqp_basic_recover_async_t;
-
-#define AMQP_BASIC_RECOVER_METHOD                                           \
-  ((amqp_method_number_t)0x003C006E) /**< basic.recover method id @internal \
-                                        60, 110; 3932270 */
-/** basic.recover method fields */
-typedef struct amqp_basic_recover_t_ {
-  amqp_boolean_t requeue; /**< requeue */
-} amqp_basic_recover_t;
-
-#define AMQP_BASIC_RECOVER_OK_METHOD                                 \
-  ((amqp_method_number_t)0x003C006F) /**< basic.recover-ok method id \
-                                        @internal 60, 111; 3932271 */
-/** basic.recover-ok method fields */
-typedef struct amqp_basic_recover_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_basic_recover_ok_t;
-
-#define AMQP_BASIC_NACK_METHOD                                               \
-  ((amqp_method_number_t)0x003C0078) /**< basic.nack method id @internal 60, \
-                                        120; 3932280 */
-/** basic.nack method fields */
-typedef struct amqp_basic_nack_t_ {
-  uint64_t delivery_tag;   /**< delivery-tag */
-  amqp_boolean_t multiple; /**< multiple */
-  amqp_boolean_t requeue;  /**< requeue */
-} amqp_basic_nack_t;
-
-#define AMQP_TX_SELECT_METHOD                                               \
-  ((amqp_method_number_t)0x005A000A) /**< tx.select method id @internal 90, \
-                                        10; 5898250 */
-/** tx.select method fields */
-typedef struct amqp_tx_select_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_select_t;
-
-#define AMQP_TX_SELECT_OK_METHOD                                           \
-  ((amqp_method_number_t)0x005A000B) /**< tx.select-ok method id @internal \
-                                        90, 11; 5898251 */
-/** tx.select-ok method fields */
-typedef struct amqp_tx_select_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_select_ok_t;
-
-#define AMQP_TX_COMMIT_METHOD                                               \
-  ((amqp_method_number_t)0x005A0014) /**< tx.commit method id @internal 90, \
-                                        20; 5898260 */
-/** tx.commit method fields */
-typedef struct amqp_tx_commit_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_commit_t;
-
-#define AMQP_TX_COMMIT_OK_METHOD                                           \
-  ((amqp_method_number_t)0x005A0015) /**< tx.commit-ok method id @internal \
-                                        90, 21; 5898261 */
-/** tx.commit-ok method fields */
-typedef struct amqp_tx_commit_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_commit_ok_t;
-
-#define AMQP_TX_ROLLBACK_METHOD                                           \
-  ((amqp_method_number_t)0x005A001E) /**< tx.rollback method id @internal \
-                                        90, 30; 5898270 */
-/** tx.rollback method fields */
-typedef struct amqp_tx_rollback_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_rollback_t;
-
-#define AMQP_TX_ROLLBACK_OK_METHOD                                           \
-  ((amqp_method_number_t)0x005A001F) /**< tx.rollback-ok method id @internal \
-                                        90, 31; 5898271 */
-/** tx.rollback-ok method fields */
-typedef struct amqp_tx_rollback_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_rollback_ok_t;
-
-#define AMQP_CONFIRM_SELECT_METHOD                                           \
-  ((amqp_method_number_t)0x0055000A) /**< confirm.select method id @internal \
-                                        85, 10; 5570570 */
-/** confirm.select method fields */
-typedef struct amqp_confirm_select_t_ {
-  amqp_boolean_t nowait; /**< nowait */
-} amqp_confirm_select_t;
-
-#define AMQP_CONFIRM_SELECT_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0055000B) /**< confirm.select-ok method id \
-                                        @internal 85, 11; 5570571 */
-/** confirm.select-ok method fields */
-typedef struct amqp_confirm_select_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_confirm_select_ok_t;
-
-/* Class property records. */
-#define AMQP_CONNECTION_CLASS                    \
-  (0x000A) /**< connection class id @internal 10 \
-              */
-/** connection class properties */
-typedef struct amqp_connection_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_connection_properties_t;
-
-#define AMQP_CHANNEL_CLASS (0x0014) /**< channel class id @internal 20 */
-/** channel class properties */
-typedef struct amqp_channel_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_channel_properties_t;
-
-#define AMQP_ACCESS_CLASS (0x001E) /**< access class id @internal 30 */
-/** access class properties */
-typedef struct amqp_access_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_access_properties_t;
-
-#define AMQP_EXCHANGE_CLASS (0x0028) /**< exchange class id @internal 40 */
-/** exchange class properties */
-typedef struct amqp_exchange_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_exchange_properties_t;
-
-#define AMQP_QUEUE_CLASS (0x0032) /**< queue class id @internal 50 */
-/** queue class properties */
-typedef struct amqp_queue_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_queue_properties_t;
-
-#define AMQP_BASIC_CLASS (0x003C) /**< basic class id @internal 60 */
-#define AMQP_BASIC_CONTENT_TYPE_FLAG (1 << 15)
-#define AMQP_BASIC_CONTENT_ENCODING_FLAG (1 << 14)
-#define AMQP_BASIC_HEADERS_FLAG (1 << 13)
-#define AMQP_BASIC_DELIVERY_MODE_FLAG (1 << 12)
-#define AMQP_BASIC_PRIORITY_FLAG (1 << 11)
-#define AMQP_BASIC_CORRELATION_ID_FLAG (1 << 10)
-#define AMQP_BASIC_REPLY_TO_FLAG (1 << 9)
-#define AMQP_BASIC_EXPIRATION_FLAG (1 << 8)
-#define AMQP_BASIC_MESSAGE_ID_FLAG (1 << 7)
-#define AMQP_BASIC_TIMESTAMP_FLAG (1 << 6)
-#define AMQP_BASIC_TYPE_FLAG (1 << 5)
-#define AMQP_BASIC_USER_ID_FLAG (1 << 4)
-#define AMQP_BASIC_APP_ID_FLAG (1 << 3)
-#define AMQP_BASIC_CLUSTER_ID_FLAG (1 << 2)
-/** basic class properties */
-typedef struct amqp_basic_properties_t_ {
-  amqp_flags_t _flags;           /**< bit-mask of set fields */
-  amqp_bytes_t content_type;     /**< content-type */
-  amqp_bytes_t content_encoding; /**< content-encoding */
-  amqp_table_t headers;          /**< headers */
-  uint8_t delivery_mode;         /**< delivery-mode */
-  uint8_t priority;              /**< priority */
-  amqp_bytes_t correlation_id;   /**< correlation-id */
-  amqp_bytes_t reply_to;         /**< reply-to */
-  amqp_bytes_t expiration;       /**< expiration */
-  amqp_bytes_t message_id;       /**< message-id */
-  uint64_t timestamp;            /**< timestamp */
-  amqp_bytes_t type;             /**< type */
-  amqp_bytes_t user_id;          /**< user-id */
-  amqp_bytes_t app_id;           /**< app-id */
-  amqp_bytes_t cluster_id;       /**< cluster-id */
-} amqp_basic_properties_t;
-
-#define AMQP_TX_CLASS (0x005A) /**< tx class id @internal 90 */
-/** tx class properties */
-typedef struct amqp_tx_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_tx_properties_t;
-
-#define AMQP_CONFIRM_CLASS (0x0055) /**< confirm class id @internal 85 */
-/** confirm class properties */
-typedef struct amqp_confirm_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_confirm_properties_t;
-
-/* API functions for methods */
-
-/**
- * amqp_channel_open
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_channel_open_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_channel_open_ok_t *AMQP_CALL
-    amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel);
-/**
- * amqp_channel_flow
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] active active
- * @returns amqp_channel_flow_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_channel_flow_ok_t *AMQP_CALL
-    amqp_channel_flow(amqp_connection_state_t state, amqp_channel_t channel,
-                      amqp_boolean_t active);
-/**
- * amqp_exchange_declare
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] exchange exchange
- * @param [in] type type
- * @param [in] passive passive
- * @param [in] durable durable
- * @param [in] auto_delete auto_delete
- * @param [in] internal internal
- * @param [in] arguments arguments
- * @returns amqp_exchange_declare_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_declare_ok_t *AMQP_CALL amqp_exchange_declare(
-    amqp_connection_state_t state, amqp_channel_t channel,
-    amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive,
-    amqp_boolean_t durable, amqp_boolean_t auto_delete, amqp_boolean_t internal,
-    amqp_table_t arguments);
-/**
- * amqp_exchange_delete
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] exchange exchange
- * @param [in] if_unused if_unused
- * @returns amqp_exchange_delete_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_delete_ok_t *AMQP_CALL
-    amqp_exchange_delete(amqp_connection_state_t state, amqp_channel_t channel,
-                         amqp_bytes_t exchange, amqp_boolean_t if_unused);
-/**
- * amqp_exchange_bind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] destination destination
- * @param [in] source source
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_exchange_bind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_bind_ok_t *AMQP_CALL
-    amqp_exchange_bind(amqp_connection_state_t state, amqp_channel_t channel,
-                       amqp_bytes_t destination, amqp_bytes_t source,
-                       amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_exchange_unbind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] destination destination
- * @param [in] source source
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_exchange_unbind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_unbind_ok_t *AMQP_CALL
-    amqp_exchange_unbind(amqp_connection_state_t state, amqp_channel_t channel,
-                         amqp_bytes_t destination, amqp_bytes_t source,
-                         amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_queue_declare
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] passive passive
- * @param [in] durable durable
- * @param [in] exclusive exclusive
- * @param [in] auto_delete auto_delete
- * @param [in] arguments arguments
- * @returns amqp_queue_declare_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_declare_ok_t *AMQP_CALL amqp_queue_declare(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive,
-    amqp_boolean_t auto_delete, amqp_table_t arguments);
-/**
- * amqp_queue_bind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] exchange exchange
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_queue_bind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_bind_ok_t *AMQP_CALL amqp_queue_bind(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_queue_purge
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @returns amqp_queue_purge_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_purge_ok_t *AMQP_CALL amqp_queue_purge(amqp_connection_state_t state,
-                                                  amqp_channel_t channel,
-                                                  amqp_bytes_t queue);
-/**
- * amqp_queue_delete
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] if_unused if_unused
- * @param [in] if_empty if_empty
- * @returns amqp_queue_delete_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_delete_ok_t *AMQP_CALL amqp_queue_delete(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_boolean_t if_unused, amqp_boolean_t if_empty);
-/**
- * amqp_queue_unbind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] exchange exchange
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_queue_unbind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_unbind_ok_t *AMQP_CALL amqp_queue_unbind(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_basic_qos
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] prefetch_size prefetch_size
- * @param [in] prefetch_count prefetch_count
- * @param [in] global global
- * @returns amqp_basic_qos_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_qos_ok_t *AMQP_CALL amqp_basic_qos(amqp_connection_state_t state,
-                                              amqp_channel_t channel,
-                                              uint32_t prefetch_size,
-                                              uint16_t prefetch_count,
-                                              amqp_boolean_t global);
-/**
- * amqp_basic_consume
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] consumer_tag consumer_tag
- * @param [in] no_local no_local
- * @param [in] no_ack no_ack
- * @param [in] exclusive exclusive
- * @param [in] arguments arguments
- * @returns amqp_basic_consume_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_consume_ok_t *AMQP_CALL amqp_basic_consume(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack,
-    amqp_boolean_t exclusive, amqp_table_t arguments);
-/**
- * amqp_basic_cancel
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] consumer_tag consumer_tag
- * @returns amqp_basic_cancel_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_cancel_ok_t *AMQP_CALL
-    amqp_basic_cancel(amqp_connection_state_t state, amqp_channel_t channel,
-                      amqp_bytes_t consumer_tag);
-/**
- * amqp_basic_recover
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] requeue requeue
- * @returns amqp_basic_recover_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_recover_ok_t *AMQP_CALL
-    amqp_basic_recover(amqp_connection_state_t state, amqp_channel_t channel,
-                       amqp_boolean_t requeue);
-/**
- * amqp_tx_select
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_tx_select_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_tx_select_ok_t *AMQP_CALL amqp_tx_select(amqp_connection_state_t state,
-                                              amqp_channel_t channel);
-/**
- * amqp_tx_commit
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_tx_commit_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_tx_commit_ok_t *AMQP_CALL amqp_tx_commit(amqp_connection_state_t state,
-                                              amqp_channel_t channel);
-/**
- * amqp_tx_rollback
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_tx_rollback_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_tx_rollback_ok_t *AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state,
-                                                  amqp_channel_t channel);
-/**
- * amqp_confirm_select
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_confirm_select_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_confirm_select_ok_t *AMQP_CALL
-    amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel);
-
-AMQP_END_DECLS
-
-#endif /* AMQP_FRAMING_H */

+ 0 - 68
ext/librabbitmq/centos_x64/include/amqp_tcp_socket.h

@@ -1,68 +0,0 @@
-/** \file */
-/*
- * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk.
- * All Rights Reserved.
- *
- * Portions created by Michael Steinert are Copyright (c) 2012-2013 Michael
- * Steinert. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * A TCP socket connection.
- */
-
-#ifndef AMQP_TCP_SOCKET_H
-#define AMQP_TCP_SOCKET_H
-
-#include <amqp.h>
-
-AMQP_BEGIN_DECLS
-
-/**
- * Create a new TCP socket.
- *
- * Call amqp_connection_close() to release socket resources.
- *
- * \return A new socket object or NULL if an error occurred.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_socket_t *AMQP_CALL amqp_tcp_socket_new(amqp_connection_state_t state);
-
-/**
- * Assign an open file descriptor to a socket object.
- *
- * This function must not be used in conjunction with amqp_socket_open(), i.e.
- * the socket connection should already be open(2) when this function is
- * called.
- *
- * \param [in,out] self A TCP socket object.
- * \param [in] sockfd An open socket descriptor.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_tcp_socket_set_sockfd(amqp_socket_t *self, int sockfd);
-
-AMQP_END_DECLS
-
-#endif /* AMQP_TCP_SOCKET_H */

BIN
ext/librabbitmq/centos_x64/lib/librabbitmq.a


+ 0 - 2538
ext/librabbitmq/macos/include/amqp.h

@@ -1,2538 +0,0 @@
-/** \file */
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MIT
- *
- * Portions created by Alan Antonuk are Copyright (c) 2012-2014
- * Alan Antonuk. All Rights Reserved.
- *
- * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc.
- * All Rights Reserved.
- *
- * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010
- * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- * ***** END LICENSE BLOCK *****
- */
-
-#ifndef AMQP_H
-#define AMQP_H
-
-/** \cond HIDE_FROM_DOXYGEN */
-
-#ifdef __cplusplus
-#define AMQP_BEGIN_DECLS extern "C" {
-#define AMQP_END_DECLS }
-#else
-#define AMQP_BEGIN_DECLS
-#define AMQP_END_DECLS
-#endif
-
-/*
- * \internal
- * Important API decorators:
- *  AMQP_PUBLIC_FUNCTION - a public API function
- *  AMQP_PUBLIC_VARIABLE - a public API external variable
- *  AMQP_CALL - calling convension (used on Win32)
- */
-
-#if defined(_WIN32) && defined(_MSC_VER)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(_WIN32) && defined(__BORLANDC__)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(_WIN32) && defined(__MINGW32__)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(_WIN32) && defined(__CYGWIN__)
-#if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllexport)
-#else
-#define AMQP_PUBLIC_FUNCTION
-#if !defined(AMQP_STATIC)
-#define AMQP_PUBLIC_VARIABLE __declspec(dllimport) extern
-#else
-#define AMQP_PUBLIC_VARIABLE extern
-#endif
-#endif
-#define AMQP_CALL __cdecl
-
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define AMQP_PUBLIC_FUNCTION __attribute__((visibility("default")))
-#define AMQP_PUBLIC_VARIABLE __attribute__((visibility("default"))) extern
-#define AMQP_CALL
-#else
-#define AMQP_PUBLIC_FUNCTION
-#define AMQP_PUBLIC_VARIABLE extern
-#define AMQP_CALL
-#endif
-
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
-#define AMQP_DEPRECATED(function) function __attribute__((__deprecated__))
-#elif defined(_MSC_VER)
-#define AMQP_DEPRECATED(function) __declspec(deprecated) function
-#else
-#define AMQP_DEPRECATED(function)
-#endif
-
-/* Define ssize_t on Win32/64 platforms
-   See: http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-April/030649.html for
-   details
-   */
-#if !defined(_W64)
-#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-#define _W64 __w64
-#else
-#define _W64
-#endif
-#endif
-
-#ifdef _MSC_VER
-#ifdef _WIN64
-typedef __int64 ssize_t;
-#else
-typedef _W64 int ssize_t;
-#endif
-#endif
-
-#if defined(_WIN32) && defined(__MINGW32__)
-#include <sys/types.h>
-#endif
-
-/** \endcond */
-
-#include <stddef.h>
-#include <stdint.h>
-
-struct timeval;
-
-AMQP_BEGIN_DECLS
-
-/**
- * \def AMQP_VERSION_MAJOR
- *
- * Major library version number compile-time constant
- *
- * The major version is incremented when backwards incompatible API changes
- * are made.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-
-/**
- * \def AMQP_VERSION_MINOR
- *
- * Minor library version number compile-time constant
- *
- * The minor version is incremented when new APIs are added. Existing APIs
- * are left alone.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-
-/**
- * \def AMQP_VERSION_PATCH
- *
- * Patch library version number compile-time constant
- *
- * The patch version is incremented when library code changes, but the API
- * is not changed.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-
-/**
- * \def AMQP_VERSION_IS_RELEASE
- *
- * Version constant set to 1 for tagged release, 0 otherwise
- *
- * NOTE: versions that are not tagged releases are not guaranteed to be API/ABI
- * compatible with older releases, and may change commit-to-commit.
- *
- * \sa AMQP_VERSION, AMQP_VERSION_STRING
- *
- * \since v0.4.0
- */
-/*
- * Developer note: when changing these, be sure to update SOVERSION constants
- *  in CMakeLists.txt and configure.ac
- */
-
-#define AMQP_VERSION_MAJOR 0
-#define AMQP_VERSION_MINOR 10
-#define AMQP_VERSION_PATCH 0
-#define AMQP_VERSION_IS_RELEASE 0
-
-/**
- * \def AMQP_VERSION_CODE
- *
- * Helper macro to geneate a packed version code suitable for
- * comparison with AMQP_VERSION.
- *
- * \sa amqp_version_number() AMQP_VERSION_MAJOR, AMQP_VERSION_MINOR,
- *     AMQP_VERSION_PATCH, AMQP_VERSION_IS_RELEASE, AMQP_VERSION
- *
- * \since v0.6.1
- */
-#define AMQP_VERSION_CODE(major, minor, patch, release) \
-  ((major << 24) | (minor << 16) | (patch << 8) | (release))
-
-/**
- * \def AMQP_VERSION
- *
- * Packed version number
- *
- * AMQP_VERSION is a 4-byte unsigned integer with the most significant byte
- * set to AMQP_VERSION_MAJOR, the second most significant byte set to
- * AMQP_VERSION_MINOR, third most significant byte set to AMQP_VERSION_PATCH,
- * and the lowest byte set to AMQP_VERSION_IS_RELEASE.
- *
- * For example version 2.3.4 which is released version would be encoded as
- * 0x02030401
- *
- * \sa amqp_version_number() AMQP_VERSION_MAJOR, AMQP_VERSION_MINOR,
- *     AMQP_VERSION_PATCH, AMQP_VERSION_IS_RELEASE, AMQP_VERSION_CODE
- *
- * \since v0.4.0
- */
-#define AMQP_VERSION                                        \
-  AMQP_VERSION_CODE(AMQP_VERSION_MAJOR, AMQP_VERSION_MINOR, \
-                    AMQP_VERSION_PATCH, AMQP_VERSION_IS_RELEASE)
-
-/** \cond HIDE_FROM_DOXYGEN */
-#define AMQ_STRINGIFY(s) AMQ_STRINGIFY_HELPER(s)
-#define AMQ_STRINGIFY_HELPER(s) #s
-
-#define AMQ_VERSION_STRING          \
-  AMQ_STRINGIFY(AMQP_VERSION_MAJOR) \
-  "." AMQ_STRINGIFY(AMQP_VERSION_MINOR) "." AMQ_STRINGIFY(AMQP_VERSION_PATCH)
-/** \endcond */
-
-/**
- * \def AMQP_VERSION_STRING
- *
- * Version string compile-time constant
- *
- * Non-released versions of the library will have "-pre" appended to the
- * version string
- *
- * \sa amqp_version()
- *
- * \since v0.4.0
- */
-#if AMQP_VERSION_IS_RELEASE
-#define AMQP_VERSION_STRING AMQ_VERSION_STRING
-#else
-#define AMQP_VERSION_STRING AMQ_VERSION_STRING "-pre"
-#endif
-
-/**
- * Returns the rabbitmq-c version as a packed integer.
- *
- * See \ref AMQP_VERSION
- *
- * \return packed 32-bit integer representing version of library at runtime
- *
- * \sa AMQP_VERSION, amqp_version()
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-uint32_t AMQP_CALL amqp_version_number(void);
-
-/**
- * Returns the rabbitmq-c version as a string.
- *
- * See \ref AMQP_VERSION_STRING
- *
- * \return a statically allocated string describing the version of rabbitmq-c.
- *
- * \sa amqp_version_number(), AMQP_VERSION_STRING, AMQP_VERSION
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-char const *AMQP_CALL amqp_version(void);
-
-/**
- * \def AMQP_DEFAULT_FRAME_SIZE
- *
- * Default frame size (128Kb)
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.4.0
- */
-#define AMQP_DEFAULT_FRAME_SIZE 131072
-
-/**
- * \def AMQP_DEFAULT_MAX_CHANNELS
- *
- * Default maximum number of channels (2047, RabbitMQ default limit of 2048,
- * minus 1 for channel 0). RabbitMQ set a default limit of 2048 channels per
- * connection in v3.7.5 to prevent broken clients from leaking too many
- * channels.
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.4.0
- */
-#define AMQP_DEFAULT_MAX_CHANNELS 2047
-
-/**
- * \def AMQP_DEFAULT_HEARTBEAT
- *
- * Default heartbeat interval (0, heartbeat disabled)
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.4.0
- */
-#define AMQP_DEFAULT_HEARTBEAT 0
-
-/**
- * \def AMQP_DEFAULT_VHOST
- *
- * Default RabbitMQ vhost: "/"
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.9.0
- */
-#define AMQP_DEFAULT_VHOST "/"
-
-/**
- * boolean type 0 = false, true otherwise
- *
- * \since v0.1
- */
-typedef int amqp_boolean_t;
-
-/**
- * Method number
- *
- * \since v0.1
- */
-typedef uint32_t amqp_method_number_t;
-
-/**
- * Bitmask for flags
- *
- * \since v0.1
- */
-typedef uint32_t amqp_flags_t;
-
-/**
- * Channel type
- *
- * \since v0.1
- */
-typedef uint16_t amqp_channel_t;
-
-/**
- * Buffer descriptor
- *
- * \since v0.1
- */
-typedef struct amqp_bytes_t_ {
-  size_t len;  /**< length of the buffer in bytes */
-  void *bytes; /**< pointer to the beginning of the buffer */
-} amqp_bytes_t;
-
-/**
- * Decimal data type
- *
- * \since v0.1
- */
-typedef struct amqp_decimal_t_ {
-  uint8_t decimals; /**< the location of the decimal point */
-  uint32_t value;   /**< the value before the decimal point is applied */
-} amqp_decimal_t;
-
-/**
- * AMQP field table
- *
- * An AMQP field table is a set of key-value pairs.
- * A key is a UTF-8 encoded string up to 128 bytes long, and are not null
- * terminated.
- * A value can be one of several different datatypes. \sa
- * amqp_field_value_kind_t
- *
- * \sa amqp_table_entry_t
- *
- * \since v0.1
- */
-typedef struct amqp_table_t_ {
-  int num_entries;                     /**< length of entries array */
-  struct amqp_table_entry_t_ *entries; /**< an array of table entries */
-} amqp_table_t;
-
-/**
- * An AMQP Field Array
- *
- * A repeated set of field values, all must be of the same type
- *
- * \since v0.1
- */
-typedef struct amqp_array_t_ {
-  int num_entries;                     /**< Number of entries in the table */
-  struct amqp_field_value_t_ *entries; /**< linked list of field values */
-} amqp_array_t;
-
-/*
-  0-9   0-9-1   Qpid/Rabbit  Type               Remarks
----------------------------------------------------------------------------
-        t       t            Boolean
-        b       b            Signed 8-bit
-        B                    Unsigned 8-bit
-        U       s            Signed 16-bit      (A1)
-        u                    Unsigned 16-bit
-  I     I       I            Signed 32-bit
-        i                    Unsigned 32-bit
-        L       l            Signed 64-bit      (B)
-        l                    Unsigned 64-bit
-        f       f            32-bit float
-        d       d            64-bit float
-  D     D       D            Decimal
-        s                    Short string       (A2)
-  S     S       S            Long string
-        A                    Nested Array
-  T     T       T            Timestamp (u64)
-  F     F       F            Nested Table
-  V     V       V            Void
-                x            Byte array
-
-Remarks:
-
- A1, A2: Notice how the types **CONFLICT** here. In Qpid and Rabbit,
-         's' means a signed 16-bit integer; in 0-9-1, it means a
-          short string.
-
- B: Notice how the signednesses **CONFLICT** here. In Qpid and Rabbit,
-    'l' means a signed 64-bit integer; in 0-9-1, it means an unsigned
-    64-bit integer.
-
-I'm going with the Qpid/Rabbit types, where there's a conflict, and
-the 0-9-1 types otherwise. 0-8 is a subset of 0-9, which is a subset
-of the other two, so this will work for both 0-8 and 0-9-1 branches of
-the code.
-*/
-
-/**
- * A field table value
- *
- * \since v0.1
- */
-typedef struct amqp_field_value_t_ {
-  uint8_t kind; /**< the type of the entry /sa amqp_field_value_kind_t */
-  union {
-    amqp_boolean_t boolean; /**< boolean type AMQP_FIELD_KIND_BOOLEAN */
-    int8_t i8;              /**< int8_t type AMQP_FIELD_KIND_I8 */
-    uint8_t u8;             /**< uint8_t type AMQP_FIELD_KIND_U8 */
-    int16_t i16;            /**< int16_t type AMQP_FIELD_KIND_I16 */
-    uint16_t u16;           /**< uint16_t type AMQP_FIELD_KIND_U16 */
-    int32_t i32;            /**< int32_t type AMQP_FIELD_KIND_I32 */
-    uint32_t u32;           /**< uint32_t type AMQP_FIELD_KIND_U32 */
-    int64_t i64;            /**< int64_t type AMQP_FIELD_KIND_I64 */
-    uint64_t u64;           /**< uint64_t type AMQP_FIELD_KIND_U64,
-                               AMQP_FIELD_KIND_TIMESTAMP */
-    float f32;              /**< float type AMQP_FIELD_KIND_F32 */
-    double f64;             /**< double type AMQP_FIELD_KIND_F64 */
-    amqp_decimal_t decimal; /**< amqp_decimal_t AMQP_FIELD_KIND_DECIMAL */
-    amqp_bytes_t bytes;     /**< amqp_bytes_t type AMQP_FIELD_KIND_UTF8,
-                               AMQP_FIELD_KIND_BYTES */
-    amqp_table_t table;     /**< amqp_table_t type AMQP_FIELD_KIND_TABLE */
-    amqp_array_t array;     /**< amqp_array_t type AMQP_FIELD_KIND_ARRAY */
-  } value;                  /**< a union of the value */
-} amqp_field_value_t;
-
-/**
- * An entry in a field-table
- *
- * \sa amqp_table_encode(), amqp_table_decode(), amqp_table_clone()
- *
- * \since v0.1
- */
-typedef struct amqp_table_entry_t_ {
-  amqp_bytes_t key; /**< the table entry key. Its a null-terminated UTF-8
-                     * string, with a maximum size of 128 bytes */
-  amqp_field_value_t value; /**< the table entry values */
-} amqp_table_entry_t;
-
-/**
- * Field value types
- *
- * \since v0.1
- */
-typedef enum {
-  AMQP_FIELD_KIND_BOOLEAN =
-      't', /**< boolean type. 0 = false, 1 = true @see amqp_boolean_t */
-  AMQP_FIELD_KIND_I8 = 'b',  /**< 8-bit signed integer, datatype: int8_t */
-  AMQP_FIELD_KIND_U8 = 'B',  /**< 8-bit unsigned integer, datatype: uint8_t */
-  AMQP_FIELD_KIND_I16 = 's', /**< 16-bit signed integer, datatype: int16_t */
-  AMQP_FIELD_KIND_U16 = 'u', /**< 16-bit unsigned integer, datatype: uint16_t */
-  AMQP_FIELD_KIND_I32 = 'I', /**< 32-bit signed integer, datatype: int32_t */
-  AMQP_FIELD_KIND_U32 = 'i', /**< 32-bit unsigned integer, datatype: uint32_t */
-  AMQP_FIELD_KIND_I64 = 'l', /**< 64-bit signed integer, datatype: int64_t */
-  AMQP_FIELD_KIND_U64 = 'L', /**< 64-bit unsigned integer, datatype: uint64_t */
-  AMQP_FIELD_KIND_F32 =
-      'f', /**< single-precision floating point value, datatype: float */
-  AMQP_FIELD_KIND_F64 =
-      'd', /**< double-precision floating point value, datatype: double */
-  AMQP_FIELD_KIND_DECIMAL =
-      'D', /**< amqp-decimal value, datatype: amqp_decimal_t */
-  AMQP_FIELD_KIND_UTF8 = 'S',      /**< UTF-8 null-terminated character string,
-                                      datatype: amqp_bytes_t */
-  AMQP_FIELD_KIND_ARRAY = 'A',     /**< field array (repeated values of another
-                                      datatype. datatype: amqp_array_t */
-  AMQP_FIELD_KIND_TIMESTAMP = 'T', /**< 64-bit timestamp. datatype uint64_t */
-  AMQP_FIELD_KIND_TABLE = 'F', /**< field table. encapsulates a table inside a
-                                  table entry. datatype: amqp_table_t */
-  AMQP_FIELD_KIND_VOID = 'V',  /**< empty entry */
-  AMQP_FIELD_KIND_BYTES =
-      'x' /**< unformatted byte string, datatype: amqp_bytes_t */
-} amqp_field_value_kind_t;
-
-/**
- * A list of allocation blocks
- *
- * \since v0.1
- */
-typedef struct amqp_pool_blocklist_t_ {
-  int num_blocks;   /**< Number of blocks in the block list */
-  void **blocklist; /**< Array of memory blocks */
-} amqp_pool_blocklist_t;
-
-/**
- * A memory pool
- *
- * \since v0.1
- */
-typedef struct amqp_pool_t_ {
-  size_t pagesize; /**< the size of the page in bytes. Allocations less than or
-                    * equal to this size are allocated in the pages block list.
-                    * Allocations greater than this are allocated in their own
-                    * own block in the large_blocks block list */
-
-  amqp_pool_blocklist_t pages; /**< blocks that are the size of pagesize */
-  amqp_pool_blocklist_t
-      large_blocks; /**< allocations larger than the pagesize */
-
-  int next_page;     /**< an index to the next unused page block */
-  char *alloc_block; /**< pointer to the current allocation block */
-  size_t alloc_used; /**< number of bytes in the current allocation block that
-                        has been used */
-} amqp_pool_t;
-
-/**
- * An amqp method
- *
- * \since v0.1
- */
-typedef struct amqp_method_t_ {
-  amqp_method_number_t id; /**< the method id number */
-  void *decoded;           /**< pointer to the decoded method,
-                            *    cast to the appropriate type to use */
-} amqp_method_t;
-
-/**
- * An AMQP frame
- *
- * \since v0.1
- */
-typedef struct amqp_frame_t_ {
-  uint8_t frame_type;     /**< frame type. The types:
-                           * - AMQP_FRAME_METHOD - use the method union member
-                           * - AMQP_FRAME_HEADER - use the properties union member
-                           * - AMQP_FRAME_BODY - use the body_fragment union member
-                           */
-  amqp_channel_t channel; /**< the channel the frame was received on */
-  union {
-    amqp_method_t
-        method; /**< a method, use if frame_type == AMQP_FRAME_METHOD */
-    struct {
-      uint16_t class_id;        /**< the class for the properties */
-      uint64_t body_size;       /**< size of the body in bytes */
-      void *decoded;            /**< the decoded properties */
-      amqp_bytes_t raw;         /**< amqp-encoded properties structure */
-    } properties;               /**< message header, a.k.a., properties,
-                                      use if frame_type == AMQP_FRAME_HEADER */
-    amqp_bytes_t body_fragment; /**< a body fragment, use if frame_type ==
-                                   AMQP_FRAME_BODY */
-    struct {
-      uint8_t transport_high;         /**< @internal first byte of handshake */
-      uint8_t transport_low;          /**< @internal second byte of handshake */
-      uint8_t protocol_version_major; /**< @internal third byte of handshake */
-      uint8_t protocol_version_minor; /**< @internal fourth byte of handshake */
-    } protocol_header; /**< Used only when doing the initial handshake with the
-                          broker, don't use otherwise */
-  } payload;           /**< the payload of the frame */
-} amqp_frame_t;
-
-/**
- * Response type
- *
- * \since v0.1
- */
-typedef enum amqp_response_type_enum_ {
-  AMQP_RESPONSE_NONE = 0, /**< the library got an EOF from the socket */
-  AMQP_RESPONSE_NORMAL, /**< response normal, the RPC completed successfully */
-  AMQP_RESPONSE_LIBRARY_EXCEPTION, /**< library error, an error occurred in the
-                                      library, examine the library_error */
-  AMQP_RESPONSE_SERVER_EXCEPTION   /**< server exception, the broker returned an
-                                      error, check replay */
-} amqp_response_type_enum;
-
-/**
- * Reply from a RPC method on the broker
- *
- * \since v0.1
- */
-typedef struct amqp_rpc_reply_t_ {
-  amqp_response_type_enum reply_type; /**< the reply type:
-                                       * - AMQP_RESPONSE_NORMAL - the RPC
-                                       * completed successfully
-                                       * - AMQP_RESPONSE_SERVER_EXCEPTION - the
-                                       * broker returned
-                                       *     an exception, check the reply field
-                                       * - AMQP_RESPONSE_LIBRARY_EXCEPTION - the
-                                       * library
-                                       *    encountered an error, check the
-                                       * library_error field
-                                       */
-  amqp_method_t reply; /**< in case of AMQP_RESPONSE_SERVER_EXCEPTION this
-                        * field will be set to the method returned from the
-                        * broker */
-  int library_error;   /**< in case of AMQP_RESPONSE_LIBRARY_EXCEPTION this
-                        *    field will be set to an error code. An error
-                        *     string can be retrieved using amqp_error_string */
-} amqp_rpc_reply_t;
-
-/**
- * SASL method type
- *
- * \since v0.1
- */
-typedef enum amqp_sasl_method_enum_ {
-  AMQP_SASL_METHOD_UNDEFINED = -1, /**< Invalid SASL method */
-  AMQP_SASL_METHOD_PLAIN =
-      0, /**< the PLAIN SASL method for authentication to the broker */
-  AMQP_SASL_METHOD_EXTERNAL =
-      1 /**< the EXTERNAL SASL method for authentication to the broker */
-} amqp_sasl_method_enum;
-
-/**
- * connection state object
- *
- * \since v0.1
- */
-typedef struct amqp_connection_state_t_ *amqp_connection_state_t;
-
-/**
- * Socket object
- *
- * \since v0.4.0
- */
-typedef struct amqp_socket_t_ amqp_socket_t;
-
-/**
- * Status codes
- *
- * \since v0.4.0
- */
-/* NOTE: When updating this enum, update the strings in librabbitmq/amqp_api.c
- */
-typedef enum amqp_status_enum_ {
-  AMQP_STATUS_OK = 0x0,                             /**< Operation successful */
-  AMQP_STATUS_NO_MEMORY = -0x0001,                  /**< Memory allocation
-                                                         failed */
-  AMQP_STATUS_BAD_AMQP_DATA = -0x0002,              /**< Incorrect or corrupt
-                                                         data was received from
-                                                         the broker. This is a
-                                                         protocol error. */
-  AMQP_STATUS_UNKNOWN_CLASS = -0x0003,              /**< An unknown AMQP class
-                                                         was received. This is
-                                                         a protocol error. */
-  AMQP_STATUS_UNKNOWN_METHOD = -0x0004,             /**< An unknown AMQP method
-                                                         was received. This is
-                                                         a protocol error. */
-  AMQP_STATUS_HOSTNAME_RESOLUTION_FAILED = -0x0005, /**< Unable to resolve the
-                                                     * hostname */
-  AMQP_STATUS_INCOMPATIBLE_AMQP_VERSION = -0x0006,  /**< The broker advertised
-                                                         an incompaible AMQP
-                                                         version */
-  AMQP_STATUS_CONNECTION_CLOSED = -0x0007,          /**< The connection to the
-                                                         broker has been closed
-                                                         */
-  AMQP_STATUS_BAD_URL = -0x0008,                    /**< malformed AMQP URL */
-  AMQP_STATUS_SOCKET_ERROR = -0x0009,               /**< A socket error
-                                                         occurred */
-  AMQP_STATUS_INVALID_PARAMETER = -0x000A,          /**< An invalid parameter
-                                                         was passed into the
-                                                         function */
-  AMQP_STATUS_TABLE_TOO_BIG = -0x000B,              /**< The amqp_table_t object
-                                                         cannot be serialized
-                                                         because the output
-                                                         buffer is too small */
-  AMQP_STATUS_WRONG_METHOD = -0x000C,               /**< The wrong method was
-                                                         received */
-  AMQP_STATUS_TIMEOUT = -0x000D,                    /**< Operation timed out */
-  AMQP_STATUS_TIMER_FAILURE = -0x000E,              /**< The underlying system
-                                                         timer facility failed */
-  AMQP_STATUS_HEARTBEAT_TIMEOUT = -0x000F,          /**< Timed out waiting for
-                                                         heartbeat */
-  AMQP_STATUS_UNEXPECTED_STATE = -0x0010,           /**< Unexpected protocol
-                                                         state */
-  AMQP_STATUS_SOCKET_CLOSED = -0x0011,              /**< Underlying socket is
-                                                         closed */
-  AMQP_STATUS_SOCKET_INUSE = -0x0012,               /**< Underlying socket is
-                                                         already open */
-  AMQP_STATUS_BROKER_UNSUPPORTED_SASL_METHOD = -0x0013, /**< Broker does not
-                                                          support the requested
-                                                          SASL mechanism */
-  AMQP_STATUS_UNSUPPORTED = -0x0014, /**< Parameter is unsupported
-                                       in this version */
-  _AMQP_STATUS_NEXT_VALUE = -0x0015, /**< Internal value */
-
-  AMQP_STATUS_TCP_ERROR = -0x0100,                /**< A generic TCP error
-                                                       occurred */
-  AMQP_STATUS_TCP_SOCKETLIB_INIT_ERROR = -0x0101, /**< An error occurred trying
-                                                       to initialize the
-                                                       socket library*/
-  _AMQP_STATUS_TCP_NEXT_VALUE = -0x0102,          /**< Internal value */
-
-  AMQP_STATUS_SSL_ERROR = -0x0200,                  /**< A generic SSL error
-                                                         occurred. */
-  AMQP_STATUS_SSL_HOSTNAME_VERIFY_FAILED = -0x0201, /**< SSL validation of
-                                                         hostname against
-                                                         peer certificate
-                                                         failed */
-  AMQP_STATUS_SSL_PEER_VERIFY_FAILED = -0x0202,     /**< SSL validation of peer
-                                                         certificate failed. */
-  AMQP_STATUS_SSL_CONNECTION_FAILED = -0x0203, /**< SSL handshake failed. */
-  _AMQP_STATUS_SSL_NEXT_VALUE = -0x0204        /**< Internal value */
-} amqp_status_enum;
-
-/**
- * AMQP delivery modes.
- * Use these values for the #amqp_basic_properties_t::delivery_mode field.
- *
- * \since v0.5
- */
-typedef enum {
-  AMQP_DELIVERY_NONPERSISTENT = 1, /**< Non-persistent message */
-  AMQP_DELIVERY_PERSISTENT = 2     /**< Persistent message */
-} amqp_delivery_mode_enum;
-
-AMQP_END_DECLS
-
-#include <amqp_framing.h>
-
-AMQP_BEGIN_DECLS
-
-/**
- * Empty bytes structure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_VARIABLE const amqp_bytes_t amqp_empty_bytes;
-
-/**
- * Empty table structure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_VARIABLE const amqp_table_t amqp_empty_table;
-
-/**
- * Empty table array structure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_VARIABLE const amqp_array_t amqp_empty_array;
-
-/* Compatibility macros for the above, to avoid the need to update
-   code written against earlier versions of librabbitmq. */
-
-/**
- * \def AMQP_EMPTY_BYTES
- *
- * Deprecated, use \ref amqp_empty_bytes instead
- *
- * \deprecated use \ref amqp_empty_bytes instead
- *
- * \since v0.1
- */
-#define AMQP_EMPTY_BYTES amqp_empty_bytes
-
-/**
- * \def AMQP_EMPTY_TABLE
- *
- * Deprecated, use \ref amqp_empty_table instead
- *
- * \deprecated use \ref amqp_empty_table instead
- *
- * \since v0.1
- */
-#define AMQP_EMPTY_TABLE amqp_empty_table
-
-/**
- * \def AMQP_EMPTY_ARRAY
- *
- * Deprecated, use \ref amqp_empty_array instead
- *
- * \deprecated use \ref amqp_empty_array instead
- *
- * \since v0.1
- */
-#define AMQP_EMPTY_ARRAY amqp_empty_array
-
-/**
- * Initializes an amqp_pool_t memory allocation pool for use
- *
- * Readies an allocation pool for use. An amqp_pool_t
- * must be initialized before use
- *
- * \param [in] pool the amqp_pool_t structure to initialize.
- *              Calling this function on a pool a pool that has
- *              already been initialized will result in undefined
- *              behavior
- * \param [in] pagesize the unit size that the pool will allocate
- *              memory chunks in. Anything allocated against the pool
- *              with a requested size will be carved out of a block
- *              this size. Allocations larger than this will be
- *              allocated individually
- *
- * \sa recycle_amqp_pool(), empty_amqp_pool(), amqp_pool_alloc(),
- *     amqp_pool_alloc_bytes(), amqp_pool_t
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL init_amqp_pool(amqp_pool_t *pool, size_t pagesize);
-
-/**
- * Recycles an amqp_pool_t memory allocation pool
- *
- * Recycles the space allocate by the pool
- *
- * This invalidates all allocations made against the pool before this call is
- * made, any use of any allocations made before recycle_amqp_pool() is called
- * will result in undefined behavior.
- *
- * Note: this may or may not release memory, to force memory to be released
- * call empty_amqp_pool().
- *
- * \param [in] pool the amqp_pool_t to recycle
- *
- * \sa recycle_amqp_pool(), empty_amqp_pool(), amqp_pool_alloc(),
- *      amqp_pool_alloc_bytes()
- *
- * \since v0.1
- *
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL recycle_amqp_pool(amqp_pool_t *pool);
-
-/**
- * Empties an amqp memory pool
- *
- * Releases all memory associated with an allocation pool
- *
- * \param [in] pool the amqp_pool_t to empty
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL empty_amqp_pool(amqp_pool_t *pool);
-
-/**
- * Allocates a block of memory from an amqp_pool_t memory pool
- *
- * Memory will be aligned on a 8-byte boundary. If a 0-length allocation is
- * requested, a NULL pointer will be returned.
- *
- * \param [in] pool the allocation pool to allocate the memory from
- * \param [in] amount the size of the allocation in bytes.
- * \return a pointer to the memory block, or NULL if the allocation cannot
- *          be satisfied.
- *
- * \sa init_amqp_pool(), recycle_amqp_pool(), empty_amqp_pool(),
- *     amqp_pool_alloc_bytes()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void *AMQP_CALL amqp_pool_alloc(amqp_pool_t *pool, size_t amount);
-
-/**
- * Allocates a block of memory from an amqp_pool_t to an amqp_bytes_t
- *
- * Memory will be aligned on a 8-byte boundary. If a 0-length allocation is
- * requested, output.bytes = NULL.
- *
- * \param [in] pool the allocation pool to allocate the memory from
- * \param [in] amount the size of the allocation in bytes
- * \param [in] output the location to store the pointer. On success
- *              output.bytes will be set to the beginning of the buffer
- *              output.len will be set to amount
- *              On error output.bytes will be set to NULL and output.len
- *              set to 0
- *
- * \sa init_amqp_pool(), recycle_amqp_pool(), empty_amqp_pool(),
- *     amqp_pool_alloc()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_pool_alloc_bytes(amqp_pool_t *pool, size_t amount,
-                                     amqp_bytes_t *output);
-
-/**
- * Wraps a c string in an amqp_bytes_t
- *
- * Takes a string, calculates its length and creates an
- * amqp_bytes_t that points to it. The string is not duplicated.
- *
- * For a given input cstr, The amqp_bytes_t output.bytes is the
- * same as cstr, output.len is the length of the string not including
- * the \0 terminator
- *
- * This function uses strlen() internally so cstr must be properly
- * terminated
- *
- * \param [in] cstr the c string to wrap
- * \return an amqp_bytes_t that describes the string
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_bytes_t AMQP_CALL amqp_cstring_bytes(char const *cstr);
-
-/**
- * Duplicates an amqp_bytes_t buffer.
- *
- * The buffer is cloned and the contents copied.
- *
- * The memory associated with the output is allocated
- * with amqp_bytes_malloc() and should be freed with
- * amqp_bytes_free()
- *
- * \param [in] src
- * \return a clone of the src
- *
- * \sa amqp_bytes_free(), amqp_bytes_malloc()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_bytes_t AMQP_CALL amqp_bytes_malloc_dup(amqp_bytes_t src);
-
-/**
- * Allocates a amqp_bytes_t buffer
- *
- * Creates an amqp_bytes_t buffer of the specified amount, the buffer should be
- * freed using amqp_bytes_free()
- *
- * \param [in] amount the size of the buffer in bytes
- * \returns an amqp_bytes_t with amount bytes allocated.
- *           output.bytes will be set to NULL on error
- *
- * \sa amqp_bytes_free(), amqp_bytes_malloc_dup()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_bytes_t AMQP_CALL amqp_bytes_malloc(size_t amount);
-
-/**
- * Frees an amqp_bytes_t buffer
- *
- * Frees a buffer allocated with amqp_bytes_malloc() or amqp_bytes_malloc_dup()
- *
- * Calling amqp_bytes_free on buffers not allocated with one
- * of those two functions will result in undefined behavior
- *
- * \param [in] bytes the buffer to free
- *
- * \sa amqp_bytes_malloc(), amqp_bytes_malloc_dup()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_bytes_free(amqp_bytes_t bytes);
-
-/**
- * Allocate and initialize a new amqp_connection_state_t object
- *
- * amqp_connection_state_t objects created with this function
- * should be freed with amqp_destroy_connection()
- *
- * \returns an opaque pointer on success, NULL or 0 on failure.
- *
- * \sa amqp_destroy_connection()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_connection_state_t AMQP_CALL amqp_new_connection(void);
-
-/**
- * Get the underlying socket descriptor for the connection
- *
- * \warning Use the socket returned from this function carefully, incorrect use
- * of the socket outside of the library will lead to undefined behavior.
- * Additionally rabbitmq-c may use the socket differently version-to-version,
- * what may work in one version, may break in the next version. Be sure to
- * throughly test any applications that use the socket returned by this
- * function especially when using a newer version of rabbitmq-c
- *
- * \param [in] state the connection object
- * \returns the socket descriptor if one has been set, -1 otherwise
- *
- * \sa amqp_tcp_socket_new(), amqp_ssl_socket_new(), amqp_socket_open()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_sockfd(amqp_connection_state_t state);
-
-/**
- * Deprecated, use amqp_tcp_socket_new() or amqp_ssl_socket_new()
- *
- * \deprecated Use amqp_tcp_socket_new() or amqp_ssl_socket_new()
- *
- * Sets the socket descriptor associated with the connection. The socket
- * should be connected to a broker, and should not be read to or written from
- * before calling this function.  A socket descriptor can be created and opened
- * using amqp_open_socket()
- *
- * \param [in] state the connection object
- * \param [in] sockfd the socket
- *
- * \sa amqp_open_socket(), amqp_tcp_socket_new(), amqp_ssl_socket_new()
- *
- * \since v0.1
- */
-AMQP_DEPRECATED(AMQP_PUBLIC_FUNCTION void AMQP_CALL
-                    amqp_set_sockfd(amqp_connection_state_t state, int sockfd));
-
-/**
- * Tune client side parameters
- *
- * \warning This function may call abort() if the connection is in a certain
- *  state. As such it should probably not be called code outside the library.
- *  connection parameters should be specified when calling amqp_login() or
- *  amqp_login_with_properties()
- *
- * This function changes channel_max, frame_max, and heartbeat parameters, on
- * the client side only. It does not try to renegotiate these parameters with
- * the broker. Using this function will lead to unexpected results.
- *
- * \param [in] state the connection object
- * \param [in] channel_max the maximum number of channels.
- *              The largest this can be is 65535
- * \param [in] frame_max the maximum size of an frame.
- *              The smallest this can be is 4096
- *              The largest this can be is 2147483647
- *              Unless you know what you're doing the recommended
- *              size is 131072 or 128KB
- * \param [in] heartbeat the number of seconds between heartbeats
- *
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value otherwise.
- *  Possible error codes include:
- *  - AMQP_STATUS_NO_MEMORY memory allocation failed.
- *  - AMQP_STATUS_TIMER_FAILURE the underlying system timer indicated it
- *    failed.
- *
- * \sa amqp_login(), amqp_login_with_properties()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_tune_connection(amqp_connection_state_t state,
-                                   int channel_max, int frame_max,
-                                   int heartbeat);
-
-/**
- * Get the maximum number of channels the connection can handle
- *
- * The maximum number of channels is set when connection negotiation takes
- * place in amqp_login() or amqp_login_with_properties().
- *
- * \param [in] state the connection object
- * \return the maximum number of channels. 0 if there is no limit
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_channel_max(amqp_connection_state_t state);
-
-/**
- * Get the maximum size of an frame the connection can handle
- *
- * The maximum size of an frame is set when connection negotiation takes
- * place in amqp_login() or amqp_login_with_properties().
- *
- * \param [in] state the connection object
- * \return the maximum size of an frame.
- *
- * \since v0.6
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_frame_max(amqp_connection_state_t state);
-
-/**
- * Get the number of seconds between heartbeats of the connection
- *
- * The number of seconds between heartbeats is set when connection
- * negotiation takes place in amqp_login() or amqp_login_with_properties().
- *
- * \param [in] state the connection object
- * \return the number of seconds between heartbeats.
- *
- * \since v0.6
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_get_heartbeat(amqp_connection_state_t state);
-
-/**
- * Destroys an amqp_connection_state_t object
- *
- * Destroys a amqp_connection_state_t object that was created with
- * amqp_new_connection(). If the connection with the broker is open, it will be
- * implicitly closed with a reply code of 200 (success). Any memory that
- * would be freed with amqp_maybe_release_buffers() or
- * amqp_maybe_release_buffers_on_channel() will be freed, and use of that
- * memory will caused undefined behavior.
- *
- * \param [in] state the connection object
- * \return AMQP_STATUS_OK on success. amqp_status_enum value failure
- *
- * \sa amqp_new_connection()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_destroy_connection(amqp_connection_state_t state);
-
-/**
- * Process incoming data
- *
- * \warning This is a low-level function intended for those who want to
- *  have greater control over input and output over the socket from the
- *  broker. Correctly using this function requires in-depth knowledge of AMQP
- *  and rabbitmq-c.
- *
- * For a given buffer of data received from the broker, decode the first
- * frame in the buffer. If more than one frame is contained in the input buffer
- * the return value will be less than the received_data size, the caller should
- * adjust received_data buffer descriptor to point to the beginning of the
- * buffer + the return value.
- *
- * \param [in] state the connection object
- * \param [in] received_data a buffer of data received from the broker. The
- *  function will return the number of bytes of the buffer it used. The
- *  function copies these bytes to an internal buffer: this part of the buffer
- *  may be reused after this function successfully completes.
- * \param [in,out] decoded_frame caller should pass in a pointer to an
- *  amqp_frame_t struct. If there is enough data in received_data for a
- *  complete frame, decoded_frame->frame_type will be set to something OTHER
- *  than 0. decoded_frame may contain members pointing to memory owned by
- *  the state object. This memory can be recycled with
- *  amqp_maybe_release_buffers() or amqp_maybe_release_buffers_on_channel().
- * \return number of bytes consumed from received_data or 0 if a 0-length
- *  buffer was passed. A negative return value indicates failure. Possible
- * errors:
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_handle_input(amqp_connection_state_t state,
-                                amqp_bytes_t received_data,
-                                amqp_frame_t *decoded_frame);
-
-/**
- * Check to see if connection memory can be released
- *
- * \deprecated This function is deprecated in favor of
- *  amqp_maybe_release_buffers() or amqp_maybe_release_buffers_on_channel()
- *
- * Checks the state of an amqp_connection_state_t object to see if
- * amqp_release_buffers() can be called successfully.
- *
- * \param [in] state the connection object
- * \returns TRUE if the buffers can be released FALSE otherwise
- *
- * \sa amqp_release_buffers() amqp_maybe_release_buffers()
- *  amqp_maybe_release_buffers_on_channel()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_release_buffers_ok(amqp_connection_state_t state);
-
-/**
- * Release amqp_connection_state_t owned memory
- *
- * \deprecated This function is deprecated in favor of
- *  amqp_maybe_release_buffers() or amqp_maybe_release_buffers_on_channel()
- *
- * \warning caller should ensure amqp_release_buffers_ok() returns true before
- *  calling this function. Failure to do so may result in abort() being called.
- *
- * Release memory owned by the amqp_connection_state_t for reuse by the
- * library. Use of any memory returned by the library before this function is
- * called will result in undefined behavior.
- *
- * \note internally rabbitmq-c tries to reuse memory when possible. As a result
- * its possible calling this function may not have a noticeable effect on
- * memory usage.
- *
- * \param [in] state the connection object
- *
- * \sa amqp_release_buffers_ok() amqp_maybe_release_buffers()
- *  amqp_maybe_release_buffers_on_channel()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_release_buffers(amqp_connection_state_t state);
-
-/**
- * Release amqp_connection_state_t owned memory
- *
- * Release memory owned by the amqp_connection_state_t object related to any
- * channel, allowing reuse by the library. Use of any memory returned by the
- * library before this function is called with result in undefined behavior.
- *
- * \note internally rabbitmq-c tries to reuse memory when possible. As a result
- * its possible calling this function may not have a noticeable effect on
- * memory usage.
- *
- * \param [in] state the connection object
- *
- * \sa amqp_maybe_release_buffers_on_channel()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_maybe_release_buffers(amqp_connection_state_t state);
-
-/**
- * Release amqp_connection_state_t owned memory related to a channel
- *
- * Release memory owned by the amqp_connection_state_t object related to the
- * specified channel, allowing reuse by the library. Use of any memory returned
- * the library for a specific channel will result in undefined behavior.
- *
- * \note internally rabbitmq-c tries to reuse memory when possible. As a result
- * its possible calling this function may not have a noticeable effect on
- * memory usage.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel specifier for which memory should be
- *  released. Note that the library does not care about the state of the
- *  channel when calling this function
- *
- * \sa amqp_maybe_release_buffers()
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_maybe_release_buffers_on_channel(
-    amqp_connection_state_t state, amqp_channel_t channel);
-
-/**
- * Send a frame to the broker
- *
- * \param [in] state the connection object
- * \param [in] frame the frame to send to the broker
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value on error.
- *  Possible error codes:
- *  - AMQP_STATUS_BAD_AMQP_DATA the serialized form of the method or
- *    properties was too large to fit in a single AMQP frame, or the
- *    method contains an invalid value. The frame was not sent.
- *  - AMQP_STATUS_TABLE_TOO_BIG the serialized form of an amqp_table_t is
- *    too large to fit in a single AMQP frame. Frame was not sent.
- *  - AMQP_STATUS_UNKNOWN_METHOD an invalid method type was passed in
- *  - AMQP_STATUS_UNKNOWN_CLASS an invalid properties type was passed in
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure. The frame
- *    was sent
- *  - AMQP_STATUS_SOCKET_ERROR
- *  - AMQP_STATUS_SSL_ERROR
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_send_frame(amqp_connection_state_t state,
-                              amqp_frame_t const *frame);
-
-/**
- * Compare two table entries
- *
- * Works just like strcmp(), comparing two the table keys, datatype, then values
- *
- * \param [in] entry1 the entry on the left
- * \param [in] entry2 the entry on the right
- * \return 0 if entries are equal, 0 < if left is greater, 0 > if right is
- * greater
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_table_entry_cmp(void const *entry1, void const *entry2);
-
-/**
- * Open a socket to a remote host
- *
- * \deprecated This function is deprecated in favor of amqp_socket_open()
- *
- * Looks up the hostname, then attempts to open a socket to the host using
- * the specified portnumber. It also sets various options on the socket to
- * improve performance and correctness.
- *
- * \param [in] hostname this can be a hostname or IP address.
- *              Both IPv4 and IPv6 are acceptable
- * \param [in] portnumber the port to connect on. RabbitMQ brokers
- *              listen on port 5672, and 5671 for SSL
- * \return a positive value indicates success and is the sockfd. A negative
- *  value (see amqp_status_enum)is returned on failure. Possible error codes:
- *  - AMQP_STATUS_TCP_SOCKETLIB_INIT_ERROR Initialization of underlying socket
- *    library failed.
- *  - AMQP_STATUS_HOSTNAME_RESOLUTION_FAILED hostname lookup failed.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. errno or
- *    WSAGetLastError() may return more useful information.
- *
- * \note IPv6 support was added in v0.3
- *
- * \sa amqp_socket_open() amqp_set_sockfd()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_open_socket(char const *hostname, int portnumber);
-
-/**
- * Send initial AMQP header to the broker
- *
- * \warning this is a low level function intended for those who want to
- * interact with the broker at a very low level. Use of this function without
- * understanding what it does will result in AMQP protocol errors.
- *
- * This function sends the AMQP protocol header to the broker.
- *
- * \param [in] state the connection object
- * \return AMQP_STATUS_OK on success, a negative value on failure. Possible
- *  error codes:
- * - AMQP_STATUS_CONNECTION_CLOSED the connection to the broker was closed.
- * - AMQP_STATUS_SOCKET_ERROR a socket error occurred. It is likely the
- *   underlying socket has been closed. errno or WSAGetLastError() may provide
- *   further information.
- * - AMQP_STATUS_SSL_ERROR a SSL error occurred. The connection to the broker
- *   was closed.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_send_header(amqp_connection_state_t state);
-
-/**
- * Checks to see if there are any incoming frames ready to be read
- *
- * Checks to see if there are any amqp_frame_t objects buffered by the
- * amqp_connection_state_t object. Having one or more frames buffered means
- * that amqp_simple_wait_frame() or amqp_simple_wait_frame_noblock() will
- * return a frame without potentially blocking on a read() call.
- *
- * \param [in] state the connection object
- * \return TRUE if there are frames enqueued, FALSE otherwise
- *
- * \sa amqp_simple_wait_frame() amqp_simple_wait_frame_noblock()
- *  amqp_data_in_buffer()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_frames_enqueued(amqp_connection_state_t state);
-
-/**
- * Read a single amqp_frame_t
- *
- * Waits for the next amqp_frame_t frame to be read from the broker.
- * This function has the potential to block for a long time in the case of
- * waiting for a basic.deliver method frame from the broker.
- *
- * The library may buffer frames. When an amqp_connection_state_t object
- * has frames buffered calling amqp_simple_wait_frame() will return an
- * amqp_frame_t without entering a blocking read(). You can test to see if
- * an amqp_connection_state_t object has frames buffered by calling the
- * amqp_frames_enqueued() function.
- *
- * The library has a socket read buffer. When there is data in an
- * amqp_connection_state_t read buffer, amqp_simple_wait_frame() may return an
- * amqp_frame_t without entering a blocking read(). You can test to see if an
- * amqp_connection_state_t object has data in its read buffer by calling the
- * amqp_data_in_buffer() function.
- *
- * \param [in] state the connection object
- * \param [out] decoded_frame the frame
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value
- *  is returned otherwise. Possible errors include:
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *  - AMQP_STATUS_HEARTBEAT_TIMEOUT timed out while waiting for heartbeat
- *    from the broker. The connection has been closed.
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. The connection has
- *    been closed
- *  - AMQP_STATUS_SSL_ERROR a SSL socket error occurred. The connection has
- *    been closed.
- *
- * \sa amqp_simple_wait_frame_noblock() amqp_frames_enqueued()
- *  amqp_data_in_buffer()
- *
- * \note as of v0.4.0 this function will no longer return heartbeat frames
- *  when enabled by specifying a non-zero heartbeat value in amqp_login().
- *  Heartbeating is handled internally by the library.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_simple_wait_frame(amqp_connection_state_t state,
-                                     amqp_frame_t *decoded_frame);
-
-/**
- * Read a single amqp_frame_t with a timeout.
- *
- * Waits for the next amqp_frame_t frame to be read from the broker, up to
- * a timespan specified by tv. The function will return AMQP_STATUS_TIMEOUT
- * if the timeout is reached. The tv value is not modified by the function.
- *
- * If a 0 timeval is specified, the function behaves as if its non-blocking: it
- * will test to see if a frame can be read from the broker, and return
- * immediately.
- *
- * If NULL is passed in for tv, the function will behave like
- * amqp_simple_wait_frame() and block until a frame is received from the broker
- *
- * The library may buffer frames.  When an amqp_connection_state_t object
- * has frames buffered calling amqp_simple_wait_frame_noblock() will return an
- * amqp_frame_t without entering a blocking read(). You can test to see if an
- * amqp_connection_state_t object has frames buffered by calling the
- * amqp_frames_enqueued() function.
- *
- * The library has a socket read buffer. When there is data in an
- * amqp_connection_state_t read buffer, amqp_simple_wait_frame_noblock() may
- * return
- * an amqp_frame_t without entering a blocking read(). You can test to see if an
- * amqp_connection_state_t object has data in its read buffer by calling the
- * amqp_data_in_buffer() function.
- *
- * \note This function does not return heartbeat frames. When enabled,
- *  heartbeating is handed internally internally by the library.
- *
- * \param [in,out] state the connection object
- * \param [out] decoded_frame the frame
- * \param [in] tv the maximum time to wait for a frame to be read. Setting
- * tv->tv_sec = 0 and tv->tv_usec = 0 will do a non-blocking read. Specifying
- * NULL for tv will make the function block until a frame is read.
- * \return AMQP_STATUS_OK on success. An amqp_status_enum value is returned
- *  otherwise. Possible errors include:
- *  - AMQP_STATUS_TIMEOUT the timeout was reached while waiting for a frame
- *    from the broker.
- *  - AMQP_STATUS_INVALID_PARAMETER the tv parameter contains an invalid value.
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *  - AMQP_STATUS_HEARTBEAT_TIMEOUT timed out while waiting for heartbeat
- *    from the broker. The connection has been closed.
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. The connection has
- *    been closed
- *  - AMQP_STATUS_SSL_ERROR a SSL socket error occurred. The connection has
- *    been closed.
- *
- * \sa amqp_simple_wait_frame() amqp_frames_enqueued() amqp_data_in_buffer()
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_simple_wait_frame_noblock(amqp_connection_state_t state,
-                                             amqp_frame_t *decoded_frame,
-                                             struct timeval *tv);
-
-/**
- * Waits for a specific method from the broker
- *
- * \warning You probably don't want to use this function. If this function
- *  doesn't receive exactly the frame requested it closes the whole connection.
- *
- * Waits for a single method on a channel from the broker.
- * If a frame is received that does not match expected_channel
- * or expected_method the program will abort
- *
- * \param [in] state the connection object
- * \param [in] expected_channel the channel that the method should be delivered
- *  on
- * \param [in] expected_method the method to wait for
- * \param [out] output the method
- * \returns AMQP_STATUS_OK on success. An amqp_status_enum value is returned
- *  otherwise. Possible errors include:
- *  - AMQP_STATUS_WRONG_METHOD a frame containing the wrong method, wrong frame
- *    type or wrong channel was received. The connection is closed.
- *  - AMQP_STATUS_NO_MEMORY failure in allocating memory. The library is likely
- *    in an indeterminate state making recovery unlikely. Client should note the
- *    error and terminate the application
- *  - AMQP_STATUS_BAD_AMQP_DATA bad AMQP data was received. The connection
- *    should be shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_METHOD: an unknown method was received from the
- *    broker. This is likely a protocol error and the connection should be
- *    shutdown immediately
- *  - AMQP_STATUS_UNKNOWN_CLASS: a properties frame with an unknown class
- *    was received from the broker. This is likely a protocol error and the
- *    connection should be shutdown immediately
- *  - AMQP_STATUS_HEARTBEAT_TIMEOUT timed out while waiting for heartbeat
- *    from the broker. The connection has been closed.
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure.
- *  - AMQP_STATUS_SOCKET_ERROR a socket error occurred. The connection has
- *    been closed
- *  - AMQP_STATUS_SSL_ERROR a SSL socket error occurred. The connection has
- *    been closed.
- *
- * \since v0.1
- */
-
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_simple_wait_method(amqp_connection_state_t state,
-                                      amqp_channel_t expected_channel,
-                                      amqp_method_number_t expected_method,
-                                      amqp_method_t *output);
-
-/**
- * Sends a method to the broker
- *
- * This is a thin wrapper around amqp_send_frame(), providing a way to send
- * a method to the broker on a specified channel.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel object
- * \param [in] id the method number
- * \param [in] decoded the method object
- * \returns AMQP_STATUS_OK on success, an amqp_status_enum value otherwise.
- *  Possible errors include:
- *  - AMQP_STATUS_BAD_AMQP_DATA the serialized form of the method or
- *    properties was too large to fit in a single AMQP frame, or the
- *    method contains an invalid value. The frame was not sent.
- *  - AMQP_STATUS_TABLE_TOO_BIG the serialized form of an amqp_table_t is
- *    too large to fit in a single AMQP frame. Frame was not sent.
- *  - AMQP_STATUS_UNKNOWN_METHOD an invalid method type was passed in
- *  - AMQP_STATUS_UNKNOWN_CLASS an invalid properties type was passed in
- *  - AMQP_STATUS_TIMER_FAILURE system timer indicated failure. The frame
- *    was sent
- *  - AMQP_STATUS_SOCKET_ERROR
- *  - AMQP_STATUS_SSL_ERROR
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_send_method(amqp_connection_state_t state,
-                               amqp_channel_t channel, amqp_method_number_t id,
-                               void *decoded);
-
-/**
- * Sends a method to the broker and waits for a method response
- *
- * \param [in] state the connection object
- * \param [in] channel the channel object
- * \param [in] request_id the method number of the request
- * \param [in] expected_reply_ids a 0 terminated array of expected response
- *             method numbers
- * \param [in] decoded_request_method the method to be sent to the broker
- * \return a amqp_rpc_reply_t:
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. RPC completed successfully
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. An exception occurred
- *    within the library. Examine r.library_error and compare it against
- *    amqp_status_enum values to determine the error.
- *
- * \sa amqp_simple_rpc_decoded()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_simple_rpc(
-    amqp_connection_state_t state, amqp_channel_t channel,
-    amqp_method_number_t request_id, amqp_method_number_t *expected_reply_ids,
-    void *decoded_request_method);
-
-/**
- * Sends a method to the broker and waits for a method response
- *
- * \param [in] state the connection object
- * \param [in] channel the channel object
- * \param [in] request_id the method number of the request
- * \param [in] reply_id the method number expected in response
- * \param [in] decoded_request_method the request method
- * \return a pointer to the method returned from the broker, or NULL on error.
- *  On error amqp_get_rpc_reply() will return an amqp_rpc_reply_t with
- *  details on the error that occurred.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-void *AMQP_CALL amqp_simple_rpc_decoded(amqp_connection_state_t state,
-                                        amqp_channel_t channel,
-                                        amqp_method_number_t request_id,
-                                        amqp_method_number_t reply_id,
-                                        void *decoded_request_method);
-
-/**
- * Get the last global amqp_rpc_reply
- *
- * The API methods corresponding to most synchronous AMQP methods
- * return a pointer to the decoded method result.  Upon error, they
- * return NULL, and we need some way of discovering what, if anything,
- * went wrong. amqp_get_rpc_reply() returns the most recent
- * amqp_rpc_reply_t instance corresponding to such an API operation
- * for the given connection.
- *
- * Only use it for operations that do not themselves return
- * amqp_rpc_reply_t; operations that do return amqp_rpc_reply_t
- * generally do NOT update this per-connection-global amqp_rpc_reply_t
- * instance.
- *
- * \param [in] state the connection object
- * \return the most recent amqp_rpc_reply_t:
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. RPC completed successfully
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. An exception occurred
- *    within the library. Examine r.library_error and compare it against
- *    amqp_status_enum values to determine the error.
- *
- * \sa amqp_simple_rpc_decoded()
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_get_rpc_reply(amqp_connection_state_t state);
-
-/**
- * Login to the broker
- *
- * After using amqp_open_socket and amqp_set_sockfd, call
- * amqp_login to complete connecting to the broker
- *
- * \param [in] state the connection object
- * \param [in] vhost the virtual host to connect to on the broker. The default
- *              on most brokers is "/"
- * \param [in] channel_max the limit for number of channels for the connection.
- *              0 means no limit, and is a good default
- *              (AMQP_DEFAULT_MAX_CHANNELS)
- *              Note that the maximum number of channels the protocol supports
- *              is 65535 (2^16, with the 0-channel reserved). The server can
- *              set a lower channel_max and then the client will use the lowest
- *              of the two
- * \param [in] frame_max the maximum size of an AMQP frame on the wire to
- *              request of the broker for this connection. 4096 is the minimum
- *              size, 2^31-1 is the maximum, a good default is 131072 (128KB),
- *              or AMQP_DEFAULT_FRAME_SIZE
- * \param [in] heartbeat the number of seconds between heartbeat frames to
- *              request of the broker. A value of 0 disables heartbeats.
- *              Note rabbitmq-c only has partial support for heartbeats, as of
- *              v0.4.0 they are only serviced during amqp_basic_publish() and
- *              amqp_simple_wait_frame()/amqp_simple_wait_frame_noblock()
- * \param [in] sasl_method the SASL method to authenticate with the broker.
- *              followed by the authentication information. The following SASL
- *              methods are implemented:
- *              -  AMQP_SASL_METHOD_PLAIN, the AMQP_SASL_METHOD_PLAIN argument
- *                 should be followed by two arguments in this order:
- *                 const char* username, and const char* password.
- *              -  AMQP_SASL_METHOD_EXTERNAL, the AMQP_SASL_METHOD_EXTERNAL
- *                 argument should be followed one argument:
- *                 const char* identity.
- * \return amqp_rpc_reply_t indicating success or failure.
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. Login completed successfully
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. In most cases errors
- *    from the broker when logging in will be represented by the broker closing
- *    the socket. In this case r.library_error will be set to
- *    AMQP_STATUS_CONNECTION_CLOSED. This error can represent a number of
- *    error conditions including: invalid vhost, authentication failure.
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_login(amqp_connection_state_t state,
-                                      char const *vhost, int channel_max,
-                                      int frame_max, int heartbeat,
-                                      amqp_sasl_method_enum sasl_method, ...);
-
-/**
- * Login to the broker passing a properties table
- *
- * This function is similar to amqp_login() and differs in that it provides a
- * way to pass client properties to the broker. This is commonly used to
- * negotiate newer protocol features as they are supported by the broker.
- *
- * \param [in] state the connection object
- * \param [in] vhost the virtual host to connect to on the broker. The default
- *              on most brokers is "/"
- * \param [in] channel_max the limit for the number of channels for the
- *             connection.
- *             0 means no limit, and is a good default
- *             (AMQP_DEFAULT_MAX_CHANNELS)
- *             Note that the maximum number of channels the protocol supports
- *             is 65535 (2^16, with the 0-channel reserved). The server can
- *             set a lower channel_max and then the client will use the lowest
- *             of the two
- * \param [in] frame_max the maximum size of an AMQP frame ont he wire to
- *              request of the broker for this connection. 4096 is the minimum
- *              size, 2^31-1 is the maximum, a good default is 131072 (128KB),
- *              or AMQP_DEFAULT_FRAME_SIZE
- * \param [in] heartbeat the number of seconds between heartbeat frame to
- *             request of the broker. A value of 0 disables heartbeats.
- *             Note rabbitmq-c only has partial support for hearts, as of
- *             v0.4.0 heartbeats are only serviced during amqp_basic_publish(),
- *             and amqp_simple_wait_frame()/amqp_simple_wait_frame_noblock()
- * \param [in] properties a table of properties to send the broker.
- * \param [in] sasl_method the SASL method to authenticate with the broker
- *             followed by the authentication information. The following SASL
- *             methods are implemented:
- *             -  AMQP_SASL_METHOD_PLAIN, the AMQP_SASL_METHOD_PLAIN argument
- *                should be followed by two arguments in this order:
- *                const char* username, and const char* password.
- *             -  AMQP_SASL_METHOD_EXTERNAL, the AMQP_SASL_METHOD_EXTERNAL
- *                argument should be followed one argument:
- *                const char* identity.
- * \return amqp_rpc_reply_t indicating success or failure.
- *  - r.reply_type == AMQP_RESPONSE_NORMAL. Login completed successfully
- *  - r.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION. In most cases errors
- *    from the broker when logging in will be represented by the broker closing
- *    the socket. In this case r.library_error will be set to
- *    AMQP_STATUS_CONNECTION_CLOSED. This error can represent a number of
- *    error conditions including: invalid vhost, authentication failure.
- *  - r.reply_type == AMQP_RESPONSE_SERVER_EXCEPTION. The broker returned an
- *    exception:
- *    - If r.reply.id == AMQP_CHANNEL_CLOSE_METHOD a channel exception
- *      occurred, cast r.reply.decoded to amqp_channel_close_t* to see details
- *      of the exception. The client should amqp_send_method() a
- *      amqp_channel_close_ok_t. The channel must be re-opened before it
- *      can be used again. Any resources associated with the channel
- *      (auto-delete exchanges, auto-delete queues, consumers) are invalid
- *      and must be recreated before attempting to use them again.
- *    - If r.reply.id == AMQP_CONNECTION_CLOSE_METHOD a connection exception
- *      occurred, cast r.reply.decoded to amqp_connection_close_t* to see
- *      details of the exception. The client amqp_send_method() a
- *      amqp_connection_close_ok_t and disconnect from the broker.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_login_with_properties(
-    amqp_connection_state_t state, char const *vhost, int channel_max,
-    int frame_max, int heartbeat, const amqp_table_t *properties,
-    amqp_sasl_method_enum sasl_method, ...);
-
-struct amqp_basic_properties_t_;
-
-/**
- * Publish a message to the broker
- *
- * Publish a message on an exchange with a routing key.
- *
- * Note that at the AMQ protocol level basic.publish is an async method:
- * this means error conditions that occur on the broker (such as publishing to
- * a non-existent exchange) will not be reflected in the return value of this
- * function.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] exchange the exchange on the broker to publish to
- * \param [in] routing_key the routing key to use when publishing the message
- * \param [in] mandatory indicate to the broker that the message MUST be routed
- *              to a queue. If the broker cannot do this it should respond with
- *              a basic.return method.
- * \param [in] immediate indicate to the broker that the message MUST be
- *             delivered to a consumer immediately. If the broker cannot do this
- *             it should respond with a basic.return method.
- * \param [in] properties the properties associated with the message
- * \param [in] body the message body
- * \return AMQP_STATUS_OK on success, amqp_status_enum value on failure. Note
- *         that basic.publish is an async method, the return value from this
- *         function only indicates that the message data was successfully
- *         transmitted to the broker. It does not indicate failures that occur
- *         on the broker, such as publishing to a non-existent exchange.
- *         Possible error values:
- *         - AMQP_STATUS_TIMER_FAILURE: system timer facility returned an error
- *           the message was not sent.
- *         - AMQP_STATUS_HEARTBEAT_TIMEOUT: connection timed out waiting for a
- *           heartbeat from the broker. The message was not sent.
- *         - AMQP_STATUS_NO_MEMORY: memory allocation failed. The message was
- *           not sent.
- *         - AMQP_STATUS_TABLE_TOO_BIG: a table in the properties was too large
- *           to fit in a single frame. Message was not sent.
- *         - AMQP_STATUS_CONNECTION_CLOSED: the connection was closed.
- *         - AMQP_STATUS_SSL_ERROR: a SSL error occurred.
- *         - AMQP_STATUS_TCP_ERROR: a TCP error occurred. errno or
- *           WSAGetLastError() may provide more information
- *
- * Note: this function does heartbeat processing as of v0.4.0
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_publish(
-    amqp_connection_state_t state, amqp_channel_t channel,
-    amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_boolean_t mandatory,
-    amqp_boolean_t immediate, struct amqp_basic_properties_t_ const *properties,
-    amqp_bytes_t body);
-
-/**
- * Closes an channel
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] code the reason for closing the channel, AMQP_REPLY_SUCCESS is a
- *             good default
- * \return amqp_rpc_reply_t indicating success or failure
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_channel_close(amqp_connection_state_t state,
-                                              amqp_channel_t channel, int code);
-
-/**
- * Closes the entire connection
- *
- * Implicitly closes all channels and informs the broker the connection
- * is being closed, after receiving acknowledgment from the broker it closes
- * the socket.
- *
- * \param [in] state the connection object
- * \param [in] code the reason code for closing the connection.
- *             AMQP_REPLY_SUCCESS is a good default.
- * \return amqp_rpc_reply_t indicating the result
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_connection_close(amqp_connection_state_t state,
-                                                 int code);
-
-/**
- * Acknowledges a message
- *
- * Does a basic.ack on a received message
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] delivery_tag the delivery tag of the message to be ack'd
- * \param [in] multiple if true, ack all messages up to this delivery tag, if
- *              false ack only this delivery tag
- * \return 0 on success,  0 > on failing to send the ack to the broker.
- *            this will not indicate failure if something goes wrong on the
- *            broker
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_ack(amqp_connection_state_t state,
-                             amqp_channel_t channel, uint64_t delivery_tag,
-                             amqp_boolean_t multiple);
-
-/**
- * Do a basic.get
- *
- * Synchonously polls the broker for a message in a queue, and
- * retrieves the message if a message is in the queue.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier to use
- * \param [in] queue the queue name to retrieve from
- * \param [in] no_ack if true the message is automatically ack'ed
- *              if false amqp_basic_ack should be called once the message
- *              retrieved has been processed
- * \return amqp_rpc_reply indicating success or failure
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_basic_get(amqp_connection_state_t state,
-                                          amqp_channel_t channel,
-                                          amqp_bytes_t queue,
-                                          amqp_boolean_t no_ack);
-
-/**
- * Do a basic.reject
- *
- * Actively reject a message that has been delivered
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] delivery_tag the delivery tag of the message to reject
- * \param [in] requeue indicate to the broker whether it should requeue the
- *              message or just discard it.
- * \return 0 on success, 0 > on failing to send the reject method to the broker.
- *          This will not indicate failure if something goes wrong on the
- * broker.
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_reject(amqp_connection_state_t state,
-                                amqp_channel_t channel, uint64_t delivery_tag,
-                                amqp_boolean_t requeue);
-
-/**
- * Do a basic.nack
- *
- * Actively reject a message, this has the same effect as amqp_basic_reject()
- * however, amqp_basic_nack() can negatively acknowledge multiple messages with
- * one call much like amqp_basic_ack() can acknowledge mutliple messages with
- * one call.
- *
- * \param [in] state the connection object
- * \param [in] channel the channel identifier
- * \param [in] delivery_tag the delivery tag of the message to reject
- * \param [in] multiple if set to 1 negatively acknowledge all unacknowledged
- *              messages on this channel.
- * \param [in] requeue indicate to the broker whether it should requeue the
- *              message or dead-letter it.
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value otherwise.
- *
- * \since v0.5.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_basic_nack(amqp_connection_state_t state,
-                              amqp_channel_t channel, uint64_t delivery_tag,
-                              amqp_boolean_t multiple, amqp_boolean_t requeue);
-/**
- * Check to see if there is data left in the receive buffer
- *
- * Can be used to see if there is data still in the buffer, if so
- * calling amqp_simple_wait_frame will not immediately enter a
- * blocking read.
- *
- * \param [in] state the connection object
- * \return true if there is data in the recieve buffer, false otherwise
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_data_in_buffer(amqp_connection_state_t state);
-
-/**
- * Get the error string for the given error code.
- *
- * \deprecated This function has been deprecated in favor of
- *  \ref amqp_error_string2() which returns statically allocated
- *  string which do not need to be freed by the caller.
- *
- * The returned string resides on the heap; the caller is responsible
- * for freeing it.
- *
- * \param [in] err return error code
- * \return the error string
- *
- * \since v0.1
- */
-AMQP_DEPRECATED(
-    AMQP_PUBLIC_FUNCTION char *AMQP_CALL amqp_error_string(int err));
-
-/**
- * Get the error string for the given error code.
- *
- * Get an error string associated with an error code. The string is statically
- * allocated and does not need to be freed
- *
- * \param [in] err the error code
- * \return the error string
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-const char *AMQP_CALL amqp_error_string2(int err);
-
-/**
- * Deserialize an amqp_table_t from AMQP wireformat
- *
- * This is an internal function and is not typically used by
- * client applications
- *
- * \param [in] encoded the buffer containing the serialized data
- * \param [in] pool memory pool used to allocate the table entries from
- * \param [in] output the amqp_table_t structure to fill in. Any existing
- *             entries will be erased
- * \param [in,out] offset The offset into the encoded buffer to start
- *                 reading the serialized table. It will be updated
- *                 by this function to end of the table
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value on failure
- *  Possible error codes:
- *  - AMQP_STATUS_NO_MEMORY out of memory
- *  - AMQP_STATUS_BAD_AMQP_DATA invalid wireformat
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_decode_table(amqp_bytes_t encoded, amqp_pool_t *pool,
-                                amqp_table_t *output, size_t *offset);
-
-/**
- * Serializes an amqp_table_t to the AMQP wireformat
- *
- * This is an internal function and is not typically used by
- * client applications
- *
- * \param [in] encoded the buffer where to serialize the table to
- * \param [in] input the amqp_table_t to serialize
- * \param [in,out] offset The offset into the encoded buffer to start
- *                 writing the serialized table. It will be updated
- *                 by this function to where writing left off
- * \return AMQP_STATUS_OK on success, an amqp_status_enum value on failure
- *  Possible error codes:
- *  - AMQP_STATUS_TABLE_TOO_BIG the serialized form is too large for the
- *    buffer
- *  - AMQP_STATUS_BAD_AMQP_DATA invalid table
- *
- * \since v0.1
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_encode_table(amqp_bytes_t encoded, amqp_table_t *input,
-                                size_t *offset);
-
-/**
- * Create a deep-copy of an amqp_table_t object
- *
- * Creates a deep-copy of an amqp_table_t object, using the provided pool
- * object to allocate the necessary memory. This memory can be freed later by
- * call recycle_amqp_pool(), or empty_amqp_pool()
- *
- * \param [in] original the table to copy
- * \param [in,out] clone the table to copy to
- * \param [in] pool the initialized memory pool to do allocations for the table
- *             from
- * \return AMQP_STATUS_OK on success, amqp_status_enum value on failure.
- *  Possible error values:
- *  - AMQP_STATUS_NO_MEMORY - memory allocation failure.
- *  - AMQP_STATUS_INVALID_PARAMETER - invalid table (e.g., no key name)
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_table_clone(const amqp_table_t *original,
-                               amqp_table_t *clone, amqp_pool_t *pool);
-
-/**
- * A message object
- *
- * \since v0.4.0
- */
-typedef struct amqp_message_t_ {
-  amqp_basic_properties_t properties; /**< message properties */
-  amqp_bytes_t body;                  /**< message body */
-  amqp_pool_t pool;                   /**< pool used to allocate properties */
-} amqp_message_t;
-
-/**
- * Reads the next message on a channel
- *
- * Reads a complete message (header + body) on a specified channel. This
- * function is intended to be used with amqp_basic_get() or when an
- * AMQP_BASIC_DELIVERY_METHOD method is received.
- *
- * \param [in,out] state the connection object
- * \param [in] channel the channel on which to read the message from
- * \param [in,out] message a pointer to a amqp_message_t object. Caller should
- *                 call amqp_message_destroy() when it is done using the
- *                 fields in the message object.  The caller is responsible for
- *                 allocating/destroying the amqp_message_t object itself.
- * \param [in] flags pass in 0. Currently unused.
- * \returns a amqp_rpc_reply_t object. ret.reply_type == AMQP_RESPONSE_NORMAL on
- * success.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_read_message(amqp_connection_state_t state,
-                                             amqp_channel_t channel,
-                                             amqp_message_t *message,
-                                             int flags);
-
-/**
- * Frees memory associated with a amqp_message_t allocated in amqp_read_message
- *
- * \param [in] message
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_destroy_message(amqp_message_t *message);
-
-/**
- * Envelope object
- *
- * \since v0.4.0
- */
-typedef struct amqp_envelope_t_ {
-  amqp_channel_t channel; /**< channel message was delivered on */
-  amqp_bytes_t
-      consumer_tag;      /**< the consumer tag the message was delivered to */
-  uint64_t delivery_tag; /**< the messages delivery tag */
-  amqp_boolean_t redelivered; /**< flag indicating whether this message is being
-                                 redelivered */
-  amqp_bytes_t exchange;      /**< exchange this message was published to */
-  amqp_bytes_t
-      routing_key; /**< the routing key this message was published with */
-  amqp_message_t message; /**< the message */
-} amqp_envelope_t;
-
-/**
- * Wait for and consume a message
- *
- * Waits for a basic.deliver method on any channel, upon receipt of
- * basic.deliver it reads that message, and returns. If any other method is
- * received before basic.deliver, this function will return an amqp_rpc_reply_t
- * with ret.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION, and
- * ret.library_error == AMQP_STATUS_UNEXPECTED_STATE. The caller should then
- * call amqp_simple_wait_frame() to read this frame and take appropriate action.
- *
- * This function should be used after starting a consumer with the
- * amqp_basic_consume() function
- *
- * \param [in,out] state the connection object
- * \param [in,out] envelope a pointer to a amqp_envelope_t object. Caller
- *                 should call #amqp_destroy_envelope() when it is done using
- *                 the fields in the envelope object. The caller is responsible
- *                 for allocating/destroying the amqp_envelope_t object itself.
- * \param [in] timeout a timeout to wait for a message delivery. Passing in
- *             NULL will result in blocking behavior.
- * \param [in] flags pass in 0. Currently unused.
- * \returns a amqp_rpc_reply_t object.  ret.reply_type == AMQP_RESPONSE_NORMAL
- *          on success. If ret.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION,
- *          and ret.library_error == AMQP_STATUS_UNEXPECTED_STATE, a frame other
- *          than AMQP_BASIC_DELIVER_METHOD was received, the caller should call
- *          amqp_simple_wait_frame() to read this frame and take appropriate
- *          action.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_rpc_reply_t AMQP_CALL amqp_consume_message(amqp_connection_state_t state,
-                                                amqp_envelope_t *envelope,
-                                                struct timeval *timeout,
-                                                int flags);
-
-/**
- * Frees memory associated with a amqp_envelope_t allocated in
- * amqp_consume_message()
- *
- * \param [in] envelope
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_destroy_envelope(amqp_envelope_t *envelope);
-
-/**
- * Parameters used to connect to the RabbitMQ broker
- *
- * \since v0.2
- */
-struct amqp_connection_info {
-  char *user; /**< the username to authenticate with the broker, default on most
-                 broker is 'guest' */
-  char *password; /**< the password to authenticate with the broker, default on
-                     most brokers is 'guest' */
-  char *host;     /**< the hostname of the broker */
-  char *vhost; /**< the virtual host on the broker to connect to, a good default
-                  is "/" */
-  int port;    /**< the port that the broker is listening on, default on most
-                  brokers is 5672 */
-  amqp_boolean_t ssl;
-};
-
-/**
- * Initialze an amqp_connection_info to default values
- *
- * The default values are:
- * - user: "guest"
- * - password: "guest"
- * - host: "localhost"
- * - vhost: "/"
- * - port: 5672
- *
- * \param [out] parsed the connection info to set defaults on
- *
- * \since v0.2
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL
-    amqp_default_connection_info(struct amqp_connection_info *parsed);
-
-/**
- * Parse a connection URL
- *
- * An amqp connection url takes the form:
- *
- * amqp://[$USERNAME[:$PASSWORD]\@]$HOST[:$PORT]/[$VHOST]
- *
- * Examples:
- *  amqp://guest:guest\@localhost:5672//
- *  amqp://guest:guest\@localhost/myvhost
- *
- *  Any missing parts of the URL will be set to the defaults specified in
- *  amqp_default_connection_info. For amqps: URLs the default port will be set
- *  to 5671 instead of 5672 for non-SSL URLs.
- *
- * \note This function modifies url parameter.
- *
- * \param [in] url URI to parse, note that this parameter is modified by the
- *             function.
- * \param [out] parsed the connection info gleaned from the URI. The char*
- *              members will point to parts of the url input parameter.
- *              Memory management will depend on how the url is allocated.
- * \returns AMQP_STATUS_OK on success, AMQP_STATUS_BAD_URL on failure
- *
- * \since v0.2
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_parse_url(char *url, struct amqp_connection_info *parsed);
-
-/* socket API */
-
-/**
- * Open a socket connection.
- *
- * This function opens a socket connection returned from amqp_tcp_socket_new()
- * or amqp_ssl_socket_new(). This function should be called after setting
- * socket options and prior to assigning the socket to an AMQP connection with
- * amqp_set_socket().
- *
- * \param [in,out] self A socket object.
- * \param [in] host Connect to this host.
- * \param [in] port Connect on this remote port.
- *
- * \return AMQP_STATUS_OK on success, an amqp_status_enum on failure
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_socket_open(amqp_socket_t *self, const char *host, int port);
-
-/**
- * Open a socket connection.
- *
- * This function opens a socket connection returned from amqp_tcp_socket_new()
- * or amqp_ssl_socket_new(). This function should be called after setting
- * socket options and prior to assigning the socket to an AMQP connection with
- * amqp_set_socket().
- *
- * \param [in,out] self A socket object.
- * \param [in] host Connect to this host.
- * \param [in] port Connect on this remote port.
- * \param [in] timeout Max allowed time to spent on opening. If NULL - run in
- *             blocking mode
- *
- * \return AMQP_STATUS_OK on success, an amqp_status_enum on failure.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_socket_open_noblock(amqp_socket_t *self, const char *host,
-                                       int port, struct timeval *timeout);
-
-/**
- * Get the socket descriptor in use by a socket object.
- *
- * Retrieve the underlying socket descriptor. This function can be used to
- * perform low-level socket operations that aren't supported by the socket
- * interface. Use with caution!
- *
- * \param [in,out] self A socket object.
- *
- * \return The underlying socket descriptor, or -1 if there is no socket
- *  descriptor associated with
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_socket_get_sockfd(amqp_socket_t *self);
-
-/**
- * Get the socket object associated with a amqp_connection_state_t
- *
- * \param [in] state the connection object to get the socket from
- * \return a pointer to the socket object, or NULL if one has not been assigned
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_socket_t *AMQP_CALL amqp_get_socket(amqp_connection_state_t state);
-
-/**
- * Get the broker properties table
- *
- * \param [in] state the connection object
- * \return a pointer to an amqp_table_t containing the properties advertised
- *  by the broker on connection. The connection object owns the table, it
- *  should not be modified.
- *
- * \since v0.5.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_table_t *AMQP_CALL
-    amqp_get_server_properties(amqp_connection_state_t state);
-
-/**
- * Get the client properties table
- *
- * Get the properties that were passed to the broker on connection.
- *
- * \param [in] state the connection object
- * \return a pointer to an amqp_table_t containing the properties advertised
- *  by the client on connection. The connection object owns the table, it
- *  should not be modified.
- *
- * \since v0.7.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_table_t *AMQP_CALL
-    amqp_get_client_properties(amqp_connection_state_t state);
-
-/**
- * Get the login handshake timeout.
- *
- * amqp_login and amqp_login_with_properties perform the login handshake with
- * the broker.  This function returns the timeout associated with completing
- * this operation from the client side. This value can be set by using the
- * amqp_set_handshake_timeout.
- *
- * Note that the RabbitMQ broker has configurable timeout for completing the
- * login handshake, the default is 10 seconds.  rabbitmq-c has a default of 12
- * seconds.
- *
- * \param [in] state the connection object
- * \return a struct timeval representing the current login timeout for the state
- *  object. A NULL value represents an infinite timeout. The memory returned is
- *  owned by the connection object.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-struct timeval *AMQP_CALL
-    amqp_get_handshake_timeout(amqp_connection_state_t state);
-
-/**
- * Set the login handshake timeout.
- *
- * amqp_login and amqp_login_with_properties perform the login handshake with
- * the broker. This function sets the timeout associated with completing this
- * operation from the client side.
- *
- * The timeout must be set before amqp_login or amqp_login_with_properties is
- * called to change from the default timeout.
- *
- * Note that the RabbitMQ broker has a configurable timeout for completing the
- * login handshake, the default is 10 seconds. rabbitmq-c has a default of 12
- * seconds.
- *
- * \param [in] state the connection object
- * \param [in] timeout a struct timeval* representing new login timeout for the
- *  state object. NULL represents an infinite timeout. The value of timeout is
- *  copied internally, the caller is responsible for ownership of the passed in
- *  pointer, it does not need to remain valid after this function is called.
- * \return AMQP_STATUS_OK on success.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_set_handshake_timeout(amqp_connection_state_t state,
-                                         struct timeval *timeout);
-
-/**
- * Get the RPC timeout
- *
- * Gets the timeout for any RPC-style AMQP command (e.g., amqp_queue_declare).
- * This timeout may be changed at any time by calling \amqp_set_rpc_timeout
- * function with a new timeout. The timeout applies individually to each RPC
- * that is made.
- *
- * The default value is NULL, or an infinite timeout.
- *
- * When an RPC times out, the function will return an error AMQP_STATUS_TIMEOUT,
- * and the connection will be closed.
- *
- *\warning RPC-timeouts are an advanced feature intended to be used to detect
- * dead connections quickly when the rabbitmq-c implementation of heartbeats
- * does not work. Do not use RPC timeouts unless you understand the implications
- * of doing so.
- *
- * \param [in] state the connection object
- * \return a struct timeval representing the current RPC timeout for the state
- * object. A NULL value represents an infinite timeout. The memory returned is
- * owned by the connection object.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-struct timeval *AMQP_CALL amqp_get_rpc_timeout(amqp_connection_state_t state);
-
-/**
- * Set the RPC timeout
- *
- * Sets the timeout for any RPC-style AMQP command (e.g., amqp_queue_declare).
- * This timeout may be changed at any time by calling this function with a new
- * timeout. The timeout applies individually to each RPC that is made.
- *
- * The default value is NULL, or an infinite timeout.
- *
- * When an RPC times out, the function will return an error AMQP_STATUS_TIMEOUT,
- * and the connection will be closed.
- *
- *\warning RPC-timeouts are an advanced feature intended to be used to detect
- * dead connections quickly when the rabbitmq-c implementation of heartbeats
- * does not work. Do not use RPC timeouts unless you understand the implications
- * of doing so.
- *
- * \param [in] state the connection object
- * \param [in] timeout a struct timeval* representing new RPC timeout for the
- * state object. NULL represents an infinite timeout. The value of timeout is
- * copied internally, the caller is responsible for ownership of the passed
- * pointer, it does not need to remain valid after this function is called.
- * \return AMQP_STATUS_SUCCESS on success.
- *
- * \since v0.9.0
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_set_rpc_timeout(amqp_connection_state_t state,
-                                   struct timeval *timeout);
-
-AMQP_END_DECLS
-
-#endif /* AMQP_H */

+ 0 - 1144
ext/librabbitmq/macos/include/amqp_framing.h

@@ -1,1144 +0,0 @@
-/* Generated code. Do not edit. Edit and re-run codegen.py instead.
- *
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MIT
- *
- * Portions created by Alan Antonuk are Copyright (c) 2012-2013
- * Alan Antonuk. All Rights Reserved.
- *
- * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc.
- * All Rights Reserved.
- *
- * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010
- * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- * ***** END LICENSE BLOCK *****
- */
-
-/** @file amqp_framing.h */
-#ifndef AMQP_FRAMING_H
-#define AMQP_FRAMING_H
-
-#include <amqp.h>
-
-AMQP_BEGIN_DECLS
-
-#define AMQP_PROTOCOL_VERSION_MAJOR 0 /**< AMQP protocol version major */
-#define AMQP_PROTOCOL_VERSION_MINOR 9 /**< AMQP protocol version minor */
-#define AMQP_PROTOCOL_VERSION_REVISION                                   \
-  1                                  /**< AMQP protocol version revision \
-                                        */
-#define AMQP_PROTOCOL_PORT 5672      /**< Default AMQP Port */
-#define AMQP_FRAME_METHOD 1          /**< Constant: FRAME-METHOD */
-#define AMQP_FRAME_HEADER 2          /**< Constant: FRAME-HEADER */
-#define AMQP_FRAME_BODY 3            /**< Constant: FRAME-BODY */
-#define AMQP_FRAME_HEARTBEAT 8       /**< Constant: FRAME-HEARTBEAT */
-#define AMQP_FRAME_MIN_SIZE 4096     /**< Constant: FRAME-MIN-SIZE */
-#define AMQP_FRAME_END 206           /**< Constant: FRAME-END */
-#define AMQP_REPLY_SUCCESS 200       /**< Constant: REPLY-SUCCESS */
-#define AMQP_CONTENT_TOO_LARGE 311   /**< Constant: CONTENT-TOO-LARGE */
-#define AMQP_NO_ROUTE 312            /**< Constant: NO-ROUTE */
-#define AMQP_NO_CONSUMERS 313        /**< Constant: NO-CONSUMERS */
-#define AMQP_ACCESS_REFUSED 403      /**< Constant: ACCESS-REFUSED */
-#define AMQP_NOT_FOUND 404           /**< Constant: NOT-FOUND */
-#define AMQP_RESOURCE_LOCKED 405     /**< Constant: RESOURCE-LOCKED */
-#define AMQP_PRECONDITION_FAILED 406 /**< Constant: PRECONDITION-FAILED */
-#define AMQP_CONNECTION_FORCED 320   /**< Constant: CONNECTION-FORCED */
-#define AMQP_INVALID_PATH 402        /**< Constant: INVALID-PATH */
-#define AMQP_FRAME_ERROR 501         /**< Constant: FRAME-ERROR */
-#define AMQP_SYNTAX_ERROR 502        /**< Constant: SYNTAX-ERROR */
-#define AMQP_COMMAND_INVALID 503     /**< Constant: COMMAND-INVALID */
-#define AMQP_CHANNEL_ERROR 504       /**< Constant: CHANNEL-ERROR */
-#define AMQP_UNEXPECTED_FRAME 505    /**< Constant: UNEXPECTED-FRAME */
-#define AMQP_RESOURCE_ERROR 506      /**< Constant: RESOURCE-ERROR */
-#define AMQP_NOT_ALLOWED 530         /**< Constant: NOT-ALLOWED */
-#define AMQP_NOT_IMPLEMENTED 540     /**< Constant: NOT-IMPLEMENTED */
-#define AMQP_INTERNAL_ERROR 541      /**< Constant: INTERNAL-ERROR */
-
-/* Function prototypes. */
-
-/**
- * Get constant name string from constant
- *
- * @param [in] constantNumber constant to get the name of
- * @returns string describing the constant. String is managed by
- *           the library and should not be free()'d by the program
- */
-AMQP_PUBLIC_FUNCTION
-char const *AMQP_CALL amqp_constant_name(int constantNumber);
-
-/**
- * Checks to see if a constant is a hard error
- *
- * A hard error occurs when something severe enough
- * happens that the connection must be closed.
- *
- * @param [in] constantNumber the error constant
- * @returns true if its a hard error, false otherwise
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL amqp_constant_is_hard_error(int constantNumber);
-
-/**
- * Get method name string from method number
- *
- * @param [in] methodNumber the method number
- * @returns method name string. String is managed by the library
- *           and should not be freed()'d by the program
- */
-AMQP_PUBLIC_FUNCTION
-char const *AMQP_CALL amqp_method_name(amqp_method_number_t methodNumber);
-
-/**
- * Check whether a method has content
- *
- * A method that has content will receive the method frame
- * a properties frame, then 1 to N body frames
- *
- * @param [in] methodNumber the method number
- * @returns true if method has content, false otherwise
- */
-AMQP_PUBLIC_FUNCTION
-amqp_boolean_t AMQP_CALL
-    amqp_method_has_content(amqp_method_number_t methodNumber);
-
-/**
- * Decodes a method from AMQP wireformat
- *
- * @param [in] methodNumber the method number for the decoded parameter
- * @param [in] pool the memory pool to allocate the decoded method from
- * @param [in] encoded the encoded byte string buffer
- * @param [out] decoded pointer to the decoded method struct
- * @returns 0 on success, an error code otherwise
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_decode_method(amqp_method_number_t methodNumber,
-                                 amqp_pool_t *pool, amqp_bytes_t encoded,
-                                 void **decoded);
-
-/**
- * Decodes a header frame properties structure from AMQP wireformat
- *
- * @param [in] class_id the class id for the decoded parameter
- * @param [in] pool the memory pool to allocate the decoded properties from
- * @param [in] encoded the encoded byte string buffer
- * @param [out] decoded pointer to the decoded properties struct
- * @returns 0 on success, an error code otherwise
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_decode_properties(uint16_t class_id, amqp_pool_t *pool,
-                                     amqp_bytes_t encoded, void **decoded);
-
-/**
- * Encodes a method structure in AMQP wireformat
- *
- * @param [in] methodNumber the method number for the decoded parameter
- * @param [in] decoded the method structure (e.g., amqp_connection_start_t)
- * @param [in] encoded an allocated byte buffer for the encoded method
- *              structure to be written to. If the buffer isn't large enough
- *              to hold the encoded method, an error code will be returned.
- * @returns 0 on success, an error code otherwise.
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_encode_method(amqp_method_number_t methodNumber,
-                                 void *decoded, amqp_bytes_t encoded);
-
-/**
- * Encodes a properties structure in AMQP wireformat
- *
- * @param [in] class_id the class id for the decoded parameter
- * @param [in] decoded the properties structure (e.g., amqp_basic_properties_t)
- * @param [in] encoded an allocated byte buffer for the encoded properties to
- * written to.
- *              If the buffer isn't large enough to hold the encoded method, an
- *              an error code will be returned
- * @returns 0 on success, an error code otherwise.
- */
-AMQP_PUBLIC_FUNCTION
-int AMQP_CALL amqp_encode_properties(uint16_t class_id, void *decoded,
-                                     amqp_bytes_t encoded);
-
-/* Method field records. */
-
-#define AMQP_CONNECTION_START_METHOD                                 \
-  ((amqp_method_number_t)0x000A000A) /**< connection.start method id \
-                                        @internal 10, 10; 655370 */
-/** connection.start method fields */
-typedef struct amqp_connection_start_t_ {
-  uint8_t version_major;          /**< version-major */
-  uint8_t version_minor;          /**< version-minor */
-  amqp_table_t server_properties; /**< server-properties */
-  amqp_bytes_t mechanisms;        /**< mechanisms */
-  amqp_bytes_t locales;           /**< locales */
-} amqp_connection_start_t;
-
-#define AMQP_CONNECTION_START_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A000B) /**< connection.start-ok method id \
-                                        @internal 10, 11; 655371 */
-/** connection.start-ok method fields */
-typedef struct amqp_connection_start_ok_t_ {
-  amqp_table_t client_properties; /**< client-properties */
-  amqp_bytes_t mechanism;         /**< mechanism */
-  amqp_bytes_t response;          /**< response */
-  amqp_bytes_t locale;            /**< locale */
-} amqp_connection_start_ok_t;
-
-#define AMQP_CONNECTION_SECURE_METHOD                                 \
-  ((amqp_method_number_t)0x000A0014) /**< connection.secure method id \
-                                        @internal 10, 20; 655380 */
-/** connection.secure method fields */
-typedef struct amqp_connection_secure_t_ {
-  amqp_bytes_t challenge; /**< challenge */
-} amqp_connection_secure_t;
-
-#define AMQP_CONNECTION_SECURE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A0015) /**< connection.secure-ok method id \
-                                        @internal 10, 21; 655381 */
-/** connection.secure-ok method fields */
-typedef struct amqp_connection_secure_ok_t_ {
-  amqp_bytes_t response; /**< response */
-} amqp_connection_secure_ok_t;
-
-#define AMQP_CONNECTION_TUNE_METHOD                                 \
-  ((amqp_method_number_t)0x000A001E) /**< connection.tune method id \
-                                        @internal 10, 30; 655390 */
-/** connection.tune method fields */
-typedef struct amqp_connection_tune_t_ {
-  uint16_t channel_max; /**< channel-max */
-  uint32_t frame_max;   /**< frame-max */
-  uint16_t heartbeat;   /**< heartbeat */
-} amqp_connection_tune_t;
-
-#define AMQP_CONNECTION_TUNE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A001F) /**< connection.tune-ok method id \
-                                        @internal 10, 31; 655391 */
-/** connection.tune-ok method fields */
-typedef struct amqp_connection_tune_ok_t_ {
-  uint16_t channel_max; /**< channel-max */
-  uint32_t frame_max;   /**< frame-max */
-  uint16_t heartbeat;   /**< heartbeat */
-} amqp_connection_tune_ok_t;
-
-#define AMQP_CONNECTION_OPEN_METHOD                                 \
-  ((amqp_method_number_t)0x000A0028) /**< connection.open method id \
-                                        @internal 10, 40; 655400 */
-/** connection.open method fields */
-typedef struct amqp_connection_open_t_ {
-  amqp_bytes_t virtual_host; /**< virtual-host */
-  amqp_bytes_t capabilities; /**< capabilities */
-  amqp_boolean_t insist;     /**< insist */
-} amqp_connection_open_t;
-
-#define AMQP_CONNECTION_OPEN_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A0029) /**< connection.open-ok method id \
-                                        @internal 10, 41; 655401 */
-/** connection.open-ok method fields */
-typedef struct amqp_connection_open_ok_t_ {
-  amqp_bytes_t known_hosts; /**< known-hosts */
-} amqp_connection_open_ok_t;
-
-#define AMQP_CONNECTION_CLOSE_METHOD                                 \
-  ((amqp_method_number_t)0x000A0032) /**< connection.close method id \
-                                        @internal 10, 50; 655410 */
-/** connection.close method fields */
-typedef struct amqp_connection_close_t_ {
-  uint16_t reply_code;     /**< reply-code */
-  amqp_bytes_t reply_text; /**< reply-text */
-  uint16_t class_id;       /**< class-id */
-  uint16_t method_id;      /**< method-id */
-} amqp_connection_close_t;
-
-#define AMQP_CONNECTION_CLOSE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x000A0033) /**< connection.close-ok method id \
-                                        @internal 10, 51; 655411 */
-/** connection.close-ok method fields */
-typedef struct amqp_connection_close_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_connection_close_ok_t;
-
-#define AMQP_CONNECTION_BLOCKED_METHOD                                 \
-  ((amqp_method_number_t)0x000A003C) /**< connection.blocked method id \
-                                        @internal 10, 60; 655420 */
-/** connection.blocked method fields */
-typedef struct amqp_connection_blocked_t_ {
-  amqp_bytes_t reason; /**< reason */
-} amqp_connection_blocked_t;
-
-#define AMQP_CONNECTION_UNBLOCKED_METHOD                                 \
-  ((amqp_method_number_t)0x000A003D) /**< connection.unblocked method id \
-                                        @internal 10, 61; 655421 */
-/** connection.unblocked method fields */
-typedef struct amqp_connection_unblocked_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_connection_unblocked_t;
-
-#define AMQP_CHANNEL_OPEN_METHOD                                           \
-  ((amqp_method_number_t)0x0014000A) /**< channel.open method id @internal \
-                                        20, 10; 1310730 */
-/** channel.open method fields */
-typedef struct amqp_channel_open_t_ {
-  amqp_bytes_t out_of_band; /**< out-of-band */
-} amqp_channel_open_t;
-
-#define AMQP_CHANNEL_OPEN_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0014000B) /**< channel.open-ok method id \
-                                        @internal 20, 11; 1310731 */
-/** channel.open-ok method fields */
-typedef struct amqp_channel_open_ok_t_ {
-  amqp_bytes_t channel_id; /**< channel-id */
-} amqp_channel_open_ok_t;
-
-#define AMQP_CHANNEL_FLOW_METHOD                                           \
-  ((amqp_method_number_t)0x00140014) /**< channel.flow method id @internal \
-                                        20, 20; 1310740 */
-/** channel.flow method fields */
-typedef struct amqp_channel_flow_t_ {
-  amqp_boolean_t active; /**< active */
-} amqp_channel_flow_t;
-
-#define AMQP_CHANNEL_FLOW_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00140015) /**< channel.flow-ok method id \
-                                        @internal 20, 21; 1310741 */
-/** channel.flow-ok method fields */
-typedef struct amqp_channel_flow_ok_t_ {
-  amqp_boolean_t active; /**< active */
-} amqp_channel_flow_ok_t;
-
-#define AMQP_CHANNEL_CLOSE_METHOD                                           \
-  ((amqp_method_number_t)0x00140028) /**< channel.close method id @internal \
-                                        20, 40; 1310760 */
-/** channel.close method fields */
-typedef struct amqp_channel_close_t_ {
-  uint16_t reply_code;     /**< reply-code */
-  amqp_bytes_t reply_text; /**< reply-text */
-  uint16_t class_id;       /**< class-id */
-  uint16_t method_id;      /**< method-id */
-} amqp_channel_close_t;
-
-#define AMQP_CHANNEL_CLOSE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00140029) /**< channel.close-ok method id \
-                                        @internal 20, 41; 1310761 */
-/** channel.close-ok method fields */
-typedef struct amqp_channel_close_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_channel_close_ok_t;
-
-#define AMQP_ACCESS_REQUEST_METHOD                                           \
-  ((amqp_method_number_t)0x001E000A) /**< access.request method id @internal \
-                                        30, 10; 1966090 */
-/** access.request method fields */
-typedef struct amqp_access_request_t_ {
-  amqp_bytes_t realm;       /**< realm */
-  amqp_boolean_t exclusive; /**< exclusive */
-  amqp_boolean_t passive;   /**< passive */
-  amqp_boolean_t active;    /**< active */
-  amqp_boolean_t write;     /**< write */
-  amqp_boolean_t read;      /**< read */
-} amqp_access_request_t;
-
-#define AMQP_ACCESS_REQUEST_OK_METHOD                                 \
-  ((amqp_method_number_t)0x001E000B) /**< access.request-ok method id \
-                                        @internal 30, 11; 1966091 */
-/** access.request-ok method fields */
-typedef struct amqp_access_request_ok_t_ {
-  uint16_t ticket; /**< ticket */
-} amqp_access_request_ok_t;
-
-#define AMQP_EXCHANGE_DECLARE_METHOD                                 \
-  ((amqp_method_number_t)0x0028000A) /**< exchange.declare method id \
-                                        @internal 40, 10; 2621450 */
-/** exchange.declare method fields */
-typedef struct amqp_exchange_declare_t_ {
-  uint16_t ticket;            /**< ticket */
-  amqp_bytes_t exchange;      /**< exchange */
-  amqp_bytes_t type;          /**< type */
-  amqp_boolean_t passive;     /**< passive */
-  amqp_boolean_t durable;     /**< durable */
-  amqp_boolean_t auto_delete; /**< auto-delete */
-  amqp_boolean_t internal;    /**< internal */
-  amqp_boolean_t nowait;      /**< nowait */
-  amqp_table_t arguments;     /**< arguments */
-} amqp_exchange_declare_t;
-
-#define AMQP_EXCHANGE_DECLARE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0028000B) /**< exchange.declare-ok method id \
-                                        @internal 40, 11; 2621451 */
-/** exchange.declare-ok method fields */
-typedef struct amqp_exchange_declare_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_declare_ok_t;
-
-#define AMQP_EXCHANGE_DELETE_METHOD                                 \
-  ((amqp_method_number_t)0x00280014) /**< exchange.delete method id \
-                                        @internal 40, 20; 2621460 */
-/** exchange.delete method fields */
-typedef struct amqp_exchange_delete_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_boolean_t if_unused; /**< if-unused */
-  amqp_boolean_t nowait;    /**< nowait */
-} amqp_exchange_delete_t;
-
-#define AMQP_EXCHANGE_DELETE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00280015) /**< exchange.delete-ok method id \
-                                        @internal 40, 21; 2621461 */
-/** exchange.delete-ok method fields */
-typedef struct amqp_exchange_delete_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_delete_ok_t;
-
-#define AMQP_EXCHANGE_BIND_METHOD                                           \
-  ((amqp_method_number_t)0x0028001E) /**< exchange.bind method id @internal \
-                                        40, 30; 2621470 */
-/** exchange.bind method fields */
-typedef struct amqp_exchange_bind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t destination; /**< destination */
-  amqp_bytes_t source;      /**< source */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t nowait;    /**< nowait */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_exchange_bind_t;
-
-#define AMQP_EXCHANGE_BIND_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0028001F) /**< exchange.bind-ok method id \
-                                        @internal 40, 31; 2621471 */
-/** exchange.bind-ok method fields */
-typedef struct amqp_exchange_bind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_bind_ok_t;
-
-#define AMQP_EXCHANGE_UNBIND_METHOD                                 \
-  ((amqp_method_number_t)0x00280028) /**< exchange.unbind method id \
-                                        @internal 40, 40; 2621480 */
-/** exchange.unbind method fields */
-typedef struct amqp_exchange_unbind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t destination; /**< destination */
-  amqp_bytes_t source;      /**< source */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t nowait;    /**< nowait */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_exchange_unbind_t;
-
-#define AMQP_EXCHANGE_UNBIND_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00280033) /**< exchange.unbind-ok method id \
-                                        @internal 40, 51; 2621491 */
-/** exchange.unbind-ok method fields */
-typedef struct amqp_exchange_unbind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_exchange_unbind_ok_t;
-
-#define AMQP_QUEUE_DECLARE_METHOD                                           \
-  ((amqp_method_number_t)0x0032000A) /**< queue.declare method id @internal \
-                                        50, 10; 3276810 */
-/** queue.declare method fields */
-typedef struct amqp_queue_declare_t_ {
-  uint16_t ticket;            /**< ticket */
-  amqp_bytes_t queue;         /**< queue */
-  amqp_boolean_t passive;     /**< passive */
-  amqp_boolean_t durable;     /**< durable */
-  amqp_boolean_t exclusive;   /**< exclusive */
-  amqp_boolean_t auto_delete; /**< auto-delete */
-  amqp_boolean_t nowait;      /**< nowait */
-  amqp_table_t arguments;     /**< arguments */
-} amqp_queue_declare_t;
-
-#define AMQP_QUEUE_DECLARE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0032000B) /**< queue.declare-ok method id \
-                                        @internal 50, 11; 3276811 */
-/** queue.declare-ok method fields */
-typedef struct amqp_queue_declare_ok_t_ {
-  amqp_bytes_t queue;      /**< queue */
-  uint32_t message_count;  /**< message-count */
-  uint32_t consumer_count; /**< consumer-count */
-} amqp_queue_declare_ok_t;
-
-#define AMQP_QUEUE_BIND_METHOD                                               \
-  ((amqp_method_number_t)0x00320014) /**< queue.bind method id @internal 50, \
-                                        20; 3276820 */
-/** queue.bind method fields */
-typedef struct amqp_queue_bind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t queue;       /**< queue */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t nowait;    /**< nowait */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_queue_bind_t;
-
-#define AMQP_QUEUE_BIND_OK_METHOD                                           \
-  ((amqp_method_number_t)0x00320015) /**< queue.bind-ok method id @internal \
-                                        50, 21; 3276821 */
-/** queue.bind-ok method fields */
-typedef struct amqp_queue_bind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_queue_bind_ok_t;
-
-#define AMQP_QUEUE_PURGE_METHOD                                           \
-  ((amqp_method_number_t)0x0032001E) /**< queue.purge method id @internal \
-                                        50, 30; 3276830 */
-/** queue.purge method fields */
-typedef struct amqp_queue_purge_t_ {
-  uint16_t ticket;       /**< ticket */
-  amqp_bytes_t queue;    /**< queue */
-  amqp_boolean_t nowait; /**< nowait */
-} amqp_queue_purge_t;
-
-#define AMQP_QUEUE_PURGE_OK_METHOD                                           \
-  ((amqp_method_number_t)0x0032001F) /**< queue.purge-ok method id @internal \
-                                        50, 31; 3276831 */
-/** queue.purge-ok method fields */
-typedef struct amqp_queue_purge_ok_t_ {
-  uint32_t message_count; /**< message-count */
-} amqp_queue_purge_ok_t;
-
-#define AMQP_QUEUE_DELETE_METHOD                                           \
-  ((amqp_method_number_t)0x00320028) /**< queue.delete method id @internal \
-                                        50, 40; 3276840 */
-/** queue.delete method fields */
-typedef struct amqp_queue_delete_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t queue;       /**< queue */
-  amqp_boolean_t if_unused; /**< if-unused */
-  amqp_boolean_t if_empty;  /**< if-empty */
-  amqp_boolean_t nowait;    /**< nowait */
-} amqp_queue_delete_t;
-
-#define AMQP_QUEUE_DELETE_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00320029) /**< queue.delete-ok method id \
-                                        @internal 50, 41; 3276841 */
-/** queue.delete-ok method fields */
-typedef struct amqp_queue_delete_ok_t_ {
-  uint32_t message_count; /**< message-count */
-} amqp_queue_delete_ok_t;
-
-#define AMQP_QUEUE_UNBIND_METHOD                                           \
-  ((amqp_method_number_t)0x00320032) /**< queue.unbind method id @internal \
-                                        50, 50; 3276850 */
-/** queue.unbind method fields */
-typedef struct amqp_queue_unbind_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t queue;       /**< queue */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_table_t arguments;   /**< arguments */
-} amqp_queue_unbind_t;
-
-#define AMQP_QUEUE_UNBIND_OK_METHOD                                 \
-  ((amqp_method_number_t)0x00320033) /**< queue.unbind-ok method id \
-                                        @internal 50, 51; 3276851 */
-/** queue.unbind-ok method fields */
-typedef struct amqp_queue_unbind_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_queue_unbind_ok_t;
-
-#define AMQP_BASIC_QOS_METHOD                                               \
-  ((amqp_method_number_t)0x003C000A) /**< basic.qos method id @internal 60, \
-                                        10; 3932170 */
-/** basic.qos method fields */
-typedef struct amqp_basic_qos_t_ {
-  uint32_t prefetch_size;  /**< prefetch-size */
-  uint16_t prefetch_count; /**< prefetch-count */
-  amqp_boolean_t global;   /**< global */
-} amqp_basic_qos_t;
-
-#define AMQP_BASIC_QOS_OK_METHOD                                           \
-  ((amqp_method_number_t)0x003C000B) /**< basic.qos-ok method id @internal \
-                                        60, 11; 3932171 */
-/** basic.qos-ok method fields */
-typedef struct amqp_basic_qos_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_basic_qos_ok_t;
-
-#define AMQP_BASIC_CONSUME_METHOD                                           \
-  ((amqp_method_number_t)0x003C0014) /**< basic.consume method id @internal \
-                                        60, 20; 3932180 */
-/** basic.consume method fields */
-typedef struct amqp_basic_consume_t_ {
-  uint16_t ticket;           /**< ticket */
-  amqp_bytes_t queue;        /**< queue */
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-  amqp_boolean_t no_local;   /**< no-local */
-  amqp_boolean_t no_ack;     /**< no-ack */
-  amqp_boolean_t exclusive;  /**< exclusive */
-  amqp_boolean_t nowait;     /**< nowait */
-  amqp_table_t arguments;    /**< arguments */
-} amqp_basic_consume_t;
-
-#define AMQP_BASIC_CONSUME_OK_METHOD                                 \
-  ((amqp_method_number_t)0x003C0015) /**< basic.consume-ok method id \
-                                        @internal 60, 21; 3932181 */
-/** basic.consume-ok method fields */
-typedef struct amqp_basic_consume_ok_t_ {
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-} amqp_basic_consume_ok_t;
-
-#define AMQP_BASIC_CANCEL_METHOD                                           \
-  ((amqp_method_number_t)0x003C001E) /**< basic.cancel method id @internal \
-                                        60, 30; 3932190 */
-/** basic.cancel method fields */
-typedef struct amqp_basic_cancel_t_ {
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-  amqp_boolean_t nowait;     /**< nowait */
-} amqp_basic_cancel_t;
-
-#define AMQP_BASIC_CANCEL_OK_METHOD                                 \
-  ((amqp_method_number_t)0x003C001F) /**< basic.cancel-ok method id \
-                                        @internal 60, 31; 3932191 */
-/** basic.cancel-ok method fields */
-typedef struct amqp_basic_cancel_ok_t_ {
-  amqp_bytes_t consumer_tag; /**< consumer-tag */
-} amqp_basic_cancel_ok_t;
-
-#define AMQP_BASIC_PUBLISH_METHOD                                           \
-  ((amqp_method_number_t)0x003C0028) /**< basic.publish method id @internal \
-                                        60, 40; 3932200 */
-/** basic.publish method fields */
-typedef struct amqp_basic_publish_t_ {
-  uint16_t ticket;          /**< ticket */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-  amqp_boolean_t mandatory; /**< mandatory */
-  amqp_boolean_t immediate; /**< immediate */
-} amqp_basic_publish_t;
-
-#define AMQP_BASIC_RETURN_METHOD                                           \
-  ((amqp_method_number_t)0x003C0032) /**< basic.return method id @internal \
-                                        60, 50; 3932210 */
-/** basic.return method fields */
-typedef struct amqp_basic_return_t_ {
-  uint16_t reply_code;      /**< reply-code */
-  amqp_bytes_t reply_text;  /**< reply-text */
-  amqp_bytes_t exchange;    /**< exchange */
-  amqp_bytes_t routing_key; /**< routing-key */
-} amqp_basic_return_t;
-
-#define AMQP_BASIC_DELIVER_METHOD                                           \
-  ((amqp_method_number_t)0x003C003C) /**< basic.deliver method id @internal \
-                                        60, 60; 3932220 */
-/** basic.deliver method fields */
-typedef struct amqp_basic_deliver_t_ {
-  amqp_bytes_t consumer_tag;  /**< consumer-tag */
-  uint64_t delivery_tag;      /**< delivery-tag */
-  amqp_boolean_t redelivered; /**< redelivered */
-  amqp_bytes_t exchange;      /**< exchange */
-  amqp_bytes_t routing_key;   /**< routing-key */
-} amqp_basic_deliver_t;
-
-#define AMQP_BASIC_GET_METHOD                                               \
-  ((amqp_method_number_t)0x003C0046) /**< basic.get method id @internal 60, \
-                                        70; 3932230 */
-/** basic.get method fields */
-typedef struct amqp_basic_get_t_ {
-  uint16_t ticket;       /**< ticket */
-  amqp_bytes_t queue;    /**< queue */
-  amqp_boolean_t no_ack; /**< no-ack */
-} amqp_basic_get_t;
-
-#define AMQP_BASIC_GET_OK_METHOD                                           \
-  ((amqp_method_number_t)0x003C0047) /**< basic.get-ok method id @internal \
-                                        60, 71; 3932231 */
-/** basic.get-ok method fields */
-typedef struct amqp_basic_get_ok_t_ {
-  uint64_t delivery_tag;      /**< delivery-tag */
-  amqp_boolean_t redelivered; /**< redelivered */
-  amqp_bytes_t exchange;      /**< exchange */
-  amqp_bytes_t routing_key;   /**< routing-key */
-  uint32_t message_count;     /**< message-count */
-} amqp_basic_get_ok_t;
-
-#define AMQP_BASIC_GET_EMPTY_METHOD                                 \
-  ((amqp_method_number_t)0x003C0048) /**< basic.get-empty method id \
-                                        @internal 60, 72; 3932232 */
-/** basic.get-empty method fields */
-typedef struct amqp_basic_get_empty_t_ {
-  amqp_bytes_t cluster_id; /**< cluster-id */
-} amqp_basic_get_empty_t;
-
-#define AMQP_BASIC_ACK_METHOD                                               \
-  ((amqp_method_number_t)0x003C0050) /**< basic.ack method id @internal 60, \
-                                        80; 3932240 */
-/** basic.ack method fields */
-typedef struct amqp_basic_ack_t_ {
-  uint64_t delivery_tag;   /**< delivery-tag */
-  amqp_boolean_t multiple; /**< multiple */
-} amqp_basic_ack_t;
-
-#define AMQP_BASIC_REJECT_METHOD                                           \
-  ((amqp_method_number_t)0x003C005A) /**< basic.reject method id @internal \
-                                        60, 90; 3932250 */
-/** basic.reject method fields */
-typedef struct amqp_basic_reject_t_ {
-  uint64_t delivery_tag;  /**< delivery-tag */
-  amqp_boolean_t requeue; /**< requeue */
-} amqp_basic_reject_t;
-
-#define AMQP_BASIC_RECOVER_ASYNC_METHOD                                 \
-  ((amqp_method_number_t)0x003C0064) /**< basic.recover-async method id \
-                                        @internal 60, 100; 3932260 */
-/** basic.recover-async method fields */
-typedef struct amqp_basic_recover_async_t_ {
-  amqp_boolean_t requeue; /**< requeue */
-} amqp_basic_recover_async_t;
-
-#define AMQP_BASIC_RECOVER_METHOD                                           \
-  ((amqp_method_number_t)0x003C006E) /**< basic.recover method id @internal \
-                                        60, 110; 3932270 */
-/** basic.recover method fields */
-typedef struct amqp_basic_recover_t_ {
-  amqp_boolean_t requeue; /**< requeue */
-} amqp_basic_recover_t;
-
-#define AMQP_BASIC_RECOVER_OK_METHOD                                 \
-  ((amqp_method_number_t)0x003C006F) /**< basic.recover-ok method id \
-                                        @internal 60, 111; 3932271 */
-/** basic.recover-ok method fields */
-typedef struct amqp_basic_recover_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_basic_recover_ok_t;
-
-#define AMQP_BASIC_NACK_METHOD                                               \
-  ((amqp_method_number_t)0x003C0078) /**< basic.nack method id @internal 60, \
-                                        120; 3932280 */
-/** basic.nack method fields */
-typedef struct amqp_basic_nack_t_ {
-  uint64_t delivery_tag;   /**< delivery-tag */
-  amqp_boolean_t multiple; /**< multiple */
-  amqp_boolean_t requeue;  /**< requeue */
-} amqp_basic_nack_t;
-
-#define AMQP_TX_SELECT_METHOD                                               \
-  ((amqp_method_number_t)0x005A000A) /**< tx.select method id @internal 90, \
-                                        10; 5898250 */
-/** tx.select method fields */
-typedef struct amqp_tx_select_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_select_t;
-
-#define AMQP_TX_SELECT_OK_METHOD                                           \
-  ((amqp_method_number_t)0x005A000B) /**< tx.select-ok method id @internal \
-                                        90, 11; 5898251 */
-/** tx.select-ok method fields */
-typedef struct amqp_tx_select_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_select_ok_t;
-
-#define AMQP_TX_COMMIT_METHOD                                               \
-  ((amqp_method_number_t)0x005A0014) /**< tx.commit method id @internal 90, \
-                                        20; 5898260 */
-/** tx.commit method fields */
-typedef struct amqp_tx_commit_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_commit_t;
-
-#define AMQP_TX_COMMIT_OK_METHOD                                           \
-  ((amqp_method_number_t)0x005A0015) /**< tx.commit-ok method id @internal \
-                                        90, 21; 5898261 */
-/** tx.commit-ok method fields */
-typedef struct amqp_tx_commit_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_commit_ok_t;
-
-#define AMQP_TX_ROLLBACK_METHOD                                           \
-  ((amqp_method_number_t)0x005A001E) /**< tx.rollback method id @internal \
-                                        90, 30; 5898270 */
-/** tx.rollback method fields */
-typedef struct amqp_tx_rollback_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_rollback_t;
-
-#define AMQP_TX_ROLLBACK_OK_METHOD                                           \
-  ((amqp_method_number_t)0x005A001F) /**< tx.rollback-ok method id @internal \
-                                        90, 31; 5898271 */
-/** tx.rollback-ok method fields */
-typedef struct amqp_tx_rollback_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_tx_rollback_ok_t;
-
-#define AMQP_CONFIRM_SELECT_METHOD                                           \
-  ((amqp_method_number_t)0x0055000A) /**< confirm.select method id @internal \
-                                        85, 10; 5570570 */
-/** confirm.select method fields */
-typedef struct amqp_confirm_select_t_ {
-  amqp_boolean_t nowait; /**< nowait */
-} amqp_confirm_select_t;
-
-#define AMQP_CONFIRM_SELECT_OK_METHOD                                 \
-  ((amqp_method_number_t)0x0055000B) /**< confirm.select-ok method id \
-                                        @internal 85, 11; 5570571 */
-/** confirm.select-ok method fields */
-typedef struct amqp_confirm_select_ok_t_ {
-  char dummy; /**< Dummy field to avoid empty struct */
-} amqp_confirm_select_ok_t;
-
-/* Class property records. */
-#define AMQP_CONNECTION_CLASS                    \
-  (0x000A) /**< connection class id @internal 10 \
-              */
-/** connection class properties */
-typedef struct amqp_connection_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_connection_properties_t;
-
-#define AMQP_CHANNEL_CLASS (0x0014) /**< channel class id @internal 20 */
-/** channel class properties */
-typedef struct amqp_channel_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_channel_properties_t;
-
-#define AMQP_ACCESS_CLASS (0x001E) /**< access class id @internal 30 */
-/** access class properties */
-typedef struct amqp_access_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_access_properties_t;
-
-#define AMQP_EXCHANGE_CLASS (0x0028) /**< exchange class id @internal 40 */
-/** exchange class properties */
-typedef struct amqp_exchange_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_exchange_properties_t;
-
-#define AMQP_QUEUE_CLASS (0x0032) /**< queue class id @internal 50 */
-/** queue class properties */
-typedef struct amqp_queue_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_queue_properties_t;
-
-#define AMQP_BASIC_CLASS (0x003C) /**< basic class id @internal 60 */
-#define AMQP_BASIC_CONTENT_TYPE_FLAG (1 << 15)
-#define AMQP_BASIC_CONTENT_ENCODING_FLAG (1 << 14)
-#define AMQP_BASIC_HEADERS_FLAG (1 << 13)
-#define AMQP_BASIC_DELIVERY_MODE_FLAG (1 << 12)
-#define AMQP_BASIC_PRIORITY_FLAG (1 << 11)
-#define AMQP_BASIC_CORRELATION_ID_FLAG (1 << 10)
-#define AMQP_BASIC_REPLY_TO_FLAG (1 << 9)
-#define AMQP_BASIC_EXPIRATION_FLAG (1 << 8)
-#define AMQP_BASIC_MESSAGE_ID_FLAG (1 << 7)
-#define AMQP_BASIC_TIMESTAMP_FLAG (1 << 6)
-#define AMQP_BASIC_TYPE_FLAG (1 << 5)
-#define AMQP_BASIC_USER_ID_FLAG (1 << 4)
-#define AMQP_BASIC_APP_ID_FLAG (1 << 3)
-#define AMQP_BASIC_CLUSTER_ID_FLAG (1 << 2)
-/** basic class properties */
-typedef struct amqp_basic_properties_t_ {
-  amqp_flags_t _flags;           /**< bit-mask of set fields */
-  amqp_bytes_t content_type;     /**< content-type */
-  amqp_bytes_t content_encoding; /**< content-encoding */
-  amqp_table_t headers;          /**< headers */
-  uint8_t delivery_mode;         /**< delivery-mode */
-  uint8_t priority;              /**< priority */
-  amqp_bytes_t correlation_id;   /**< correlation-id */
-  amqp_bytes_t reply_to;         /**< reply-to */
-  amqp_bytes_t expiration;       /**< expiration */
-  amqp_bytes_t message_id;       /**< message-id */
-  uint64_t timestamp;            /**< timestamp */
-  amqp_bytes_t type;             /**< type */
-  amqp_bytes_t user_id;          /**< user-id */
-  amqp_bytes_t app_id;           /**< app-id */
-  amqp_bytes_t cluster_id;       /**< cluster-id */
-} amqp_basic_properties_t;
-
-#define AMQP_TX_CLASS (0x005A) /**< tx class id @internal 90 */
-/** tx class properties */
-typedef struct amqp_tx_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_tx_properties_t;
-
-#define AMQP_CONFIRM_CLASS (0x0055) /**< confirm class id @internal 85 */
-/** confirm class properties */
-typedef struct amqp_confirm_properties_t_ {
-  amqp_flags_t _flags; /**< bit-mask of set fields */
-  char dummy;          /**< Dummy field to avoid empty struct */
-} amqp_confirm_properties_t;
-
-/* API functions for methods */
-
-/**
- * amqp_channel_open
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_channel_open_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_channel_open_ok_t *AMQP_CALL
-    amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel);
-/**
- * amqp_channel_flow
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] active active
- * @returns amqp_channel_flow_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_channel_flow_ok_t *AMQP_CALL
-    amqp_channel_flow(amqp_connection_state_t state, amqp_channel_t channel,
-                      amqp_boolean_t active);
-/**
- * amqp_exchange_declare
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] exchange exchange
- * @param [in] type type
- * @param [in] passive passive
- * @param [in] durable durable
- * @param [in] auto_delete auto_delete
- * @param [in] internal internal
- * @param [in] arguments arguments
- * @returns amqp_exchange_declare_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_declare_ok_t *AMQP_CALL amqp_exchange_declare(
-    amqp_connection_state_t state, amqp_channel_t channel,
-    amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive,
-    amqp_boolean_t durable, amqp_boolean_t auto_delete, amqp_boolean_t internal,
-    amqp_table_t arguments);
-/**
- * amqp_exchange_delete
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] exchange exchange
- * @param [in] if_unused if_unused
- * @returns amqp_exchange_delete_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_delete_ok_t *AMQP_CALL
-    amqp_exchange_delete(amqp_connection_state_t state, amqp_channel_t channel,
-                         amqp_bytes_t exchange, amqp_boolean_t if_unused);
-/**
- * amqp_exchange_bind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] destination destination
- * @param [in] source source
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_exchange_bind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_bind_ok_t *AMQP_CALL
-    amqp_exchange_bind(amqp_connection_state_t state, amqp_channel_t channel,
-                       amqp_bytes_t destination, amqp_bytes_t source,
-                       amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_exchange_unbind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] destination destination
- * @param [in] source source
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_exchange_unbind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_exchange_unbind_ok_t *AMQP_CALL
-    amqp_exchange_unbind(amqp_connection_state_t state, amqp_channel_t channel,
-                         amqp_bytes_t destination, amqp_bytes_t source,
-                         amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_queue_declare
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] passive passive
- * @param [in] durable durable
- * @param [in] exclusive exclusive
- * @param [in] auto_delete auto_delete
- * @param [in] arguments arguments
- * @returns amqp_queue_declare_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_declare_ok_t *AMQP_CALL amqp_queue_declare(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive,
-    amqp_boolean_t auto_delete, amqp_table_t arguments);
-/**
- * amqp_queue_bind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] exchange exchange
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_queue_bind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_bind_ok_t *AMQP_CALL amqp_queue_bind(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_queue_purge
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @returns amqp_queue_purge_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_purge_ok_t *AMQP_CALL amqp_queue_purge(amqp_connection_state_t state,
-                                                  amqp_channel_t channel,
-                                                  amqp_bytes_t queue);
-/**
- * amqp_queue_delete
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] if_unused if_unused
- * @param [in] if_empty if_empty
- * @returns amqp_queue_delete_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_delete_ok_t *AMQP_CALL amqp_queue_delete(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_boolean_t if_unused, amqp_boolean_t if_empty);
-/**
- * amqp_queue_unbind
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] exchange exchange
- * @param [in] routing_key routing_key
- * @param [in] arguments arguments
- * @returns amqp_queue_unbind_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_queue_unbind_ok_t *AMQP_CALL amqp_queue_unbind(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments);
-/**
- * amqp_basic_qos
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] prefetch_size prefetch_size
- * @param [in] prefetch_count prefetch_count
- * @param [in] global global
- * @returns amqp_basic_qos_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_qos_ok_t *AMQP_CALL amqp_basic_qos(amqp_connection_state_t state,
-                                              amqp_channel_t channel,
-                                              uint32_t prefetch_size,
-                                              uint16_t prefetch_count,
-                                              amqp_boolean_t global);
-/**
- * amqp_basic_consume
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] queue queue
- * @param [in] consumer_tag consumer_tag
- * @param [in] no_local no_local
- * @param [in] no_ack no_ack
- * @param [in] exclusive exclusive
- * @param [in] arguments arguments
- * @returns amqp_basic_consume_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_consume_ok_t *AMQP_CALL amqp_basic_consume(
-    amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue,
-    amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack,
-    amqp_boolean_t exclusive, amqp_table_t arguments);
-/**
- * amqp_basic_cancel
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] consumer_tag consumer_tag
- * @returns amqp_basic_cancel_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_cancel_ok_t *AMQP_CALL
-    amqp_basic_cancel(amqp_connection_state_t state, amqp_channel_t channel,
-                      amqp_bytes_t consumer_tag);
-/**
- * amqp_basic_recover
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @param [in] requeue requeue
- * @returns amqp_basic_recover_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_basic_recover_ok_t *AMQP_CALL
-    amqp_basic_recover(amqp_connection_state_t state, amqp_channel_t channel,
-                       amqp_boolean_t requeue);
-/**
- * amqp_tx_select
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_tx_select_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_tx_select_ok_t *AMQP_CALL amqp_tx_select(amqp_connection_state_t state,
-                                              amqp_channel_t channel);
-/**
- * amqp_tx_commit
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_tx_commit_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_tx_commit_ok_t *AMQP_CALL amqp_tx_commit(amqp_connection_state_t state,
-                                              amqp_channel_t channel);
-/**
- * amqp_tx_rollback
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_tx_rollback_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_tx_rollback_ok_t *AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state,
-                                                  amqp_channel_t channel);
-/**
- * amqp_confirm_select
- *
- * @param [in] state connection state
- * @param [in] channel the channel to do the RPC on
- * @returns amqp_confirm_select_ok_t
- */
-AMQP_PUBLIC_FUNCTION
-amqp_confirm_select_ok_t *AMQP_CALL
-    amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel);
-
-AMQP_END_DECLS
-
-#endif /* AMQP_FRAMING_H */

+ 0 - 68
ext/librabbitmq/macos/include/amqp_tcp_socket.h

@@ -1,68 +0,0 @@
-/** \file */
-/*
- * Portions created by Alan Antonuk are Copyright (c) 2013-2014 Alan Antonuk.
- * All Rights Reserved.
- *
- * Portions created by Michael Steinert are Copyright (c) 2012-2013 Michael
- * Steinert. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * A TCP socket connection.
- */
-
-#ifndef AMQP_TCP_SOCKET_H
-#define AMQP_TCP_SOCKET_H
-
-#include <amqp.h>
-
-AMQP_BEGIN_DECLS
-
-/**
- * Create a new TCP socket.
- *
- * Call amqp_connection_close() to release socket resources.
- *
- * \return A new socket object or NULL if an error occurred.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-amqp_socket_t *AMQP_CALL amqp_tcp_socket_new(amqp_connection_state_t state);
-
-/**
- * Assign an open file descriptor to a socket object.
- *
- * This function must not be used in conjunction with amqp_socket_open(), i.e.
- * the socket connection should already be open(2) when this function is
- * called.
- *
- * \param [in,out] self A TCP socket object.
- * \param [in] sockfd An open socket descriptor.
- *
- * \since v0.4.0
- */
-AMQP_PUBLIC_FUNCTION
-void AMQP_CALL amqp_tcp_socket_set_sockfd(amqp_socket_t *self, int sockfd);
-
-AMQP_END_DECLS
-
-#endif /* AMQP_TCP_SOCKET_H */

BIN
ext/librabbitmq/macos/lib/librabbitmq.a


+ 2 - 2
make-linux.mk

@@ -261,9 +261,9 @@ ifeq ($(ZT_OFFICIAL),1)
 endif
 
 ifeq ($(ZT_CONTROLLER),1)
-	LDLIBS+=-L/usr/pgsql-10/lib/ -lpq -Lext/librabbitmq/centos_x64/lib/ -lrabbitmq
+	LDLIBS+=-L/usr/pgsql-10/lib/ -lpq
 	DEFS+=-DZT_CONTROLLER_USE_LIBPQ
-	INCLUDES+=-Iext/librabbitmq/macos/include -I/usr/pgsql-10/include -Iext/hiredis-vip-0.3.0
+	INCLUDES+=-I/usr/pgsql-10/include -Iext/hiredis-vip-0.3.0
 	ONE_OBJS+=ext/hiredis-vip-0.3.0/adlist.o ext/hiredis-vip-0.3.0/async.o ext/hiredis-vip-0.3.0/command.o ext/hiredis-vip-0.3.0/crc16.o ext/hiredis-vip-0.3.0/dict.o ext/hiredis-vip-0.3.0/hiarray.o ext/hiredis-vip-0.3.0/hircluster.o ext/hiredis-vip-0.3.0/hiredis.o ext/hiredis-vip-0.3.0/hiutil.o ext/hiredis-vip-0.3.0/net.o ext/hiredis-vip-0.3.0/read.o ext/hiredis-vip-0.3.0/sds.o
 endif
 

+ 2 - 2
make-mac.mk

@@ -28,9 +28,9 @@ include objects.mk
 ONE_OBJS+=osdep/MacEthernetTap.o osdep/MacKextEthernetTap.o ext/http-parser/http_parser.o
 
 ifeq ($(ZT_CONTROLLER),1)
-	LIBS+=-L/usr/local/opt/libpq/lib -lpq -Lext/librabbitmq/macos/lib -lrabbitmq
+	LIBS+=-L/usr/local/opt/libpq/lib -lpq
 	DEFS+=-DZT_CONTROLLER_USE_LIBPQ -DZT_CONTROLLER
-	INCLUDES+=-Iext/librabbitmq/macos/include -I/usr/local/opt/libpq/include -Iext/hiredis-vip-0.3.0
+	INCLUDES+=-I/usr/local/opt/libpq/include -Iext/hiredis-vip-0.3.0
 	ONE_OBJS+=ext/hiredis-vip-0.3.0/adlist.o ext/hiredis-vip-0.3.0/async.o ext/hiredis-vip-0.3.0/command.o ext/hiredis-vip-0.3.0/crc16.o ext/hiredis-vip-0.3.0/dict.o ext/hiredis-vip-0.3.0/hiarray.o ext/hiredis-vip-0.3.0/hircluster.o ext/hiredis-vip-0.3.0/hiredis.o ext/hiredis-vip-0.3.0/hiutil.o ext/hiredis-vip-0.3.0/net.o ext/hiredis-vip-0.3.0/read.o ext/hiredis-vip-0.3.0/sds.o
 endif
 

+ 0 - 1
objects.mk

@@ -33,7 +33,6 @@ ONE_OBJS=\
 	controller/FileDB.o \
 	controller/LFDB.o \
 	controller/PostgreSQL.o \
-	controller/RabbitMQ.o \
 	osdep/EthernetTap.o \
 	osdep/ManagedRoute.o \
 	osdep/Http.o \

+ 2 - 15
service/OneService.cpp

@@ -86,7 +86,6 @@ extern "C" {
 using json = nlohmann::json;
 
 #include "../controller/EmbeddedNetworkController.hpp"
-#include "../controller/RabbitMQ.hpp"
 #include "../osdep/EthernetTap.hpp"
 #ifdef __WINDOWS__
 #include "../osdep/WindowsEthernetTap.hpp"
@@ -525,8 +524,6 @@ public:
 	volatile bool _run;
 	Mutex _run_m;
 
-	MQConfig *_mqc;
-
 	// end member variables ----------------------------------------------------
 
 	OneServiceImpl(const char *hp,unsigned int port) :
@@ -562,7 +559,6 @@ public:
 		,_vaultPath("cubbyhole/zerotier")
 #endif
 		,_run(true)
-		,_mqc(NULL)
 	{
 		_ports[0] = 0;
 		_ports[1] = 0;
@@ -587,7 +583,6 @@ public:
 		delete _portMapper;
 #endif
 		delete _controller;
-		delete _mqc;
 	}
 
 	virtual ReasonForTermination run()
@@ -727,7 +722,7 @@ public:
 			OSUtils::rmDashRf((_homePath + ZT_PATH_SEPARATOR_S "iddb.d").c_str());
 
 			// Network controller is now enabled by default for desktop and server
-			_controller = new EmbeddedNetworkController(_node,_homePath.c_str(),_controllerDbPath.c_str(),_ports[0], _mqc);
+			_controller = new EmbeddedNetworkController(_node,_homePath.c_str(),_controllerDbPath.c_str(),_ports[0]);
 			_node->setNetconfMaster((void *)_controller);
 
 			// Join existing networks in networks.d
@@ -991,15 +986,7 @@ public:
 			if (cdbp.length() > 0)
 				_controllerDbPath = cdbp;
 
-			json &rmq = settings["rabbitmq"];
-			if (rmq.is_object() && _mqc == NULL) {
-				fprintf(stderr, "Reading RabbitMQ Config\n");
-				_mqc = new MQConfig;
-				_mqc->port = rmq["port"];
-				_mqc->host = OSUtils::jsonString(rmq["host"], "");
-				_mqc->username = OSUtils::jsonString(rmq["username"], "");
-				_mqc->password = OSUtils::jsonString(rmq["password"], "");
-			}
+			// TODO:  Redis config
 
 			// Bind to wildcard instead of to specific interfaces (disables full tunnel capability)
 			json &bind = settings["bind"];