summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt159
-rw-r--r--Makefile.am39
-rw-r--r--configure.ac34
-rw-r--r--librabbitmq/CMakeLists.txt96
-rw-r--r--librabbitmq/amqp_framing.c2071
-rw-r--r--librabbitmq/amqp_framing.h627
-rw-r--r--librabbitmq/codegen.py4
-rw-r--r--tools/CMakeLists.txt2
9 files changed, 2885 insertions, 149 deletions
diff --git a/.gitignore b/.gitignore
index 592f54e..8f2d1cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,8 +33,6 @@ examples/amqp_rpc_sendstring_client
examples/amqp_sendstring
examples/amqp_unbind
librabbitmq.pc
-librabbitmq/amqp_framing.c
-librabbitmq/amqp_framing.h
tests/test_parse_url
tests/test_tables
tools/amqp-consume
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 250ed30..9ed5b8e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -95,97 +95,104 @@ set(CMAKE_REQUIRED_LIBRARIES ${SOCKET_LIBRARIES})
check_function_exists(htonll HAVE_HTONLL)
cmake_pop_check_state()
-find_package(PythonInterp REQUIRED)
-#Determine Python Version:
-if(PYTHON_EXECUTABLE)
- execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
- "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
- OUTPUT_VARIABLE _VERSION
- RESULT_VARIABLE _PYTHON_VERSION_RESULT
- ERROR_QUIET)
- if(NOT _PYTHON_VERSION_RESULT)
- string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}")
- list(GET _VERSION 0 PYTHON_VERSION_MAJOR)
- list(GET _VERSION 1 PYTHON_VERSION_MINOR)
- list(GET _VERSION 2 PYTHON_VERSION_PATCH)
- if(PYTHON_VERSION_PATCH EQUAL 0)
- # it's called "Python 2.7", not "2.7.0"
- string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
- endif()
- else()
- # sys.version predates sys.version_info, so use that
- execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)"
+option(REGENERATE_AMQP_FRAMING "Regenerate amqp_framing.h/amqp_framing.c sources (for developer use)" OFF)
+mark_as_advanced(REGENERATE_AMQP_FRAMING)
+
+if (REGENERATE_AMQP_FRAMING)
+ find_package(PythonInterp)
+ if (NOT PYTHONINTERP_FOUND)
+ message(FATAL_ERROR "REGENERATE_AMQP_FRAMING requires Python to be available")
+ endif ()
+
+ #Determine Python Version:
+ if(PYTHON_EXECUTABLE)
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
+ "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
OUTPUT_VARIABLE _VERSION
RESULT_VARIABLE _PYTHON_VERSION_RESULT
ERROR_QUIET)
if(NOT _PYTHON_VERSION_RESULT)
- string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}")
- string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
- string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
- if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*")
- string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}")
- else()
- set(PYTHON_VERSION_PATCH "0")
+ string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}")
+ list(GET _VERSION 0 PYTHON_VERSION_MAJOR)
+ list(GET _VERSION 1 PYTHON_VERSION_MINOR)
+ list(GET _VERSION 2 PYTHON_VERSION_PATCH)
+ if(PYTHON_VERSION_PATCH EQUAL 0)
+ # it's called "Python 2.7", not "2.7.0"
+ string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
endif()
else()
- # sys.version was first documented for Python 1.5, so assume
- # this is older.
- set(PYTHON_VERSION_STRING "1.4")
- set(PYTHON_VERSION_MAJOR "1")
- set(PYTHON_VERSION_MAJOR "4")
- set(PYTHON_VERSION_MAJOR "0")
+ # sys.version predates sys.version_info, so use that
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)"
+ OUTPUT_VARIABLE _VERSION
+ RESULT_VARIABLE _PYTHON_VERSION_RESULT
+ ERROR_QUIET)
+ if(NOT _PYTHON_VERSION_RESULT)
+ string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}")
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
+ string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
+ if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*")
+ string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}")
+ else()
+ set(PYTHON_VERSION_PATCH "0")
+ endif()
+ else()
+ # sys.version was first documented for Python 1.5, so assume
+ # this is older.
+ set(PYTHON_VERSION_STRING "1.4")
+ set(PYTHON_VERSION_MAJOR "1")
+ set(PYTHON_VERSION_MAJOR "4")
+ set(PYTHON_VERSION_MAJOR "0")
+ endif()
endif()
- endif()
- unset(_PYTHON_VERSION_RESULT)
- unset(_VERSION)
-endif(PYTHON_EXECUTABLE)
-
-# If we're running v3.x look for a 2to3 utility
-if (PYTHON_VERSION_MAJOR GREATER 2)
- get_filename_component(PYTHON_EXE_DIR ${PYTHON_EXECUTABLE} PATH)
- find_program(PYTHON_2TO3_EXECUTABLE
- NAMES 2to3
- HINTS ${PYTHON_EXE_DIR}
- )
-
- if ("PYTHON_2TO3_EXECUTABLE-NOTFOUND" STREQUAL PYTHON_2TO3_EXECUTABLE)
- message(FATAL_ERROR "Unable to find 2to3 python utility, specify python 2.7 or specify 2to3 utility")
- endif ()
-endif ()
-
+ unset(_PYTHON_VERSION_RESULT)
+ unset(_VERSION)
+ endif(PYTHON_EXECUTABLE)
+
+ # If we're running v3.x look for a 2to3 utility
+ if (PYTHON_VERSION_MAJOR GREATER 2)
+ get_filename_component(PYTHON_EXE_DIR ${PYTHON_EXECUTABLE} PATH)
+ find_program(PYTHON_2TO3_EXECUTABLE
+ NAMES 2to3
+ HINTS ${PYTHON_EXE_DIR}
+ )
+
+ if ("PYTHON_2TO3_EXECUTABLE-NOTFOUND" STREQUAL PYTHON_2TO3_EXECUTABLE)
+ message(FATAL_ERROR "Unable to find 2to3 python utility, specify python 2.7 or specify 2to3 utility")
+ endif ()
+ endif (PYTHON_VERSION_MAJOR GREATER 2)
-#check for json or simplejson
-execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import json"
- RESULT_VARIABLE CHECK_PYTHON_JSON_FAILED
-)
-if (CHECK_PYTHON_JSON_FAILED)
- execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import simplejson"
- RESULT_VARIABLE CHECK_PYTHON_SIMPLEJSON_FAILED
+ #check for json or simplejson
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import json"
+ RESULT_VARIABLE CHECK_PYTHON_JSON_FAILED
)
- if (CHECK_PYTHON_SIMPLEJSON_FAILED)
- message(FATAL_ERROR "could not find a python that can 'import simplejson")
- endif (CHECK_PYTHON_SIMPLEJSON_FAILED)
-endif (CHECK_PYTHON_JSON_FAILED)
+ if (CHECK_PYTHON_JSON_FAILED)
+ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import simplejson"
+ RESULT_VARIABLE CHECK_PYTHON_SIMPLEJSON_FAILED
+ )
+ if (CHECK_PYTHON_SIMPLEJSON_FAILED)
+ message(FATAL_ERROR "REGENERATE_AMQP_FRAMING requires a python with json or simplejson modules")
+ endif (CHECK_PYTHON_SIMPLEJSON_FAILED)
+ endif (CHECK_PYTHON_JSON_FAILED)
-find_path(AMQP_CODEGEN_DIR
- amqp_codegen.py
- PATHS ${CMAKE_CURRENT_SOURCE_DIR}/codegen
- ${CMAKE_CURRENT_SOURCE_DIR}/rabbitmq-codegen
- ${CMAKE_CURRENT_SOURCE_DIR}/../rabbitmq-codegen
- DOC "Path to directory containing amqp_codegen.py (rabbitmq-codegen)"
- NO_DEFAULT_PATH
- )
-if (AMQP_CODEGEN_DIR STREQUAL "AMQP_CODEGEN_DIR-NOTFOUND")
- message(SEND_ERROR "Cannot find amqp_codegen.py, did you forget to:\n\ngit submodule init\ngit submodule update\n?\n\n Or set AMQP_CODEGEN_DIR to directory containing amqp_codegen.py")
-else ()
- message(STATUS "Found amqp_codegen.py in ${AMQP_CODEGEN_DIR}")
-endif()
+ find_path(AMQP_CODEGEN_DIR
+ amqp_codegen.py
+ PATHS ${CMAKE_CURRENT_SOURCE_DIR}/codegen
+ ${CMAKE_CURRENT_SOURCE_DIR}/rabbitmq-codegen
+ ${CMAKE_CURRENT_SOURCE_DIR}/../rabbitmq-codegen
+ DOC "Path to directory containing amqp_codegen.py (rabbitmq-codegen)"
+ NO_DEFAULT_PATH
+ )
-mark_as_advanced(AMQP_CODEGEN_DIR)
+ if (AMQP_CODEGEN_DIR STREQUAL "AMQP_CODEGEN_DIR-NOTFOUND")
+ message(SEND_ERROR "REGENERATE_AMQP_FRAMING requires the amqp_codegen.py script. If this is a git clone you can:\n\ngit submodule init\ngit submodule update\n\n Or set AMQP_CODEGEN_DIR to directory containing amqp_codegen.py")
+ else ()
+ message(STATUS "Found amqp_codegen.py in ${AMQP_CODEGEN_DIR}")
+ endif()
+endif (REGENERATE_AMQP_FRAMING)
find_package(POPT)
find_package(XmlTo)
diff --git a/Makefile.am b/Makefile.am
index 103e1ec..80da583 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,19 +1,25 @@
ACLOCAL_AMFLAGS = -I m4
-AM_CFLAGS = -I$(top_srcdir)/librabbitmq -I$(top_builddir)/librabbitmq
+AM_CFLAGS = -I$(top_builddir)/librabbitmq/gen -I$(top_srcdir)/librabbitmq
lib_LTLIBRARIES = librabbitmq/librabbitmq.la
librabbitmq_librabbitmq_la_SOURCES = \
librabbitmq/amqp_api.c \
librabbitmq/amqp_connection.c \
- librabbitmq/amqp_framing.c \
librabbitmq/amqp_mem.c \
librabbitmq/amqp_private.h \
librabbitmq/amqp_socket.c \
librabbitmq/amqp_table.c \
librabbitmq/amqp_url.c
+if REGENERATE_AMQP_FRAMING
+librabbitmq_librabbitmq_la_SOURCES += librabbitmq/gen/amqp_framing.c
+else
+librabbitmq_librabbitmq_la_SOURCES += librabbitmq/amqp_framing.c
+endif
+
+
librabbitmq_librabbitmq_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
$(NO_UNDEFINED)
@@ -34,12 +40,9 @@ librabbitmq_librabbitmq_la_CFLAGS += -I$(top_srcdir)/librabbitmq/win32/msinttype
endif
include_HEADERS = \
- $(top_srcdir)/librabbitmq/amqp.h \
- $(top_builddir)/librabbitmq/amqp_framing.h
+ $(top_srcdir)/librabbitmq/amqp.h
-BUILT_SOURCES = \
- $(top_builddir)/librabbitmq/amqp_framing.h \
- $(top_builddir)/librabbitmq/amqp_framing.c
+if REGENERATE_AMQP_FRAMING
if PYTHON3
codegen_py = $(top_builddir)/librabbitmq/python3/codegen3.py
@@ -63,12 +66,22 @@ endif
amqp_codegen_json = $(top_srcdir)/codegen/amqp-rabbitmq-0.9.1.json
-librabbitmq/amqp_framing.h: $(amqp_codegen_json) $(codegen_py) $(codegenlib_py)
+$(top_builddir)/librabbitmq/gen/amqp_framing.h: $(amqp_codegen_json) $(codegen_py) $(codegenlib_py)
$(AM_V_GEN)PYTHONPATH=$(codegenlib_path) $(PYTHON) $(codegen_py) header $< $@
-librabbitmq/amqp_framing.c: $(amqp_codegen_json) $(codegen_py) $(codegenlib_py)
+$(top_builddir)/librabbitmq/gen/amqp_framing.c: $(amqp_codegen_json) $(codegen_py) $(codegenlib_py)
$(AM_V_GEN)PYTHONPATH=$(codegenlib_path) $(PYTHON) $(codegen_py) body $< $@
+BUILT_SOURCES = \
+ $(top_builddir)/librabbitmq/gen/amqp_framing.h \
+ $(top_builddir)/librabbitmq/gen/amqp_framing.c
+
+include_HEADERS += $(top_builddir)/librabbitmq/gen/amqp_framing.h
+
+else
+include_HEADERS += $(top_srcdir)/librabbitmq/amqp_framing.h
+endif #REGENERATE_AMQP_FRAMING
+
check_PROGRAMS = \
tests/test_tables \
tests/test_parse_url
@@ -293,11 +306,15 @@ EXTRA_DIST = \
tools/doc/librabbitmq-tools.xml
MOSTLYCLEANFILES = \
- $(top_builddir)/librabbitmq/amqp_framing.c \
- $(top_builddir)/librabbitmq/amqp_framing.h \
$(man_MANS) \
$(top_builddir)/tools/doc/man-date.ent
+if REGENERATE_AMQP_FRAMING
+MOSTLYCLEANFILES += \
+ $(top_builddir)/librabbitmq/gen/amqp_framing.c \
+ $(top_builddir)/librabbitmq/gen/amqp_framing.h
+endif #REGENERATE_AMQP_FRAMING
+
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = librabbitmq.pc
diff --git a/configure.ac b/configure.ac
index 4ee6a2f..8423fcc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -97,21 +97,33 @@ AC_SEARCH_LIBS([socket], [socket], [],
[-lnsl])])
AC_CHECK_FUNCS([htonll])
-AM_PATH_PYTHON([2.4])
+AC_ARG_ENABLE([regen-amqp-framing],
+ [AS_HELP_STRING([--enable-regen-amqp-framing],
+ [Regenerate amqp_framing.h/amqp_framing.c (for developer use)])])
-AX_PYTHON_MODULE([json], [])
-AS_IF([test "x$HAVE_PYMOD_JSON" = "xno"],
- [AX_PYTHON_MODULE([simplejson])])
-AS_IF([test "x$HAVE_PYMOD_JSON" = "xno" && test "x$HAVE_PYMOD_SIMPLEJSON" = "xno"],
- [AC_MSG_ERROR([Unable to find json or simplejson python modules])])
+AM_CONDITIONAL([REGENERATE_AMQP_FRAMING], [test "x$enable_regen_amqp_framing" = "xyes"])
-AS_VERSION_COMPARE([$PYTHON_VERSION],[3.0],[eval HAVE_PYTHON3=no],[eval HAVE_PYTHON3=yes],[eval HAVE_PYTHON3=yes])
+AS_IF([test "x$enable_regen_amqp_framing" = "xyes"],
+ [AM_PATH_PYTHON([2.4],,AC_MSG_ERROR([--enable-regen-amqp-framing requires python]))
-AS_IF([test "x$HAVE_PYTHON3" = "xyes"],
- [AC_PATH_PROG(PYTHON2TO3,[2to3])
- AS_IF([test "x$PYTHON2TO3" = "x"],
- AC_MSG_ERROR([Unable to find 2to3 python utility]))])
+ AX_PYTHON_MODULE([json], [])
+ AS_IF([test "x$HAVE_PYMOD_JSON" = "xno"],
+ [AX_PYTHON_MODULE([simplejson])])
+ AS_IF([test "x$HAVE_PYMOD_JSON" = "xno" && test "x$HAVE_PYMOD_SIMPLEJSON" = "xno"],
+ [AC_MSG_ERROR([Unable to find json or simplejson python modules])])
+ AS_VERSION_COMPARE([$PYTHON_VERSION],[3.0],
+ [eval HAVE_PYTHON3=no],
+ [eval HAVE_PYTHON3=yes],
+ [eval HAVE_PYTHON3=yes])
+
+ AS_IF([test "x$HAVE_PYTHON3" = "xyes"],
+ [AC_PATH_PROG(PYTHON2TO3,[2to3])
+ AS_IF([test "x$PYTHON2TO3" = "x"],
+ AC_MSG_ERROR([Unable to find 2to3 python utility]))])
+
+ ],
+ [HAVE_PYTHON3=no])
AM_CONDITIONAL([PYTHON3], [test "x$HAVE_PYTHON3" = "xyes"])
# Configure AMQP command-line tools
diff --git a/librabbitmq/CMakeLists.txt b/librabbitmq/CMakeLists.txt
index 5b14697..345d772 100644
--- a/librabbitmq/CMakeLists.txt
+++ b/librabbitmq/CMakeLists.txt
@@ -1,47 +1,49 @@
project(librabbitmq "C")
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-# Stuff dealing with code generation
-set(AMQP_CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/amqp_codegen.py")
-set(CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/codegen.py")
-set(AMQP_SPEC_JSON_PATH "${AMQP_CODEGEN_DIR}/amqp-rabbitmq-0.9.1.json")
-
-#generate amqp_framing.h/amqp_framing.c
-
-if (PYTHON_VERSION_MAJOR GREATER 2)
- set(CONVERT_CODEGEN ${PYTHON_2TO3_EXECUTABLE} -w ${CODEGEN_PY} > codegen_2to3.out)
- set(CONVERT_AMQP_CODEGEN ${PYTHON_2TO3_EXECUTABLE} -w ${AMQP_CODEGEN_PY} > amqp_codegen_2to3.out)
-else ()
- set(CONVERT_CODEGEN "")
- set(CONVERT_AMQP_CODEGEN "")
-endif ()
-
-add_custom_command(
- OUTPUT ${CODEGEN_PY}
- COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/codegen.py ${CODEGEN_PY}
- COMMAND ${CONVERT_CODEGEN}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/codegen.py
- VERBATIM)
-
-add_custom_command(
- OUTPUT ${AMQP_CODEGEN_PY}
- COMMAND ${CMAKE_COMMAND} ARGS -E copy ${AMQP_CODEGEN_DIR}/amqp_codegen.py ${AMQP_CODEGEN_PY}
- COMMAND ${CONVERT_AMQP_CODEGEN}
- DEPENDS ${AMQP_CODEGEN_DIR}/amqp_codegen.py ${AMQP_CODEGEN_TARGET}
- VERBATIM)
-
-add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.h
- COMMAND ${PYTHON_EXECUTABLE} ARGS ${CODEGEN_PY} header ${AMQP_SPEC_JSON_PATH} ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.h
- DEPENDS ${AMQP_SPEC_JSON_PATH} ${CODEGEN_PY} ${AMQP_CODEGEN_PY}
- VERBATIM)
-
-add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.c
- COMMAND ${PYTHON_EXECUTABLE} ARGS ${CODEGEN_PY} body ${AMQP_SPEC_JSON_PATH} ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.c
- DEPENDS ${AMQP_SPEC_JSON_PATH} ${CODEGEN_PY} ${AMQP_CODEGEN_PY}
- VERBATIM)
+if (REGENERATE_AMQP_FRAMING)
+ set(AMQP_CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/amqp_codegen.py")
+ set(CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/codegen.py")
+ set(AMQP_SPEC_JSON_PATH "${AMQP_CODEGEN_DIR}/amqp-rabbitmq-0.9.1.json")
+ set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.h)
+ set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.c)
+
+ if (PYTHON_VERSION_MAJOR GREATER 2)
+ set(CONVERT_CODEGEN ${PYTHON_2TO3_EXECUTABLE} -w ${CODEGEN_PY} > codegen_2to3.out)
+ set(CONVERT_AMQP_CODEGEN ${PYTHON_2TO3_EXECUTABLE} -w ${AMQP_CODEGEN_PY} > amqp_codegen_2to3.out)
+ else ()
+ set(CONVERT_CODEGEN "")
+ set(CONVERT_AMQP_CODEGEN "")
+ endif ()
+
+ add_custom_command(
+ OUTPUT ${CODEGEN_PY}
+ COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/codegen.py ${CODEGEN_PY}
+ COMMAND ${CONVERT_CODEGEN}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/codegen.py
+ VERBATIM)
+
+ add_custom_command(
+ OUTPUT ${AMQP_CODEGEN_PY}
+ COMMAND ${CMAKE_COMMAND} ARGS -E copy ${AMQP_CODEGEN_DIR}/amqp_codegen.py ${AMQP_CODEGEN_PY}
+ COMMAND ${CONVERT_AMQP_CODEGEN}
+ DEPENDS ${AMQP_CODEGEN_DIR}/amqp_codegen.py ${AMQP_CODEGEN_TARGET}
+ VERBATIM)
+
+ add_custom_command(
+ OUTPUT ${AMQP_FRAMING_H_PATH}
+ COMMAND ${PYTHON_EXECUTABLE} ARGS ${CODEGEN_PY} header ${AMQP_SPEC_JSON_PATH} ${AMQP_FRAMING_H_PATH}
+ DEPENDS ${AMQP_SPEC_JSON_PATH} ${CODEGEN_PY} ${AMQP_CODEGEN_PY}
+ VERBATIM)
+
+ add_custom_command(
+ OUTPUT ${AMQP_FRAMING_C_PATH}
+ COMMAND ${PYTHON_EXECUTABLE} ARGS ${CODEGEN_PY} body ${AMQP_SPEC_JSON_PATH} ${AMQP_FRAMING_C_PATH}
+ DEPENDS ${AMQP_SPEC_JSON_PATH} ${CODEGEN_PY} ${AMQP_CODEGEN_PY}
+ VERBATIM)
+else (REGENERATE_AMQP_FRAMING)
+ set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_SOURCE_DIR}/amqp_framing.h)
+ set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_SOURCE_DIR}/amqp_framing.c)
+endif (REGENERATE_AMQP_FRAMING)
if(WIN32)
set(SOCKET_IMPL "win32")
@@ -56,9 +58,11 @@ if(MSVC)
endif(MSVC_VERSION LESS 1600)
endif(MSVC)
+# NOTE: order is important here: if we generate amqp_framing.h/.c it'll be in the
+# binary directory, and should shadow whats in the source directory
set(LIBRABBITMQ_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
${SOCKET_IMPL}
${MSINTTYPES_INCLUDE}
)
@@ -72,8 +76,8 @@ set(LIBRABBITMQ_INCLUDE_DIRS
add_definitions(-DHAVE_CONFIG_H)
set(RABBITMQ_SOURCES
- ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.h
- ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.c
+ ${AMQP_FRAMING_H_PATH}
+ ${AMQP_FRAMING_C_PATH}
amqp_api.c amqp.h
amqp_connection.c amqp_mem.c amqp_private.h amqp_socket.c amqp_table.c
amqp_url.c
@@ -131,7 +135,7 @@ if (BUILD_STATIC_LIBS)
endif ()
endif (BUILD_STATIC_LIBS)
-install(FILES amqp.h ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.h ${STDINT_H_INSTALL_FILE}
+install(FILES amqp.h ${AMQP_FRAMING_H_PATH} ${STDINT_H_INSTALL_FILE}
DESTINATION include
)
diff --git a/librabbitmq/amqp_framing.c b/librabbitmq/amqp_framing.c
new file mode 100644
index 0000000..6a5f9ee
--- /dev/null
+++ b/librabbitmq/amqp_framing.c
@@ -0,0 +1,2071 @@
+/* Generated code. Do not edit. Edit and re-run codegen.py instead.
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MIT
+ *
+ * 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 *****
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amqp_private.h"
+#include "socket.h"
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+char const *amqp_constant_name(int constantNumber) {
+ switch (constantNumber) {
+ case AMQP_FRAME_METHOD: return "AMQP_FRAME_METHOD";
+ case AMQP_FRAME_HEADER: return "AMQP_FRAME_HEADER";
+ case AMQP_FRAME_BODY: return "AMQP_FRAME_BODY";
+ case AMQP_FRAME_HEARTBEAT: return "AMQP_FRAME_HEARTBEAT";
+ case AMQP_FRAME_MIN_SIZE: return "AMQP_FRAME_MIN_SIZE";
+ case AMQP_FRAME_END: return "AMQP_FRAME_END";
+ case AMQP_REPLY_SUCCESS: return "AMQP_REPLY_SUCCESS";
+ case AMQP_CONTENT_TOO_LARGE: return "AMQP_CONTENT_TOO_LARGE";
+ case AMQP_NO_ROUTE: return "AMQP_NO_ROUTE";
+ case AMQP_NO_CONSUMERS: return "AMQP_NO_CONSUMERS";
+ case AMQP_ACCESS_REFUSED: return "AMQP_ACCESS_REFUSED";
+ case AMQP_NOT_FOUND: return "AMQP_NOT_FOUND";
+ case AMQP_RESOURCE_LOCKED: return "AMQP_RESOURCE_LOCKED";
+ case AMQP_PRECONDITION_FAILED: return "AMQP_PRECONDITION_FAILED";
+ case AMQP_CONNECTION_FORCED: return "AMQP_CONNECTION_FORCED";
+ case AMQP_INVALID_PATH: return "AMQP_INVALID_PATH";
+ case AMQP_FRAME_ERROR: return "AMQP_FRAME_ERROR";
+ case AMQP_SYNTAX_ERROR: return "AMQP_SYNTAX_ERROR";
+ case AMQP_COMMAND_INVALID: return "AMQP_COMMAND_INVALID";
+ case AMQP_CHANNEL_ERROR: return "AMQP_CHANNEL_ERROR";
+ case AMQP_UNEXPECTED_FRAME: return "AMQP_UNEXPECTED_FRAME";
+ case AMQP_RESOURCE_ERROR: return "AMQP_RESOURCE_ERROR";
+ case AMQP_NOT_ALLOWED: return "AMQP_NOT_ALLOWED";
+ case AMQP_NOT_IMPLEMENTED: return "AMQP_NOT_IMPLEMENTED";
+ case AMQP_INTERNAL_ERROR: return "AMQP_INTERNAL_ERROR";
+ default: return "(unknown)";
+ }
+}
+
+amqp_boolean_t amqp_constant_is_hard_error(int constantNumber) {
+ switch (constantNumber) {
+ case AMQP_CONNECTION_FORCED: return 1;
+ case AMQP_INVALID_PATH: return 1;
+ case AMQP_FRAME_ERROR: return 1;
+ case AMQP_SYNTAX_ERROR: return 1;
+ case AMQP_COMMAND_INVALID: return 1;
+ case AMQP_CHANNEL_ERROR: return 1;
+ case AMQP_UNEXPECTED_FRAME: return 1;
+ case AMQP_RESOURCE_ERROR: return 1;
+ case AMQP_NOT_ALLOWED: return 1;
+ case AMQP_NOT_IMPLEMENTED: return 1;
+ case AMQP_INTERNAL_ERROR: return 1;
+ default: return 0;
+ }
+}
+
+char const *amqp_method_name(amqp_method_number_t methodNumber) {
+ switch (methodNumber) {
+ case AMQP_CONNECTION_START_METHOD: return "AMQP_CONNECTION_START_METHOD";
+ case AMQP_CONNECTION_START_OK_METHOD: return "AMQP_CONNECTION_START_OK_METHOD";
+ case AMQP_CONNECTION_SECURE_METHOD: return "AMQP_CONNECTION_SECURE_METHOD";
+ case AMQP_CONNECTION_SECURE_OK_METHOD: return "AMQP_CONNECTION_SECURE_OK_METHOD";
+ case AMQP_CONNECTION_TUNE_METHOD: return "AMQP_CONNECTION_TUNE_METHOD";
+ case AMQP_CONNECTION_TUNE_OK_METHOD: return "AMQP_CONNECTION_TUNE_OK_METHOD";
+ case AMQP_CONNECTION_OPEN_METHOD: return "AMQP_CONNECTION_OPEN_METHOD";
+ case AMQP_CONNECTION_OPEN_OK_METHOD: return "AMQP_CONNECTION_OPEN_OK_METHOD";
+ case AMQP_CONNECTION_CLOSE_METHOD: return "AMQP_CONNECTION_CLOSE_METHOD";
+ case AMQP_CONNECTION_CLOSE_OK_METHOD: return "AMQP_CONNECTION_CLOSE_OK_METHOD";
+ case AMQP_CHANNEL_OPEN_METHOD: return "AMQP_CHANNEL_OPEN_METHOD";
+ case AMQP_CHANNEL_OPEN_OK_METHOD: return "AMQP_CHANNEL_OPEN_OK_METHOD";
+ case AMQP_CHANNEL_FLOW_METHOD: return "AMQP_CHANNEL_FLOW_METHOD";
+ case AMQP_CHANNEL_FLOW_OK_METHOD: return "AMQP_CHANNEL_FLOW_OK_METHOD";
+ case AMQP_CHANNEL_CLOSE_METHOD: return "AMQP_CHANNEL_CLOSE_METHOD";
+ case AMQP_CHANNEL_CLOSE_OK_METHOD: return "AMQP_CHANNEL_CLOSE_OK_METHOD";
+ case AMQP_ACCESS_REQUEST_METHOD: return "AMQP_ACCESS_REQUEST_METHOD";
+ case AMQP_ACCESS_REQUEST_OK_METHOD: return "AMQP_ACCESS_REQUEST_OK_METHOD";
+ case AMQP_EXCHANGE_DECLARE_METHOD: return "AMQP_EXCHANGE_DECLARE_METHOD";
+ case AMQP_EXCHANGE_DECLARE_OK_METHOD: return "AMQP_EXCHANGE_DECLARE_OK_METHOD";
+ case AMQP_EXCHANGE_DELETE_METHOD: return "AMQP_EXCHANGE_DELETE_METHOD";
+ case AMQP_EXCHANGE_DELETE_OK_METHOD: return "AMQP_EXCHANGE_DELETE_OK_METHOD";
+ case AMQP_EXCHANGE_BIND_METHOD: return "AMQP_EXCHANGE_BIND_METHOD";
+ case AMQP_EXCHANGE_BIND_OK_METHOD: return "AMQP_EXCHANGE_BIND_OK_METHOD";
+ case AMQP_EXCHANGE_UNBIND_METHOD: return "AMQP_EXCHANGE_UNBIND_METHOD";
+ case AMQP_EXCHANGE_UNBIND_OK_METHOD: return "AMQP_EXCHANGE_UNBIND_OK_METHOD";
+ case AMQP_QUEUE_DECLARE_METHOD: return "AMQP_QUEUE_DECLARE_METHOD";
+ case AMQP_QUEUE_DECLARE_OK_METHOD: return "AMQP_QUEUE_DECLARE_OK_METHOD";
+ case AMQP_QUEUE_BIND_METHOD: return "AMQP_QUEUE_BIND_METHOD";
+ case AMQP_QUEUE_BIND_OK_METHOD: return "AMQP_QUEUE_BIND_OK_METHOD";
+ case AMQP_QUEUE_PURGE_METHOD: return "AMQP_QUEUE_PURGE_METHOD";
+ case AMQP_QUEUE_PURGE_OK_METHOD: return "AMQP_QUEUE_PURGE_OK_METHOD";
+ case AMQP_QUEUE_DELETE_METHOD: return "AMQP_QUEUE_DELETE_METHOD";
+ case AMQP_QUEUE_DELETE_OK_METHOD: return "AMQP_QUEUE_DELETE_OK_METHOD";
+ case AMQP_QUEUE_UNBIND_METHOD: return "AMQP_QUEUE_UNBIND_METHOD";
+ case AMQP_QUEUE_UNBIND_OK_METHOD: return "AMQP_QUEUE_UNBIND_OK_METHOD";
+ case AMQP_BASIC_QOS_METHOD: return "AMQP_BASIC_QOS_METHOD";
+ case AMQP_BASIC_QOS_OK_METHOD: return "AMQP_BASIC_QOS_OK_METHOD";
+ case AMQP_BASIC_CONSUME_METHOD: return "AMQP_BASIC_CONSUME_METHOD";
+ case AMQP_BASIC_CONSUME_OK_METHOD: return "AMQP_BASIC_CONSUME_OK_METHOD";
+ case AMQP_BASIC_CANCEL_METHOD: return "AMQP_BASIC_CANCEL_METHOD";
+ case AMQP_BASIC_CANCEL_OK_METHOD: return "AMQP_BASIC_CANCEL_OK_METHOD";
+ case AMQP_BASIC_PUBLISH_METHOD: return "AMQP_BASIC_PUBLISH_METHOD";
+ case AMQP_BASIC_RETURN_METHOD: return "AMQP_BASIC_RETURN_METHOD";
+ case AMQP_BASIC_DELIVER_METHOD: return "AMQP_BASIC_DELIVER_METHOD";
+ case AMQP_BASIC_GET_METHOD: return "AMQP_BASIC_GET_METHOD";
+ case AMQP_BASIC_GET_OK_METHOD: return "AMQP_BASIC_GET_OK_METHOD";
+ case AMQP_BASIC_GET_EMPTY_METHOD: return "AMQP_BASIC_GET_EMPTY_METHOD";
+ case AMQP_BASIC_ACK_METHOD: return "AMQP_BASIC_ACK_METHOD";
+ case AMQP_BASIC_REJECT_METHOD: return "AMQP_BASIC_REJECT_METHOD";
+ case AMQP_BASIC_RECOVER_ASYNC_METHOD: return "AMQP_BASIC_RECOVER_ASYNC_METHOD";
+ case AMQP_BASIC_RECOVER_METHOD: return "AMQP_BASIC_RECOVER_METHOD";
+ case AMQP_BASIC_RECOVER_OK_METHOD: return "AMQP_BASIC_RECOVER_OK_METHOD";
+ case AMQP_BASIC_NACK_METHOD: return "AMQP_BASIC_NACK_METHOD";
+ case AMQP_TX_SELECT_METHOD: return "AMQP_TX_SELECT_METHOD";
+ case AMQP_TX_SELECT_OK_METHOD: return "AMQP_TX_SELECT_OK_METHOD";
+ case AMQP_TX_COMMIT_METHOD: return "AMQP_TX_COMMIT_METHOD";
+ case AMQP_TX_COMMIT_OK_METHOD: return "AMQP_TX_COMMIT_OK_METHOD";
+ case AMQP_TX_ROLLBACK_METHOD: return "AMQP_TX_ROLLBACK_METHOD";
+ case AMQP_TX_ROLLBACK_OK_METHOD: return "AMQP_TX_ROLLBACK_OK_METHOD";
+ case AMQP_CONFIRM_SELECT_METHOD: return "AMQP_CONFIRM_SELECT_METHOD";
+ case AMQP_CONFIRM_SELECT_OK_METHOD: return "AMQP_CONFIRM_SELECT_OK_METHOD";
+ default: return NULL;
+ }
+}
+
+amqp_boolean_t amqp_method_has_content(amqp_method_number_t methodNumber) {
+ switch (methodNumber) {
+ case AMQP_BASIC_PUBLISH_METHOD: return 1;
+ case AMQP_BASIC_RETURN_METHOD: return 1;
+ case AMQP_BASIC_DELIVER_METHOD: return 1;
+ case AMQP_BASIC_GET_OK_METHOD: return 1;
+ default: return 0;
+ }
+}
+
+int amqp_decode_method(amqp_method_number_t methodNumber,
+ amqp_pool_t *pool,
+ amqp_bytes_t encoded,
+ void **decoded)
+{
+ size_t offset = 0;
+ uint8_t bit_buffer;
+
+ switch (methodNumber) {
+ case AMQP_CONNECTION_START_METHOD: {
+ amqp_connection_start_t *m = (amqp_connection_start_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_start_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_8(encoded, &offset, &m->version_major)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &m->version_minor)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->server_properties), &offset);
+ if (res < 0) return res;
+ }
+ {
+ uint32_t len;
+ if (!amqp_decode_32(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->mechanisms, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint32_t len;
+ if (!amqp_decode_32(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->locales, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_START_OK_METHOD: {
+ amqp_connection_start_ok_t *m = (amqp_connection_start_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_start_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->client_properties), &offset);
+ if (res < 0) return res;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->mechanism, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint32_t len;
+ if (!amqp_decode_32(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->response, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->locale, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_SECURE_METHOD: {
+ amqp_connection_secure_t *m = (amqp_connection_secure_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_secure_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint32_t len;
+ if (!amqp_decode_32(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->challenge, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_SECURE_OK_METHOD: {
+ amqp_connection_secure_ok_t *m = (amqp_connection_secure_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_secure_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint32_t len;
+ if (!amqp_decode_32(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->response, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_TUNE_METHOD: {
+ amqp_connection_tune_t *m = (amqp_connection_tune_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_tune_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->channel_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_32(encoded, &offset, &m->frame_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_16(encoded, &offset, &m->heartbeat)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_TUNE_OK_METHOD: {
+ amqp_connection_tune_ok_t *m = (amqp_connection_tune_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_tune_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->channel_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_32(encoded, &offset, &m->frame_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_16(encoded, &offset, &m->heartbeat)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_OPEN_METHOD: {
+ amqp_connection_open_t *m = (amqp_connection_open_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_open_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->virtual_host, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->capabilities, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->insist = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_OPEN_OK_METHOD: {
+ amqp_connection_open_ok_t *m = (amqp_connection_open_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_open_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->known_hosts, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_CLOSE_METHOD: {
+ amqp_connection_close_t *m = (amqp_connection_close_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_close_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->reply_code)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->reply_text, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_16(encoded, &offset, &m->class_id)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_16(encoded, &offset, &m->method_id)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONNECTION_CLOSE_OK_METHOD: {
+ amqp_connection_close_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CHANNEL_OPEN_METHOD: {
+ amqp_channel_open_t *m = (amqp_channel_open_t *) amqp_pool_alloc(pool, sizeof(amqp_channel_open_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->out_of_band, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CHANNEL_OPEN_OK_METHOD: {
+ amqp_channel_open_ok_t *m = (amqp_channel_open_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_channel_open_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint32_t len;
+ if (!amqp_decode_32(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->channel_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CHANNEL_FLOW_METHOD: {
+ amqp_channel_flow_t *m = (amqp_channel_flow_t *) amqp_pool_alloc(pool, sizeof(amqp_channel_flow_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->active = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CHANNEL_FLOW_OK_METHOD: {
+ amqp_channel_flow_ok_t *m = (amqp_channel_flow_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_channel_flow_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->active = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CHANNEL_CLOSE_METHOD: {
+ amqp_channel_close_t *m = (amqp_channel_close_t *) amqp_pool_alloc(pool, sizeof(amqp_channel_close_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->reply_code)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->reply_text, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_16(encoded, &offset, &m->class_id)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_16(encoded, &offset, &m->method_id)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CHANNEL_CLOSE_OK_METHOD: {
+ amqp_channel_close_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_ACCESS_REQUEST_METHOD: {
+ amqp_access_request_t *m = (amqp_access_request_t *) amqp_pool_alloc(pool, sizeof(amqp_access_request_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->realm, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->exclusive = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->passive = (bit_buffer & (1 << 1)) ? 1 : 0;
+ m->active = (bit_buffer & (1 << 2)) ? 1 : 0;
+ m->write = (bit_buffer & (1 << 3)) ? 1 : 0;
+ m->read = (bit_buffer & (1 << 4)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_ACCESS_REQUEST_OK_METHOD: {
+ amqp_access_request_ok_t *m = (amqp_access_request_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_access_request_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_DECLARE_METHOD: {
+ amqp_exchange_declare_t *m = (amqp_exchange_declare_t *) amqp_pool_alloc(pool, sizeof(amqp_exchange_declare_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->type, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->passive = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->durable = (bit_buffer & (1 << 1)) ? 1 : 0;
+ m->auto_delete = (bit_buffer & (1 << 2)) ? 1 : 0;
+ m->internal = (bit_buffer & (1 << 3)) ? 1 : 0;
+ m->nowait = (bit_buffer & (1 << 4)) ? 1 : 0;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_DECLARE_OK_METHOD: {
+ amqp_exchange_declare_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_DELETE_METHOD: {
+ amqp_exchange_delete_t *m = (amqp_exchange_delete_t *) amqp_pool_alloc(pool, sizeof(amqp_exchange_delete_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->if_unused = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->nowait = (bit_buffer & (1 << 1)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_DELETE_OK_METHOD: {
+ amqp_exchange_delete_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_BIND_METHOD: {
+ amqp_exchange_bind_t *m = (amqp_exchange_bind_t *) amqp_pool_alloc(pool, sizeof(amqp_exchange_bind_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->destination, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->source, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->nowait = (bit_buffer & (1 << 0)) ? 1 : 0;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_BIND_OK_METHOD: {
+ amqp_exchange_bind_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_UNBIND_METHOD: {
+ amqp_exchange_unbind_t *m = (amqp_exchange_unbind_t *) amqp_pool_alloc(pool, sizeof(amqp_exchange_unbind_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->destination, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->source, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->nowait = (bit_buffer & (1 << 0)) ? 1 : 0;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_EXCHANGE_UNBIND_OK_METHOD: {
+ amqp_exchange_unbind_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_DECLARE_METHOD: {
+ amqp_queue_declare_t *m = (amqp_queue_declare_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_declare_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->passive = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->durable = (bit_buffer & (1 << 1)) ? 1 : 0;
+ m->exclusive = (bit_buffer & (1 << 2)) ? 1 : 0;
+ m->auto_delete = (bit_buffer & (1 << 3)) ? 1 : 0;
+ m->nowait = (bit_buffer & (1 << 4)) ? 1 : 0;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_DECLARE_OK_METHOD: {
+ amqp_queue_declare_ok_t *m = (amqp_queue_declare_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_declare_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_32(encoded, &offset, &m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_32(encoded, &offset, &m->consumer_count)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_BIND_METHOD: {
+ amqp_queue_bind_t *m = (amqp_queue_bind_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_bind_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->nowait = (bit_buffer & (1 << 0)) ? 1 : 0;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_BIND_OK_METHOD: {
+ amqp_queue_bind_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_PURGE_METHOD: {
+ amqp_queue_purge_t *m = (amqp_queue_purge_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_purge_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->nowait = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_PURGE_OK_METHOD: {
+ amqp_queue_purge_ok_t *m = (amqp_queue_purge_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_purge_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_32(encoded, &offset, &m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_DELETE_METHOD: {
+ amqp_queue_delete_t *m = (amqp_queue_delete_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_delete_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->if_unused = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->if_empty = (bit_buffer & (1 << 1)) ? 1 : 0;
+ m->nowait = (bit_buffer & (1 << 2)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_DELETE_OK_METHOD: {
+ amqp_queue_delete_ok_t *m = (amqp_queue_delete_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_delete_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_32(encoded, &offset, &m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_UNBIND_METHOD: {
+ amqp_queue_unbind_t *m = (amqp_queue_unbind_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_unbind_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_QUEUE_UNBIND_OK_METHOD: {
+ amqp_queue_unbind_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_QOS_METHOD: {
+ amqp_basic_qos_t *m = (amqp_basic_qos_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_qos_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_32(encoded, &offset, &m->prefetch_size)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_16(encoded, &offset, &m->prefetch_count)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->global = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_QOS_OK_METHOD: {
+ amqp_basic_qos_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_CONSUME_METHOD: {
+ amqp_basic_consume_t *m = (amqp_basic_consume_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_consume_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->consumer_tag, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->no_local = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->no_ack = (bit_buffer & (1 << 1)) ? 1 : 0;
+ m->exclusive = (bit_buffer & (1 << 2)) ? 1 : 0;
+ m->nowait = (bit_buffer & (1 << 3)) ? 1 : 0;
+ {
+ int res = amqp_decode_table(encoded, pool, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_CONSUME_OK_METHOD: {
+ amqp_basic_consume_ok_t *m = (amqp_basic_consume_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_consume_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->consumer_tag, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_CANCEL_METHOD: {
+ amqp_basic_cancel_t *m = (amqp_basic_cancel_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_cancel_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->consumer_tag, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->nowait = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_CANCEL_OK_METHOD: {
+ amqp_basic_cancel_ok_t *m = (amqp_basic_cancel_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_cancel_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->consumer_tag, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_PUBLISH_METHOD: {
+ amqp_basic_publish_t *m = (amqp_basic_publish_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_publish_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->mandatory = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->immediate = (bit_buffer & (1 << 1)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_RETURN_METHOD: {
+ amqp_basic_return_t *m = (amqp_basic_return_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_return_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->reply_code)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->reply_text, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_DELIVER_METHOD: {
+ amqp_basic_deliver_t *m = (amqp_basic_deliver_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_deliver_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->consumer_tag, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_64(encoded, &offset, &m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->redelivered = (bit_buffer & (1 << 0)) ? 1 : 0;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_GET_METHOD: {
+ amqp_basic_get_t *m = (amqp_basic_get_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_get_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_16(encoded, &offset, &m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->queue, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->no_ack = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_GET_OK_METHOD: {
+ amqp_basic_get_ok_t *m = (amqp_basic_get_ok_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_get_ok_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_64(encoded, &offset, &m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->redelivered = (bit_buffer & (1 << 0)) ? 1 : 0;
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->exchange, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->routing_key, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (!amqp_decode_32(encoded, &offset, &m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_GET_EMPTY_METHOD: {
+ amqp_basic_get_empty_t *m = (amqp_basic_get_empty_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_get_empty_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &m->cluster_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_ACK_METHOD: {
+ amqp_basic_ack_t *m = (amqp_basic_ack_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_ack_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_64(encoded, &offset, &m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->multiple = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_REJECT_METHOD: {
+ amqp_basic_reject_t *m = (amqp_basic_reject_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_reject_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_64(encoded, &offset, &m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->requeue = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_RECOVER_ASYNC_METHOD: {
+ amqp_basic_recover_async_t *m = (amqp_basic_recover_async_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_recover_async_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->requeue = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_RECOVER_METHOD: {
+ amqp_basic_recover_t *m = (amqp_basic_recover_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_recover_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->requeue = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_RECOVER_OK_METHOD: {
+ amqp_basic_recover_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_BASIC_NACK_METHOD: {
+ amqp_basic_nack_t *m = (amqp_basic_nack_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_nack_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_64(encoded, &offset, &m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->multiple = (bit_buffer & (1 << 0)) ? 1 : 0;
+ m->requeue = (bit_buffer & (1 << 1)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_TX_SELECT_METHOD: {
+ amqp_tx_select_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_TX_SELECT_OK_METHOD: {
+ amqp_tx_select_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_TX_COMMIT_METHOD: {
+ amqp_tx_commit_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_TX_COMMIT_OK_METHOD: {
+ amqp_tx_commit_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_TX_ROLLBACK_METHOD: {
+ amqp_tx_rollback_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_TX_ROLLBACK_OK_METHOD: {
+ amqp_tx_rollback_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONFIRM_SELECT_METHOD: {
+ amqp_confirm_select_t *m = (amqp_confirm_select_t *) amqp_pool_alloc(pool, sizeof(amqp_confirm_select_t));
+ if (m == NULL) { return -ERROR_NO_MEMORY; }
+ if (!amqp_decode_8(encoded, &offset, &bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ m->nowait = (bit_buffer & (1 << 0)) ? 1 : 0;
+ *decoded = m;
+ return 0;
+ }
+ case AMQP_CONFIRM_SELECT_OK_METHOD: {
+ amqp_confirm_select_ok_t *m = NULL; /* no fields */
+ *decoded = m;
+ return 0;
+ }
+ default: return -ERROR_UNKNOWN_METHOD;
+ }
+}
+
+int amqp_decode_properties(uint16_t class_id,
+ amqp_pool_t *pool,
+ amqp_bytes_t encoded,
+ void **decoded)
+{
+ size_t offset = 0;
+
+ amqp_flags_t flags = 0;
+ int flagword_index = 0;
+ uint16_t partial_flags;
+
+ do {
+ if (!amqp_decode_16(encoded, &offset, &partial_flags))
+ return -ERROR_BAD_AMQP_DATA;
+ flags |= (partial_flags << (flagword_index * 16));
+ flagword_index++;
+ } while (partial_flags & 1);
+
+ switch (class_id) {
+ case 10: {
+ amqp_connection_properties_t *p = (amqp_connection_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_connection_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ case 20: {
+ amqp_channel_properties_t *p = (amqp_channel_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_channel_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ case 30: {
+ amqp_access_properties_t *p = (amqp_access_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_access_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ case 40: {
+ amqp_exchange_properties_t *p = (amqp_exchange_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_exchange_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ case 50: {
+ amqp_queue_properties_t *p = (amqp_queue_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_queue_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ case 60: {
+ amqp_basic_properties_t *p = (amqp_basic_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_basic_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ if (flags & AMQP_BASIC_CONTENT_TYPE_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->content_type, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_CONTENT_ENCODING_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->content_encoding, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_HEADERS_FLAG) {
+ {
+ int res = amqp_decode_table(encoded, pool, &(p->headers), &offset);
+ if (res < 0) return res;
+ }
+ }
+ if (flags & AMQP_BASIC_DELIVERY_MODE_FLAG) {
+ if (!amqp_decode_8(encoded, &offset, &p->delivery_mode)) return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_PRIORITY_FLAG) {
+ if (!amqp_decode_8(encoded, &offset, &p->priority)) return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_CORRELATION_ID_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->correlation_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_REPLY_TO_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->reply_to, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_EXPIRATION_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->expiration, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_MESSAGE_ID_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->message_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_TIMESTAMP_FLAG) {
+ if (!amqp_decode_64(encoded, &offset, &p->timestamp)) return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_TYPE_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->type, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_USER_ID_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->user_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_APP_ID_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->app_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ if (flags & AMQP_BASIC_CLUSTER_ID_FLAG) {
+ {
+ uint8_t len;
+ if (!amqp_decode_8(encoded, &offset, &len)
+ || !amqp_decode_bytes(encoded, &offset, &p->cluster_id, len))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ }
+ *decoded = p;
+ return 0;
+ }
+ case 90: {
+ amqp_tx_properties_t *p = (amqp_tx_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_tx_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ case 85: {
+ amqp_confirm_properties_t *p = (amqp_confirm_properties_t *) amqp_pool_alloc(pool, sizeof(amqp_confirm_properties_t));
+ if (p == NULL) { return -ERROR_NO_MEMORY; }
+ p->_flags = flags;
+ *decoded = p;
+ return 0;
+ }
+ default: return -ERROR_UNKNOWN_CLASS;
+ }
+}
+
+int amqp_encode_method(amqp_method_number_t methodNumber,
+ void *decoded,
+ amqp_bytes_t encoded)
+{
+ size_t offset = 0;
+ uint8_t bit_buffer;
+
+ switch (methodNumber) {
+ case AMQP_CONNECTION_START_METHOD: {
+ amqp_connection_start_t *m = (amqp_connection_start_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->version_major)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->version_minor)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->server_properties), &offset);
+ if (res < 0) return res;
+ }
+ if (!amqp_encode_32(encoded, &offset, m->mechanisms.len)
+ || !amqp_encode_bytes(encoded, &offset, m->mechanisms))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->locales.len)
+ || !amqp_encode_bytes(encoded, &offset, m->locales))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_START_OK_METHOD: {
+ amqp_connection_start_ok_t *m = (amqp_connection_start_ok_t *) decoded;
+ {
+ int res = amqp_encode_table(encoded, &(m->client_properties), &offset);
+ if (res < 0) return res;
+ }
+ if (!amqp_encode_8(encoded, &offset, m->mechanism.len)
+ || !amqp_encode_bytes(encoded, &offset, m->mechanism))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->response.len)
+ || !amqp_encode_bytes(encoded, &offset, m->response))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->locale.len)
+ || !amqp_encode_bytes(encoded, &offset, m->locale))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_SECURE_METHOD: {
+ amqp_connection_secure_t *m = (amqp_connection_secure_t *) decoded;
+ if (!amqp_encode_32(encoded, &offset, m->challenge.len)
+ || !amqp_encode_bytes(encoded, &offset, m->challenge))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_SECURE_OK_METHOD: {
+ amqp_connection_secure_ok_t *m = (amqp_connection_secure_ok_t *) decoded;
+ if (!amqp_encode_32(encoded, &offset, m->response.len)
+ || !amqp_encode_bytes(encoded, &offset, m->response))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_TUNE_METHOD: {
+ amqp_connection_tune_t *m = (amqp_connection_tune_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->channel_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->frame_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->heartbeat)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_TUNE_OK_METHOD: {
+ amqp_connection_tune_ok_t *m = (amqp_connection_tune_ok_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->channel_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->frame_max)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->heartbeat)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_OPEN_METHOD: {
+ amqp_connection_open_t *m = (amqp_connection_open_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->virtual_host.len)
+ || !amqp_encode_bytes(encoded, &offset, m->virtual_host))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->capabilities.len)
+ || !amqp_encode_bytes(encoded, &offset, m->capabilities))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->insist) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_OPEN_OK_METHOD: {
+ amqp_connection_open_ok_t *m = (amqp_connection_open_ok_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->known_hosts.len)
+ || !amqp_encode_bytes(encoded, &offset, m->known_hosts))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_CLOSE_METHOD: {
+ amqp_connection_close_t *m = (amqp_connection_close_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->reply_code)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->reply_text.len)
+ || !amqp_encode_bytes(encoded, &offset, m->reply_text))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->class_id)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->method_id)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONNECTION_CLOSE_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_CHANNEL_OPEN_METHOD: {
+ amqp_channel_open_t *m = (amqp_channel_open_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->out_of_band.len)
+ || !amqp_encode_bytes(encoded, &offset, m->out_of_band))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CHANNEL_OPEN_OK_METHOD: {
+ amqp_channel_open_ok_t *m = (amqp_channel_open_ok_t *) decoded;
+ if (!amqp_encode_32(encoded, &offset, m->channel_id.len)
+ || !amqp_encode_bytes(encoded, &offset, m->channel_id))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CHANNEL_FLOW_METHOD: {
+ amqp_channel_flow_t *m = (amqp_channel_flow_t *) decoded;
+ bit_buffer = 0;
+ if (m->active) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CHANNEL_FLOW_OK_METHOD: {
+ amqp_channel_flow_ok_t *m = (amqp_channel_flow_ok_t *) decoded;
+ bit_buffer = 0;
+ if (m->active) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CHANNEL_CLOSE_METHOD: {
+ amqp_channel_close_t *m = (amqp_channel_close_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->reply_code)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->reply_text.len)
+ || !amqp_encode_bytes(encoded, &offset, m->reply_text))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->class_id)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->method_id)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CHANNEL_CLOSE_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_ACCESS_REQUEST_METHOD: {
+ amqp_access_request_t *m = (amqp_access_request_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->realm.len)
+ || !amqp_encode_bytes(encoded, &offset, m->realm))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->exclusive) bit_buffer |= (1 << 0);
+ if (m->passive) bit_buffer |= (1 << 1);
+ if (m->active) bit_buffer |= (1 << 2);
+ if (m->write) bit_buffer |= (1 << 3);
+ if (m->read) bit_buffer |= (1 << 4);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_ACCESS_REQUEST_OK_METHOD: {
+ amqp_access_request_ok_t *m = (amqp_access_request_ok_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_EXCHANGE_DECLARE_METHOD: {
+ amqp_exchange_declare_t *m = (amqp_exchange_declare_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->type.len)
+ || !amqp_encode_bytes(encoded, &offset, m->type))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->passive) bit_buffer |= (1 << 0);
+ if (m->durable) bit_buffer |= (1 << 1);
+ if (m->auto_delete) bit_buffer |= (1 << 2);
+ if (m->internal) bit_buffer |= (1 << 3);
+ if (m->nowait) bit_buffer |= (1 << 4);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_EXCHANGE_DECLARE_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_EXCHANGE_DELETE_METHOD: {
+ amqp_exchange_delete_t *m = (amqp_exchange_delete_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->if_unused) bit_buffer |= (1 << 0);
+ if (m->nowait) bit_buffer |= (1 << 1);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_EXCHANGE_DELETE_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_EXCHANGE_BIND_METHOD: {
+ amqp_exchange_bind_t *m = (amqp_exchange_bind_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->destination.len)
+ || !amqp_encode_bytes(encoded, &offset, m->destination))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->source.len)
+ || !amqp_encode_bytes(encoded, &offset, m->source))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->nowait) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_EXCHANGE_BIND_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_EXCHANGE_UNBIND_METHOD: {
+ amqp_exchange_unbind_t *m = (amqp_exchange_unbind_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->destination.len)
+ || !amqp_encode_bytes(encoded, &offset, m->destination))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->source.len)
+ || !amqp_encode_bytes(encoded, &offset, m->source))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->nowait) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_EXCHANGE_UNBIND_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_QUEUE_DECLARE_METHOD: {
+ amqp_queue_declare_t *m = (amqp_queue_declare_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->passive) bit_buffer |= (1 << 0);
+ if (m->durable) bit_buffer |= (1 << 1);
+ if (m->exclusive) bit_buffer |= (1 << 2);
+ if (m->auto_delete) bit_buffer |= (1 << 3);
+ if (m->nowait) bit_buffer |= (1 << 4);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_QUEUE_DECLARE_OK_METHOD: {
+ amqp_queue_declare_ok_t *m = (amqp_queue_declare_ok_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->consumer_count)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_QUEUE_BIND_METHOD: {
+ amqp_queue_bind_t *m = (amqp_queue_bind_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->nowait) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_QUEUE_BIND_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_QUEUE_PURGE_METHOD: {
+ amqp_queue_purge_t *m = (amqp_queue_purge_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->nowait) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_QUEUE_PURGE_OK_METHOD: {
+ amqp_queue_purge_ok_t *m = (amqp_queue_purge_ok_t *) decoded;
+ if (!amqp_encode_32(encoded, &offset, m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_QUEUE_DELETE_METHOD: {
+ amqp_queue_delete_t *m = (amqp_queue_delete_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->if_unused) bit_buffer |= (1 << 0);
+ if (m->if_empty) bit_buffer |= (1 << 1);
+ if (m->nowait) bit_buffer |= (1 << 2);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_QUEUE_DELETE_OK_METHOD: {
+ amqp_queue_delete_ok_t *m = (amqp_queue_delete_ok_t *) decoded;
+ if (!amqp_encode_32(encoded, &offset, m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_QUEUE_UNBIND_METHOD: {
+ amqp_queue_unbind_t *m = (amqp_queue_unbind_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_QUEUE_UNBIND_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_BASIC_QOS_METHOD: {
+ amqp_basic_qos_t *m = (amqp_basic_qos_t *) decoded;
+ if (!amqp_encode_32(encoded, &offset, m->prefetch_size)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_16(encoded, &offset, m->prefetch_count)) return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->global) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_QOS_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_BASIC_CONSUME_METHOD: {
+ amqp_basic_consume_t *m = (amqp_basic_consume_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ || !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->no_local) bit_buffer |= (1 << 0);
+ if (m->no_ack) bit_buffer |= (1 << 1);
+ if (m->exclusive) bit_buffer |= (1 << 2);
+ if (m->nowait) bit_buffer |= (1 << 3);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ {
+ int res = amqp_encode_table(encoded, &(m->arguments), &offset);
+ if (res < 0) return res;
+ }
+ return offset;
+ }
+ case AMQP_BASIC_CONSUME_OK_METHOD: {
+ amqp_basic_consume_ok_t *m = (amqp_basic_consume_ok_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ || !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_CANCEL_METHOD: {
+ amqp_basic_cancel_t *m = (amqp_basic_cancel_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ || !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->nowait) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_CANCEL_OK_METHOD: {
+ amqp_basic_cancel_ok_t *m = (amqp_basic_cancel_ok_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ || !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_PUBLISH_METHOD: {
+ amqp_basic_publish_t *m = (amqp_basic_publish_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->mandatory) bit_buffer |= (1 << 0);
+ if (m->immediate) bit_buffer |= (1 << 1);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_RETURN_METHOD: {
+ amqp_basic_return_t *m = (amqp_basic_return_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->reply_code)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->reply_text.len)
+ || !amqp_encode_bytes(encoded, &offset, m->reply_text))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_DELIVER_METHOD: {
+ amqp_basic_deliver_t *m = (amqp_basic_deliver_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ || !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_64(encoded, &offset, m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->redelivered) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_GET_METHOD: {
+ amqp_basic_get_t *m = (amqp_basic_get_t *) decoded;
+ if (!amqp_encode_16(encoded, &offset, m->ticket)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ || !amqp_encode_bytes(encoded, &offset, m->queue))
+ return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->no_ack) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_GET_OK_METHOD: {
+ amqp_basic_get_ok_t *m = (amqp_basic_get_ok_t *) decoded;
+ if (!amqp_encode_64(encoded, &offset, m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->redelivered) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ || !amqp_encode_bytes(encoded, &offset, m->exchange))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ || !amqp_encode_bytes(encoded, &offset, m->routing_key))
+ return -ERROR_BAD_AMQP_DATA;
+ if (!amqp_encode_32(encoded, &offset, m->message_count)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_GET_EMPTY_METHOD: {
+ amqp_basic_get_empty_t *m = (amqp_basic_get_empty_t *) decoded;
+ if (!amqp_encode_8(encoded, &offset, m->cluster_id.len)
+ || !amqp_encode_bytes(encoded, &offset, m->cluster_id))
+ return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_ACK_METHOD: {
+ amqp_basic_ack_t *m = (amqp_basic_ack_t *) decoded;
+ if (!amqp_encode_64(encoded, &offset, m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->multiple) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_REJECT_METHOD: {
+ amqp_basic_reject_t *m = (amqp_basic_reject_t *) decoded;
+ if (!amqp_encode_64(encoded, &offset, m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->requeue) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_RECOVER_ASYNC_METHOD: {
+ amqp_basic_recover_async_t *m = (amqp_basic_recover_async_t *) decoded;
+ bit_buffer = 0;
+ if (m->requeue) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_RECOVER_METHOD: {
+ amqp_basic_recover_t *m = (amqp_basic_recover_t *) decoded;
+ bit_buffer = 0;
+ if (m->requeue) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_BASIC_RECOVER_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_BASIC_NACK_METHOD: {
+ amqp_basic_nack_t *m = (amqp_basic_nack_t *) decoded;
+ if (!amqp_encode_64(encoded, &offset, m->delivery_tag)) return -ERROR_BAD_AMQP_DATA;
+ bit_buffer = 0;
+ if (m->multiple) bit_buffer |= (1 << 0);
+ if (m->requeue) bit_buffer |= (1 << 1);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_TX_SELECT_METHOD: {
+ return offset;
+ }
+ case AMQP_TX_SELECT_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_TX_COMMIT_METHOD: {
+ return offset;
+ }
+ case AMQP_TX_COMMIT_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_TX_ROLLBACK_METHOD: {
+ return offset;
+ }
+ case AMQP_TX_ROLLBACK_OK_METHOD: {
+ return offset;
+ }
+ case AMQP_CONFIRM_SELECT_METHOD: {
+ amqp_confirm_select_t *m = (amqp_confirm_select_t *) decoded;
+ bit_buffer = 0;
+ if (m->nowait) bit_buffer |= (1 << 0);
+ if (!amqp_encode_8(encoded, &offset, bit_buffer)) return -ERROR_BAD_AMQP_DATA;
+ return offset;
+ }
+ case AMQP_CONFIRM_SELECT_OK_METHOD: {
+ return offset;
+ }
+ default: return -ERROR_UNKNOWN_METHOD;
+ }
+}
+
+int amqp_encode_properties(uint16_t class_id,
+ void *decoded,
+ amqp_bytes_t encoded)
+{
+ size_t offset = 0;
+
+ /* Cheat, and get the flags out generically, relying on the
+ similarity of structure between classes */
+ amqp_flags_t flags = * (amqp_flags_t *) decoded; /* cheating! */
+
+ {
+ /* We take a copy of flags to avoid destroying it, as it is used
+ in the autogenerated code below. */
+ amqp_flags_t remaining_flags = flags;
+ do {
+ amqp_flags_t remainder = remaining_flags >> 16;
+ uint16_t partial_flags = remaining_flags & 0xFFFE;
+ if (remainder != 0) { partial_flags |= 1; }
+ if (!amqp_encode_16(encoded, &offset, partial_flags))
+ return -ERROR_BAD_AMQP_DATA;
+ remaining_flags = remainder;
+ } while (remaining_flags != 0);
+ }
+
+ switch (class_id) {
+ case 10: {
+ return offset;
+ }
+ case 20: {
+ return offset;
+ }
+ case 30: {
+ return offset;
+ }
+ case 40: {
+ return offset;
+ }
+ case 50: {
+ return offset;
+ }
+ case 60: {
+ amqp_basic_properties_t *p = (amqp_basic_properties_t *) decoded;
+ if (flags & AMQP_BASIC_CONTENT_TYPE_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->content_type.len)
+ || !amqp_encode_bytes(encoded, &offset, p->content_type))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_CONTENT_ENCODING_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->content_encoding.len)
+ || !amqp_encode_bytes(encoded, &offset, p->content_encoding))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_HEADERS_FLAG) {
+ {
+ int res = amqp_encode_table(encoded, &(p->headers), &offset);
+ if (res < 0) return res;
+ }
+ }
+ if (flags & AMQP_BASIC_DELIVERY_MODE_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->delivery_mode)) return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_PRIORITY_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->priority)) return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_CORRELATION_ID_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->correlation_id.len)
+ || !amqp_encode_bytes(encoded, &offset, p->correlation_id))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_REPLY_TO_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->reply_to.len)
+ || !amqp_encode_bytes(encoded, &offset, p->reply_to))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_EXPIRATION_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->expiration.len)
+ || !amqp_encode_bytes(encoded, &offset, p->expiration))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_MESSAGE_ID_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->message_id.len)
+ || !amqp_encode_bytes(encoded, &offset, p->message_id))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_TIMESTAMP_FLAG) {
+ if (!amqp_encode_64(encoded, &offset, p->timestamp)) return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_TYPE_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->type.len)
+ || !amqp_encode_bytes(encoded, &offset, p->type))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_USER_ID_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->user_id.len)
+ || !amqp_encode_bytes(encoded, &offset, p->user_id))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_APP_ID_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->app_id.len)
+ || !amqp_encode_bytes(encoded, &offset, p->app_id))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ if (flags & AMQP_BASIC_CLUSTER_ID_FLAG) {
+ if (!amqp_encode_8(encoded, &offset, p->cluster_id.len)
+ || !amqp_encode_bytes(encoded, &offset, p->cluster_id))
+ return -ERROR_BAD_AMQP_DATA;
+ }
+ return offset;
+ }
+ case 90: {
+ return offset;
+ }
+ case 85: {
+ return offset;
+ }
+ default: return -ERROR_UNKNOWN_CLASS;
+ }
+}
+
+AMQP_PUBLIC_FUNCTION amqp_channel_open_ok_t * AMQP_CALL amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel)
+{
+ amqp_channel_open_t req;
+ req.out_of_band = amqp_empty_bytes;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_CHANNEL_OPEN_METHOD, AMQP_CHANNEL_OPEN_OK_METHOD, &req);
+}
+
+
+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_channel_flow_t req;
+ req.active = active;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_CHANNEL_FLOW_METHOD, AMQP_CHANNEL_FLOW_OK_METHOD, &req);
+}
+
+
+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_table_t arguments)
+{
+ amqp_exchange_declare_t req;
+ req.ticket = 0;
+ req.exchange = exchange;
+ req.type = type;
+ req.passive = passive;
+ req.durable = durable;
+ req.auto_delete = 0;
+ req.internal = 0;
+ req.nowait = 0;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_EXCHANGE_DECLARE_METHOD, AMQP_EXCHANGE_DECLARE_OK_METHOD, &req);
+}
+
+
+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_delete_t req;
+ req.ticket = 0;
+ req.exchange = exchange;
+ req.if_unused = if_unused;
+ req.nowait = 0;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_EXCHANGE_DELETE_METHOD, AMQP_EXCHANGE_DELETE_OK_METHOD, &req);
+}
+
+
+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_bind_t req;
+ req.ticket = 0;
+ req.destination = destination;
+ req.source = source;
+ req.routing_key = routing_key;
+ req.nowait = 0;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_EXCHANGE_BIND_METHOD, AMQP_EXCHANGE_BIND_OK_METHOD, &req);
+}
+
+
+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_exchange_unbind_t req;
+ req.ticket = 0;
+ req.destination = destination;
+ req.source = source;
+ req.routing_key = routing_key;
+ req.nowait = 0;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_EXCHANGE_UNBIND_METHOD, AMQP_EXCHANGE_UNBIND_OK_METHOD, &req);
+}
+
+
+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_declare_t req;
+ req.ticket = 0;
+ req.queue = queue;
+ req.passive = passive;
+ req.durable = durable;
+ req.exclusive = exclusive;
+ req.auto_delete = auto_delete;
+ req.nowait = 0;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_QUEUE_DECLARE_METHOD, AMQP_QUEUE_DECLARE_OK_METHOD, &req);
+}
+
+
+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_bind_t req;
+ req.ticket = 0;
+ req.queue = queue;
+ req.exchange = exchange;
+ req.routing_key = routing_key;
+ req.nowait = 0;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_QUEUE_BIND_METHOD, AMQP_QUEUE_BIND_OK_METHOD, &req);
+}
+
+
+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_purge_t req;
+ req.ticket = 0;
+ req.queue = queue;
+ req.nowait = 0;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_QUEUE_PURGE_METHOD, AMQP_QUEUE_PURGE_OK_METHOD, &req);
+}
+
+
+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_delete_t req;
+ req.ticket = 0;
+ req.queue = queue;
+ req.if_unused = if_unused;
+ req.if_empty = if_empty;
+ req.nowait = 0;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_QUEUE_DELETE_METHOD, AMQP_QUEUE_DELETE_OK_METHOD, &req);
+}
+
+
+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_queue_unbind_t req;
+ req.ticket = 0;
+ req.queue = queue;
+ req.exchange = exchange;
+ req.routing_key = routing_key;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_QUEUE_UNBIND_METHOD, AMQP_QUEUE_UNBIND_OK_METHOD, &req);
+}
+
+
+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_qos_t req;
+ req.prefetch_size = prefetch_size;
+ req.prefetch_count = prefetch_count;
+ req.global = global;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_BASIC_QOS_METHOD, AMQP_BASIC_QOS_OK_METHOD, &req);
+}
+
+
+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_consume_t req;
+ req.ticket = 0;
+ req.queue = queue;
+ req.consumer_tag = consumer_tag;
+ req.no_local = no_local;
+ req.no_ack = no_ack;
+ req.exclusive = exclusive;
+ req.nowait = 0;
+ req.arguments = arguments;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_BASIC_CONSUME_METHOD, AMQP_BASIC_CONSUME_OK_METHOD, &req);
+}
+
+
+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_cancel_t req;
+ req.consumer_tag = consumer_tag;
+ req.nowait = 0;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_BASIC_CANCEL_METHOD, AMQP_BASIC_CANCEL_OK_METHOD, &req);
+}
+
+
+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_basic_recover_t req;
+ req.requeue = requeue;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_BASIC_RECOVER_METHOD, AMQP_BASIC_RECOVER_OK_METHOD, &req);
+}
+
+
+AMQP_PUBLIC_FUNCTION amqp_tx_select_ok_t * AMQP_CALL amqp_tx_select(amqp_connection_state_t state, amqp_channel_t channel)
+{
+ amqp_tx_select_t req;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_TX_SELECT_METHOD, AMQP_TX_SELECT_OK_METHOD, &req);
+}
+
+
+AMQP_PUBLIC_FUNCTION amqp_tx_commit_ok_t * AMQP_CALL amqp_tx_commit(amqp_connection_state_t state, amqp_channel_t channel)
+{
+ amqp_tx_commit_t req;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_TX_COMMIT_METHOD, AMQP_TX_COMMIT_OK_METHOD, &req);
+}
+
+
+AMQP_PUBLIC_FUNCTION amqp_tx_rollback_ok_t * AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state, amqp_channel_t channel)
+{
+ amqp_tx_rollback_t req;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_TX_ROLLBACK_METHOD, AMQP_TX_ROLLBACK_OK_METHOD, &req);
+}
+
+
+AMQP_PUBLIC_FUNCTION amqp_confirm_select_ok_t * AMQP_CALL amqp_confirm_select(amqp_connection_state_t state, amqp_channel_t channel)
+{
+ amqp_confirm_select_t req;
+ req.nowait = 0;
+
+ return amqp_simple_rpc_decoded(state, channel, AMQP_CONFIRM_SELECT_METHOD, AMQP_CONFIRM_SELECT_OK_METHOD, &req);
+}
+
diff --git a/librabbitmq/amqp_framing.h b/librabbitmq/amqp_framing.h
new file mode 100644
index 0000000..baf7771
--- /dev/null
+++ b/librabbitmq/amqp_framing.h
@@ -0,0 +1,627 @@
+/* Generated code. Do not edit. Edit and re-run codegen.py instead.
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MIT
+ *
+ * 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_FRAMING_H
+#define AMQP_FRAMING_H
+
+#include <amqp.h>
+
+AMQP_BEGIN_DECLS
+
+#define AMQP_PROTOCOL_VERSION_MAJOR 0
+#define AMQP_PROTOCOL_VERSION_MINOR 9
+#define AMQP_PROTOCOL_VERSION_REVISION 1
+#define AMQP_PROTOCOL_PORT 5672
+#define AMQP_FRAME_METHOD 1
+#define AMQP_FRAME_HEADER 2
+#define AMQP_FRAME_BODY 3
+#define AMQP_FRAME_HEARTBEAT 8
+#define AMQP_FRAME_MIN_SIZE 4096
+#define AMQP_FRAME_END 206
+#define AMQP_REPLY_SUCCESS 200
+#define AMQP_CONTENT_TOO_LARGE 311
+#define AMQP_NO_ROUTE 312
+#define AMQP_NO_CONSUMERS 313
+#define AMQP_ACCESS_REFUSED 403
+#define AMQP_NOT_FOUND 404
+#define AMQP_RESOURCE_LOCKED 405
+#define AMQP_PRECONDITION_FAILED 406
+#define AMQP_CONNECTION_FORCED 320
+#define AMQP_INVALID_PATH 402
+#define AMQP_FRAME_ERROR 501
+#define AMQP_SYNTAX_ERROR 502
+#define AMQP_COMMAND_INVALID 503
+#define AMQP_CHANNEL_ERROR 504
+#define AMQP_UNEXPECTED_FRAME 505
+#define AMQP_RESOURCE_ERROR 506
+#define AMQP_NOT_ALLOWED 530
+#define AMQP_NOT_IMPLEMENTED 540
+#define AMQP_INTERNAL_ERROR 541
+
+/* Function prototypes. */
+
+AMQP_PUBLIC_FUNCTION
+char const *
+AMQP_CALL amqp_constant_name(int constantNumber);
+
+AMQP_PUBLIC_FUNCTION
+amqp_boolean_t
+AMQP_CALL amqp_constant_is_hard_error(int constantNumber);
+
+AMQP_PUBLIC_FUNCTION
+char const *
+AMQP_CALL amqp_method_name(amqp_method_number_t methodNumber);
+
+AMQP_PUBLIC_FUNCTION
+amqp_boolean_t
+AMQP_CALL amqp_method_has_content(amqp_method_number_t methodNumber);
+
+AMQP_PUBLIC_FUNCTION
+int
+AMQP_CALL amqp_decode_method(amqp_method_number_t methodNumber,
+ amqp_pool_t *pool,
+ amqp_bytes_t encoded,
+ void **decoded);
+
+AMQP_PUBLIC_FUNCTION
+int
+AMQP_CALL amqp_decode_properties(uint16_t class_id,
+ amqp_pool_t *pool,
+ amqp_bytes_t encoded,
+ void **decoded);
+
+AMQP_PUBLIC_FUNCTION
+int
+AMQP_CALL amqp_encode_method(amqp_method_number_t methodNumber,
+ void *decoded,
+ amqp_bytes_t encoded);
+
+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) /* 10, 10; 655370 */
+typedef struct amqp_connection_start_t_ {
+ uint8_t version_major;
+ uint8_t version_minor;
+ amqp_table_t server_properties;
+ amqp_bytes_t mechanisms;
+ amqp_bytes_t locales;
+} amqp_connection_start_t;
+
+#define AMQP_CONNECTION_START_OK_METHOD ((amqp_method_number_t) 0x000A000B) /* 10, 11; 655371 */
+typedef struct amqp_connection_start_ok_t_ {
+ amqp_table_t client_properties;
+ amqp_bytes_t mechanism;
+ amqp_bytes_t response;
+ amqp_bytes_t locale;
+} amqp_connection_start_ok_t;
+
+#define AMQP_CONNECTION_SECURE_METHOD ((amqp_method_number_t) 0x000A0014) /* 10, 20; 655380 */
+typedef struct amqp_connection_secure_t_ {
+ amqp_bytes_t challenge;
+} amqp_connection_secure_t;
+
+#define AMQP_CONNECTION_SECURE_OK_METHOD ((amqp_method_number_t) 0x000A0015) /* 10, 21; 655381 */
+typedef struct amqp_connection_secure_ok_t_ {
+ amqp_bytes_t response;
+} amqp_connection_secure_ok_t;
+
+#define AMQP_CONNECTION_TUNE_METHOD ((amqp_method_number_t) 0x000A001E) /* 10, 30; 655390 */
+typedef struct amqp_connection_tune_t_ {
+ uint16_t channel_max;
+ uint32_t frame_max;
+ uint16_t heartbeat;
+} amqp_connection_tune_t;
+
+#define AMQP_CONNECTION_TUNE_OK_METHOD ((amqp_method_number_t) 0x000A001F) /* 10, 31; 655391 */
+typedef struct amqp_connection_tune_ok_t_ {
+ uint16_t channel_max;
+ uint32_t frame_max;
+ uint16_t heartbeat;
+} amqp_connection_tune_ok_t;
+
+#define AMQP_CONNECTION_OPEN_METHOD ((amqp_method_number_t) 0x000A0028) /* 10, 40; 655400 */
+typedef struct amqp_connection_open_t_ {
+ amqp_bytes_t virtual_host;
+ amqp_bytes_t capabilities;
+ amqp_boolean_t insist;
+} amqp_connection_open_t;
+
+#define AMQP_CONNECTION_OPEN_OK_METHOD ((amqp_method_number_t) 0x000A0029) /* 10, 41; 655401 */
+typedef struct amqp_connection_open_ok_t_ {
+ amqp_bytes_t known_hosts;
+} amqp_connection_open_ok_t;
+
+#define AMQP_CONNECTION_CLOSE_METHOD ((amqp_method_number_t) 0x000A0032) /* 10, 50; 655410 */
+typedef struct amqp_connection_close_t_ {
+ uint16_t reply_code;
+ amqp_bytes_t reply_text;
+ uint16_t class_id;
+ uint16_t method_id;
+} amqp_connection_close_t;
+
+#define AMQP_CONNECTION_CLOSE_OK_METHOD ((amqp_method_number_t) 0x000A0033) /* 10, 51; 655411 */
+typedef struct amqp_connection_close_ok_t_ {
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_connection_close_ok_t;
+
+#define AMQP_CHANNEL_OPEN_METHOD ((amqp_method_number_t) 0x0014000A) /* 20, 10; 1310730 */
+typedef struct amqp_channel_open_t_ {
+ amqp_bytes_t out_of_band;
+} amqp_channel_open_t;
+
+#define AMQP_CHANNEL_OPEN_OK_METHOD ((amqp_method_number_t) 0x0014000B) /* 20, 11; 1310731 */
+typedef struct amqp_channel_open_ok_t_ {
+ amqp_bytes_t channel_id;
+} amqp_channel_open_ok_t;
+
+#define AMQP_CHANNEL_FLOW_METHOD ((amqp_method_number_t) 0x00140014) /* 20, 20; 1310740 */
+typedef struct amqp_channel_flow_t_ {
+ amqp_boolean_t active;
+} amqp_channel_flow_t;
+
+#define AMQP_CHANNEL_FLOW_OK_METHOD ((amqp_method_number_t) 0x00140015) /* 20, 21; 1310741 */
+typedef struct amqp_channel_flow_ok_t_ {
+ amqp_boolean_t active;
+} amqp_channel_flow_ok_t;
+
+#define AMQP_CHANNEL_CLOSE_METHOD ((amqp_method_number_t) 0x00140028) /* 20, 40; 1310760 */
+typedef struct amqp_channel_close_t_ {
+ uint16_t reply_code;
+ amqp_bytes_t reply_text;
+ uint16_t class_id;
+ uint16_t method_id;
+} amqp_channel_close_t;
+
+#define AMQP_CHANNEL_CLOSE_OK_METHOD ((amqp_method_number_t) 0x00140029) /* 20, 41; 1310761 */
+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) /* 30, 10; 1966090 */
+typedef struct amqp_access_request_t_ {
+ amqp_bytes_t realm;
+ amqp_boolean_t exclusive;
+ amqp_boolean_t passive;
+ amqp_boolean_t active;
+ amqp_boolean_t write;
+ amqp_boolean_t read;
+} amqp_access_request_t;
+
+#define AMQP_ACCESS_REQUEST_OK_METHOD ((amqp_method_number_t) 0x001E000B) /* 30, 11; 1966091 */
+typedef struct amqp_access_request_ok_t_ {
+ uint16_t ticket;
+} amqp_access_request_ok_t;
+
+#define AMQP_EXCHANGE_DECLARE_METHOD ((amqp_method_number_t) 0x0028000A) /* 40, 10; 2621450 */
+typedef struct amqp_exchange_declare_t_ {
+ uint16_t ticket;
+ 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_boolean_t nowait;
+ amqp_table_t arguments;
+} amqp_exchange_declare_t;
+
+#define AMQP_EXCHANGE_DECLARE_OK_METHOD ((amqp_method_number_t) 0x0028000B) /* 40, 11; 2621451 */
+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) /* 40, 20; 2621460 */
+typedef struct amqp_exchange_delete_t_ {
+ uint16_t ticket;
+ amqp_bytes_t exchange;
+ amqp_boolean_t if_unused;
+ amqp_boolean_t nowait;
+} amqp_exchange_delete_t;
+
+#define AMQP_EXCHANGE_DELETE_OK_METHOD ((amqp_method_number_t) 0x00280015) /* 40, 21; 2621461 */
+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) /* 40, 30; 2621470 */
+typedef struct amqp_exchange_bind_t_ {
+ uint16_t ticket;
+ amqp_bytes_t destination;
+ amqp_bytes_t source;
+ amqp_bytes_t routing_key;
+ amqp_boolean_t nowait;
+ amqp_table_t arguments;
+} amqp_exchange_bind_t;
+
+#define AMQP_EXCHANGE_BIND_OK_METHOD ((amqp_method_number_t) 0x0028001F) /* 40, 31; 2621471 */
+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) /* 40, 40; 2621480 */
+typedef struct amqp_exchange_unbind_t_ {
+ uint16_t ticket;
+ amqp_bytes_t destination;
+ amqp_bytes_t source;
+ amqp_bytes_t routing_key;
+ amqp_boolean_t nowait;
+ amqp_table_t arguments;
+} amqp_exchange_unbind_t;
+
+#define AMQP_EXCHANGE_UNBIND_OK_METHOD ((amqp_method_number_t) 0x00280033) /* 40, 51; 2621491 */
+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) /* 50, 10; 3276810 */
+typedef struct amqp_queue_declare_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_boolean_t passive;
+ amqp_boolean_t durable;
+ amqp_boolean_t exclusive;
+ amqp_boolean_t auto_delete;
+ amqp_boolean_t nowait;
+ amqp_table_t arguments;
+} amqp_queue_declare_t;
+
+#define AMQP_QUEUE_DECLARE_OK_METHOD ((amqp_method_number_t) 0x0032000B) /* 50, 11; 3276811 */
+typedef struct amqp_queue_declare_ok_t_ {
+ amqp_bytes_t queue;
+ uint32_t message_count;
+ uint32_t consumer_count;
+} amqp_queue_declare_ok_t;
+
+#define AMQP_QUEUE_BIND_METHOD ((amqp_method_number_t) 0x00320014) /* 50, 20; 3276820 */
+typedef struct amqp_queue_bind_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_bytes_t exchange;
+ amqp_bytes_t routing_key;
+ amqp_boolean_t nowait;
+ amqp_table_t arguments;
+} amqp_queue_bind_t;
+
+#define AMQP_QUEUE_BIND_OK_METHOD ((amqp_method_number_t) 0x00320015) /* 50, 21; 3276821 */
+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) /* 50, 30; 3276830 */
+typedef struct amqp_queue_purge_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_boolean_t nowait;
+} amqp_queue_purge_t;
+
+#define AMQP_QUEUE_PURGE_OK_METHOD ((amqp_method_number_t) 0x0032001F) /* 50, 31; 3276831 */
+typedef struct amqp_queue_purge_ok_t_ {
+ uint32_t message_count;
+} amqp_queue_purge_ok_t;
+
+#define AMQP_QUEUE_DELETE_METHOD ((amqp_method_number_t) 0x00320028) /* 50, 40; 3276840 */
+typedef struct amqp_queue_delete_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_boolean_t if_unused;
+ amqp_boolean_t if_empty;
+ amqp_boolean_t nowait;
+} amqp_queue_delete_t;
+
+#define AMQP_QUEUE_DELETE_OK_METHOD ((amqp_method_number_t) 0x00320029) /* 50, 41; 3276841 */
+typedef struct amqp_queue_delete_ok_t_ {
+ uint32_t message_count;
+} amqp_queue_delete_ok_t;
+
+#define AMQP_QUEUE_UNBIND_METHOD ((amqp_method_number_t) 0x00320032) /* 50, 50; 3276850 */
+typedef struct amqp_queue_unbind_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_bytes_t exchange;
+ amqp_bytes_t routing_key;
+ amqp_table_t arguments;
+} amqp_queue_unbind_t;
+
+#define AMQP_QUEUE_UNBIND_OK_METHOD ((amqp_method_number_t) 0x00320033) /* 50, 51; 3276851 */
+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) /* 60, 10; 3932170 */
+typedef struct amqp_basic_qos_t_ {
+ uint32_t prefetch_size;
+ uint16_t prefetch_count;
+ amqp_boolean_t global;
+} amqp_basic_qos_t;
+
+#define AMQP_BASIC_QOS_OK_METHOD ((amqp_method_number_t) 0x003C000B) /* 60, 11; 3932171 */
+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) /* 60, 20; 3932180 */
+typedef struct amqp_basic_consume_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_bytes_t consumer_tag;
+ amqp_boolean_t no_local;
+ amqp_boolean_t no_ack;
+ amqp_boolean_t exclusive;
+ amqp_boolean_t nowait;
+ amqp_table_t arguments;
+} amqp_basic_consume_t;
+
+#define AMQP_BASIC_CONSUME_OK_METHOD ((amqp_method_number_t) 0x003C0015) /* 60, 21; 3932181 */
+typedef struct amqp_basic_consume_ok_t_ {
+ amqp_bytes_t consumer_tag;
+} amqp_basic_consume_ok_t;
+
+#define AMQP_BASIC_CANCEL_METHOD ((amqp_method_number_t) 0x003C001E) /* 60, 30; 3932190 */
+typedef struct amqp_basic_cancel_t_ {
+ amqp_bytes_t consumer_tag;
+ amqp_boolean_t nowait;
+} amqp_basic_cancel_t;
+
+#define AMQP_BASIC_CANCEL_OK_METHOD ((amqp_method_number_t) 0x003C001F) /* 60, 31; 3932191 */
+typedef struct amqp_basic_cancel_ok_t_ {
+ amqp_bytes_t consumer_tag;
+} amqp_basic_cancel_ok_t;
+
+#define AMQP_BASIC_PUBLISH_METHOD ((amqp_method_number_t) 0x003C0028) /* 60, 40; 3932200 */
+typedef struct amqp_basic_publish_t_ {
+ uint16_t ticket;
+ amqp_bytes_t exchange;
+ amqp_bytes_t routing_key;
+ amqp_boolean_t mandatory;
+ amqp_boolean_t immediate;
+} amqp_basic_publish_t;
+
+#define AMQP_BASIC_RETURN_METHOD ((amqp_method_number_t) 0x003C0032) /* 60, 50; 3932210 */
+typedef struct amqp_basic_return_t_ {
+ uint16_t reply_code;
+ amqp_bytes_t reply_text;
+ amqp_bytes_t exchange;
+ amqp_bytes_t routing_key;
+} amqp_basic_return_t;
+
+#define AMQP_BASIC_DELIVER_METHOD ((amqp_method_number_t) 0x003C003C) /* 60, 60; 3932220 */
+typedef struct amqp_basic_deliver_t_ {
+ amqp_bytes_t consumer_tag;
+ uint64_t delivery_tag;
+ amqp_boolean_t redelivered;
+ amqp_bytes_t exchange;
+ amqp_bytes_t routing_key;
+} amqp_basic_deliver_t;
+
+#define AMQP_BASIC_GET_METHOD ((amqp_method_number_t) 0x003C0046) /* 60, 70; 3932230 */
+typedef struct amqp_basic_get_t_ {
+ uint16_t ticket;
+ amqp_bytes_t queue;
+ amqp_boolean_t no_ack;
+} amqp_basic_get_t;
+
+#define AMQP_BASIC_GET_OK_METHOD ((amqp_method_number_t) 0x003C0047) /* 60, 71; 3932231 */
+typedef struct amqp_basic_get_ok_t_ {
+ uint64_t delivery_tag;
+ amqp_boolean_t redelivered;
+ amqp_bytes_t exchange;
+ amqp_bytes_t routing_key;
+ uint32_t message_count;
+} amqp_basic_get_ok_t;
+
+#define AMQP_BASIC_GET_EMPTY_METHOD ((amqp_method_number_t) 0x003C0048) /* 60, 72; 3932232 */
+typedef struct amqp_basic_get_empty_t_ {
+ amqp_bytes_t cluster_id;
+} amqp_basic_get_empty_t;
+
+#define AMQP_BASIC_ACK_METHOD ((amqp_method_number_t) 0x003C0050) /* 60, 80; 3932240 */
+typedef struct amqp_basic_ack_t_ {
+ uint64_t delivery_tag;
+ amqp_boolean_t multiple;
+} amqp_basic_ack_t;
+
+#define AMQP_BASIC_REJECT_METHOD ((amqp_method_number_t) 0x003C005A) /* 60, 90; 3932250 */
+typedef struct amqp_basic_reject_t_ {
+ uint64_t delivery_tag;
+ amqp_boolean_t requeue;
+} amqp_basic_reject_t;
+
+#define AMQP_BASIC_RECOVER_ASYNC_METHOD ((amqp_method_number_t) 0x003C0064) /* 60, 100; 3932260 */
+typedef struct amqp_basic_recover_async_t_ {
+ amqp_boolean_t requeue;
+} amqp_basic_recover_async_t;
+
+#define AMQP_BASIC_RECOVER_METHOD ((amqp_method_number_t) 0x003C006E) /* 60, 110; 3932270 */
+typedef struct amqp_basic_recover_t_ {
+ amqp_boolean_t requeue;
+} amqp_basic_recover_t;
+
+#define AMQP_BASIC_RECOVER_OK_METHOD ((amqp_method_number_t) 0x003C006F) /* 60, 111; 3932271 */
+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) /* 60, 120; 3932280 */
+typedef struct amqp_basic_nack_t_ {
+ uint64_t delivery_tag;
+ amqp_boolean_t multiple;
+ amqp_boolean_t requeue;
+} amqp_basic_nack_t;
+
+#define AMQP_TX_SELECT_METHOD ((amqp_method_number_t) 0x005A000A) /* 90, 10; 5898250 */
+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) /* 90, 11; 5898251 */
+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) /* 90, 20; 5898260 */
+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) /* 90, 21; 5898261 */
+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) /* 90, 30; 5898270 */
+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) /* 90, 31; 5898271 */
+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) /* 85, 10; 5570570 */
+typedef struct amqp_confirm_select_t_ {
+ amqp_boolean_t nowait;
+} amqp_confirm_select_t;
+
+#define AMQP_CONFIRM_SELECT_OK_METHOD ((amqp_method_number_t) 0x0055000B) /* 85, 11; 5570571 */
+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) /* 10 */
+typedef struct amqp_connection_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_connection_properties_t;
+
+#define AMQP_CHANNEL_CLASS (0x0014) /* 20 */
+typedef struct amqp_channel_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_channel_properties_t;
+
+#define AMQP_ACCESS_CLASS (0x001E) /* 30 */
+typedef struct amqp_access_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_access_properties_t;
+
+#define AMQP_EXCHANGE_CLASS (0x0028) /* 40 */
+typedef struct amqp_exchange_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_exchange_properties_t;
+
+#define AMQP_QUEUE_CLASS (0x0032) /* 50 */
+typedef struct amqp_queue_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_queue_properties_t;
+
+#define AMQP_BASIC_CLASS (0x003C) /* 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)
+typedef struct amqp_basic_properties_t_ {
+ amqp_flags_t _flags;
+ amqp_bytes_t content_type;
+ amqp_bytes_t content_encoding;
+ amqp_table_t headers;
+ uint8_t delivery_mode;
+ uint8_t priority;
+ amqp_bytes_t correlation_id;
+ amqp_bytes_t reply_to;
+ amqp_bytes_t expiration;
+ amqp_bytes_t message_id;
+ uint64_t timestamp;
+ amqp_bytes_t type;
+ amqp_bytes_t user_id;
+ amqp_bytes_t app_id;
+ amqp_bytes_t cluster_id;
+} amqp_basic_properties_t;
+
+#define AMQP_TX_CLASS (0x005A) /* 90 */
+typedef struct amqp_tx_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_tx_properties_t;
+
+#define AMQP_CONFIRM_CLASS (0x0055) /* 85 */
+typedef struct amqp_confirm_properties_t_ {
+ amqp_flags_t _flags;
+ char dummy; /* Dummy field to avoid empty struct */
+} amqp_confirm_properties_t;
+
+/* API functions for methods */
+
+AMQP_PUBLIC_FUNCTION amqp_channel_open_ok_t * AMQP_CALL amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel);
+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_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_table_t arguments);
+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_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_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_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_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_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_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_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_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_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_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_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_PUBLIC_FUNCTION amqp_tx_select_ok_t * AMQP_CALL amqp_tx_select(amqp_connection_state_t state, amqp_channel_t channel);
+AMQP_PUBLIC_FUNCTION amqp_tx_commit_ok_t * AMQP_CALL amqp_tx_commit(amqp_connection_state_t state, amqp_channel_t channel);
+AMQP_PUBLIC_FUNCTION amqp_tx_rollback_ok_t * AMQP_CALL amqp_tx_rollback(amqp_connection_state_t state, amqp_channel_t channel);
+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 */
diff --git a/librabbitmq/codegen.py b/librabbitmq/codegen.py
index 3e6ad94..1a2928d 100644
--- a/librabbitmq/codegen.py
+++ b/librabbitmq/codegen.py
@@ -334,7 +334,7 @@ def genErl(spec):
methods = spec.allMethods()
- print """/* Autogenerated code. Do not edit.
+ print """/* Generated code. Do not edit. Edit and re-run codegen.py instead.
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MIT
@@ -552,7 +552,7 @@ def genHrl(spec):
methods = spec.allMethods()
- print """/* Autogenerated code. Do not edit.
+ print """/* Generated code. Do not edit. Edit and re-run codegen.py instead.
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MIT
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index c458e03..10be4df 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -1,4 +1,4 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${librabbitmq_SOURCE_DIR} ${librabbitmq_BINARY_DIR} ${POPT_INCLUDE_DIRS})
+include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${LIBRABBITMQ_INCLUDE_DIRS} ${POPT_INCLUDE_DIRS})
if (WIN32)
set(PLATFORM_DIR win32)