<?xml version="1.0"?>
<!--
Copyright (c) 2009 AMQP Working Group.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<amqp major="8" minor="0" port="5672">
  <constant name="frame method" value="1"/>
  <constant name="frame header" value="2"/>
  <constant name="frame body" value="3"/>
  <constant name="frame oob method" value="4"/>
  <constant name="frame oob header" value="5"/>
  <constant name="frame oob body" value="6"/>
  <constant name="frame trace" value="7"/>
  <constant name="frame heartbeat" value="8"/>
  <constant name="frame min size" value="4096"/>
  <constant name="frame end" value="206"/>
  <constant name="reply success" value="200"/>
  <constant name="not delivered" value="310" class="soft error"/>
  <constant name="content too large" value="311" class="soft error"/>
  <constant name="connection forced" value="320" class="hard error"/>
  <constant name="invalid path" value="402" class="hard error"/>
  <constant name="access refused" value="403" class="soft error"/>
  <constant name="not found" value="404" class="soft error"/>
  <constant name="resource locked" value="405" class="soft error"/>
  <constant name="frame error" value="501" class="hard error"/>
  <constant name="syntax error" value="502" class="hard error"/>
  <constant name="command invalid" value="503" class="hard error"/>
  <constant name="channel error" value="504" class="hard error"/>
  <constant name="resource error" value="506" class="hard error"/>
  <constant name="not allowed" value="530" class="hard error"/>
  <constant name="not implemented" value="540" class="hard error"/>
  <constant name="internal error" value="541" class="hard error"/>
  <domain name="access ticket" type="short">
    <assert check="ne" value="0"/>
  </domain>
  <domain name="class id" type="short"/>
  <domain name="consumer tag" type="shortstr"/>
  <domain name="delivery tag" type="longlong"/>
  <domain name="exchange name" type="shortstr">
    <assert check="length" value="127"/>
  </domain>
  <domain name="known hosts" type="shortstr"/>
  <domain name="method id" type="short"/>
  <domain name="no ack" type="bit"/>
  <domain name="no local" type="bit"/>
  <domain name="path" type="shortstr">
    <assert check="notnull"/>
    <assert check="syntax" rule="path"/>
    <assert check="length" value="127"/>
  </domain>
  <domain name="peer properties" type="table"/>
  <domain name="queue name" type="shortstr">
    <assert check="length" value="127"/>
  </domain>
  <domain name="redelivered" type="bit"/>
  <domain name="reply code" type="short">
    <assert check="notnull"/>
  </domain>
  <domain name="reply text" type="shortstr">
    <assert check="notnull"/>
  </domain>
  <class name="connection" handler="connection" index="10">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="MUST"/>
    <method name="start" synchronous="1" index="10">
      <chassis name="client" implement="MUST"/>
      <response name="start-ok"/>
      <field name="version major" type="octet"/>
      <field name="version minor" type="octet"/>
      <field name="server properties" domain="peer properties"/>
      <field name="mechanisms" type="longstr">
        <see name="security mechanisms"/>
        <assert check="notnull"/>
      </field>
      <field name="locales" type="longstr">
        <assert check="notnull"/>
      </field>
    </method>
    <method name="start-ok" synchronous="1" index="11">
      <chassis name="server" implement="MUST"/>
      <field name="client properties" domain="peer properties"/>
      <field name="mechanism" type="shortstr">
        <assert check="notnull"/>
      </field>
      <field name="response" type="longstr">
        <assert check="notnull"/>
      </field>
      <field name="locale" type="shortstr">
        <assert check="notnull"/>
      </field>
    </method>
    <method name="secure" synchronous="1" index="20">
      <chassis name="client" implement="MUST"/>
      <response name="secure-ok"/>
      <field name="challenge" type="longstr">
        <see name="security mechanisms"/>
      </field>
    </method>
    <method name="secure-ok" synchronous="1" index="21">
      <chassis name="server" implement="MUST"/>
      <field name="response" type="longstr">
        <assert check="notnull"/>
      </field>
    </method>
    <method name="tune" synchronous="1" index="30">
      <chassis name="client" implement="MUST"/>
      <response name="tune-ok"/>
      <field name="channel max" type="short"/>
      <field name="frame max" type="long"/>
      <field name="heartbeat" type="short"/>
    </method>
    <method name="tune-ok" synchronous="1" index="31">
      <chassis name="server" implement="MUST"/>
      <field name="channel max" type="short">
        <assert check="notnull"/>
        <assert check="le" method="tune" field="channel max"/>
      </field>
      <field name="frame max" type="long"/>
      <field name="heartbeat" type="short"/>
    </method>
    <method name="open" synchronous="1" index="40">
      <chassis name="server" implement="MUST"/>
      <response name="open-ok"/>
      <response name="redirect"/>
      <field name="virtual host" domain="path">
        <assert check="regexp" value="^[a-zA-Z0-9/-_]+$"/>
      </field>
      <field name="capabilities" type="shortstr"/>
      <field name="insist" type="bit"/>
    </method>
    <method name="open-ok" synchronous="1" index="41">
      <chassis name="client" implement="MUST"/>
      <field name="known hosts" domain="known hosts"/>
    </method>
    <method name="redirect" synchronous="1" index="50">
      <chassis name="client" implement="MAY"/>
      <field name="host" type="shortstr">
        <assert check="notnull"/>
      </field>
      <field name="known hosts" domain="known hosts"/>
    </method>
    <method name="close" synchronous="1" index="60">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <response name="close-ok"/>
      <field name="reply code" domain="reply code"/>
      <field name="reply text" domain="reply text"/>
      <field name="class id" domain="class id"/>
      <field name="method id" domain="class id"/>
    </method>
    <method name="close-ok" synchronous="1" index="61">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
    </method>
  </class>
  <class name="channel" handler="channel" index="20">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="MUST"/>
    <method name="open" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="open-ok"/>
      <field name="out of band" type="shortstr">
        <assert check="null"/>
      </field>
    </method>
    <method name="open-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="flow" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <chassis name="client" implement="MUST"/>
      <response name="flow-ok"/>
      <field name="active" type="bit"/>
    </method>
    <method name="flow-ok" index="21">
      <chassis name="server" implement="MUST"/>
      <chassis name="client" implement="MUST"/>
      <field name="active" type="bit"/>
    </method>
    <method name="alert" index="30">
      <chassis name="client" implement="MUST"/>
      <field name="reply code" domain="reply code"/>
      <field name="reply text" domain="reply text"/>
      <field name="details" type="table"/>
    </method>
    <method name="close" synchronous="1" index="40">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <response name="close-ok"/>
      <field name="reply code" domain="reply code"/>
      <field name="reply text" domain="reply text"/>
      <field name="class id" domain="class id"/>
      <field name="method id" domain="method id"/>
    </method>
    <method name="close-ok" synchronous="1" index="41">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
    </method>
  </class>
  <class name="access" handler="connection" index="30">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="MUST"/>
    <method name="request" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="request-ok"/>
      <field name="realm" domain="path"/>
      <field name="exclusive" type="bit"/>
      <field name="passive" type="bit"/>
      <field name="active" type="bit"/>
      <field name="write" type="bit"/>
      <field name="read" type="bit"/>
    </method>
    <method name="request-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
      <field name="ticket" domain="access ticket"/>
    </method>
  </class>
  <class name="exchange" handler="channel" index="40">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="MUST"/>
    <method name="declare" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="declare-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="exchange" domain="exchange name">
        <assert check="regexp" value="^[a-zA-Z0-9-_.:]+$"/>
      </field>
      <field name="type" type="shortstr">
        <assert check="regexp" value="^[a-zA-Z0-9-_.:]+$"/>
      </field>
      <field name="passive" type="bit"/>
      <field name="durable" type="bit"/>
      <field name="auto delete" type="bit"/>
      <field name="internal" type="bit"/>
      <field name="nowait" type="bit"/>
      <field name="arguments" type="table"/>
    </method>
    <method name="declare-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="delete" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <response name="delete-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="exchange" domain="exchange name">
        <assert check="notnull"/>
      </field>
      <field name="if unused" type="bit"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="delete-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
    </method>
  </class>
  <class name="queue" handler="channel" index="50">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="MUST"/>
    <method name="declare" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="declare-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name">
        <assert check="regexp" value="^[a-zA-Z0-9-_.:]*$"/>
      </field>
      <field name="passive" type="bit"/>
      <field name="durable" type="bit"/>
      <field name="exclusive" type="bit"/>
      <field name="auto delete" type="bit"/>
      <field name="nowait" type="bit"/>
      <field name="arguments" type="table"/>
    </method>
    <method name="declare-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
      <field name="queue" domain="queue name">
        <assert check="notnull"/>
      </field>
      <field name="message count" type="long"/>
      <field name="consumer count" type="long"/>
    </method>
    <method name="bind" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <response name="bind-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
      <field name="nowait" type="bit"/>
      <field name="arguments" type="table"/>
    </method>
    <method name="bind-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="unbind" synchronous="1" index="50">
      <chassis name="server" implement="MUST"/>
      <response name="unbind-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" domain="shortstr"/>
      <field name="arguments" domain="table"/>
    </method>
    <method name="unbind-ok" synchronous="1" index="51">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="purge" synchronous="1" index="30">
      <chassis name="server" implement="MUST"/>
      <response name="purge-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="purge-ok" synchronous="1" index="31">
      <chassis name="client" implement="MUST"/>
      <field name="message count" type="long"/>
    </method>
    <method name="delete" synchronous="1" index="40">
      <chassis name="server" implement="MUST"/>
      <response name="delete-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="if unused" type="bit"/>
      <field name="if empty" type="bit">
        <test/>
      </field>
      <field name="nowait" type="bit"/>
    </method>
    <method name="delete-ok" synchronous="1" index="41">
      <chassis name="client" implement="MUST"/>
      <field name="message count" type="long"/>
    </method>
  </class>
  <class name="basic" handler="channel" index="60">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="MAY"/>
    <field name="content type" type="shortstr"/>
    <field name="content encoding" type="shortstr"/>
    <field name="headers" type="table"/>
    <field name="delivery mode" type="octet"/>
    <field name="priority" type="octet"/>
    <field name="correlation id" type="shortstr"/>
    <field name="reply to" type="shortstr"/>
    <field name="expiration" type="shortstr"/>
    <field name="message id" type="shortstr"/>
    <field name="timestamp" type="timestamp"/>
    <field name="type" type="shortstr"/>
    <field name="user id" type="shortstr"/>
    <field name="app id" type="shortstr"/>
    <field name="cluster id" type="shortstr"/>
    <method name="qos" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="qos-ok"/>
      <field name="prefetch size" type="long"/>
      <field name="prefetch count" type="short"/>
      <field name="global" type="bit"/>
    </method>
    <method name="qos-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="consume" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <response name="consume-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="no local" domain="no local"/>
      <field name="no ack" domain="no ack"/>
      <field name="exclusive" type="bit"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="consume-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
    </method>
    <method name="cancel" synchronous="1" index="30">
      <chassis name="server" implement="MUST"/>
      <response name="cancel-ok"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="cancel-ok" synchronous="1" index="31">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
    </method>
    <method name="publish" content="1" index="40">
      <chassis name="server" implement="MUST"/>
      <field name="ticket" domain="access ticket"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
      <field name="mandatory" type="bit"/>
      <field name="immediate" type="bit"/>
    </method>
    <method name="return" content="1" index="50">
      <chassis name="client" implement="MUST"/>
      <field name="reply code" domain="reply code"/>
      <field name="reply text" domain="reply text"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
    </method>
    <method name="deliver" content="1" index="60">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="redelivered" domain="redelivered"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
    </method>
    <method name="get" synchronous="1" index="70">
      <response name="get-ok"/>
      <response name="get-empty"/>
      <chassis name="server" implement="MUST"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="no ack" domain="no ack"/>
    </method>
    <method name="get-ok" synchronous="1" content="1" index="71">
      <chassis name="client" implement="MAY"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="redelivered" domain="redelivered"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
      <field name="message count" type="long"/>
    </method>
    <method name="get-empty" synchronous="1" index="72">
      <chassis name="client" implement="MAY"/>
      <field name="cluster id" type="shortstr"/>
    </method>
    <method name="ack" index="80">
      <chassis name="server" implement="MUST"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="multiple" type="bit"/>
    </method>
    <method name="reject" index="90">
      <chassis name="server" implement="MUST"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="requeue" type="bit"/>
    </method>
    <method name="recover" index="100">
      <chassis name="server" implement="MUST"/>
      <field name="requeue" type="bit"/>
    </method>
  </class>
  <class name="file" handler="channel" index="70">
    <chassis name="server" implement="MAY"/>
    <chassis name="client" implement="MAY"/>
    <field name="content type" type="shortstr"/>
    <field name="content encoding" type="shortstr"/>
    <field name="headers" type="table"/>
    <field name="priority" type="octet"/>
    <field name="reply to" type="shortstr"/>
    <field name="message id" type="shortstr"/>
    <field name="filename" type="shortstr"/>
    <field name="timestamp" type="timestamp"/>
    <field name="cluster id" type="shortstr"/>
    <method name="qos" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="qos-ok"/>
      <field name="prefetch size" type="long"/>
      <field name="prefetch count" type="short"/>
      <field name="global" type="bit"/>
    </method>
    <method name="qos-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="consume" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <response name="consume-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="no local" domain="no local"/>
      <field name="no ack" domain="no ack"/>
      <field name="exclusive" type="bit"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="consume-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
    </method>
    <method name="cancel" synchronous="1" index="30">
      <chassis name="server" implement="MUST"/>
      <response name="cancel-ok"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="cancel-ok" synchronous="1" index="31">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
    </method>
    <method name="open" synchronous="1" index="40">
      <response name="open-ok"/>
      <chassis name="server" implement="MUST"/>
      <chassis name="client" implement="MUST"/>
      <field name="identifier" type="shortstr"/>
      <field name="content size" type="longlong"/>
    </method>
    <method name="open-ok" synchronous="1" index="41">
      <response name="stage"/>
      <chassis name="server" implement="MUST"/>
      <chassis name="client" implement="MUST"/>
      <field name="staged size" type="longlong"/>
    </method>
    <method name="stage" content="1" index="50">
      <chassis name="server" implement="MUST"/>
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="publish" index="60">
      <chassis name="server" implement="MUST"/>
      <field name="ticket" domain="access ticket"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
      <field name="mandatory" type="bit"/>
      <field name="immediate" type="bit"/>
      <field name="identifier" type="shortstr"/>
    </method>
    <method name="return" content="1" index="70">
      <chassis name="client" implement="MUST"/>
      <field name="reply code" domain="reply code"/>
      <field name="reply text" domain="reply text"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
    </method>
    <method name="deliver" index="80">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="redelivered" domain="redelivered"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
      <field name="identifier" type="shortstr"/>
    </method>
    <method name="ack" index="90">
      <chassis name="server" implement="MUST"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="multiple" type="bit"/>
    </method>
    <method name="reject" index="100">
      <chassis name="server" implement="MUST"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="requeue" type="bit"/>
    </method>
  </class>
  <class name="stream" handler="channel" index="80">
    <chassis name="server" implement="MAY"/>
    <chassis name="client" implement="MAY"/>
    <field name="content type" type="shortstr"/>
    <field name="content encoding" type="shortstr"/>
    <field name="headers" type="table"/>
    <field name="priority" type="octet"/>
    <field name="timestamp" type="timestamp"/>
    <method name="qos" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="qos-ok"/>
      <field name="prefetch size" type="long"/>
      <field name="prefetch count" type="short"/>
      <field name="consume rate" type="long"/>
      <field name="global" type="bit"/>
    </method>
    <method name="qos-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="consume" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <response name="consume-ok"/>
      <field name="ticket" domain="access ticket"/>
      <field name="queue" domain="queue name"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="no local" domain="no local"/>
      <field name="exclusive" type="bit"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="consume-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
    </method>
    <method name="cancel" synchronous="1" index="30">
      <chassis name="server" implement="MUST"/>
      <response name="cancel-ok"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="nowait" type="bit"/>
    </method>
    <method name="cancel-ok" synchronous="1" index="31">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
    </method>
    <method name="publish" content="1" index="40">
      <chassis name="server" implement="MUST"/>
      <field name="ticket" domain="access ticket"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
      <field name="mandatory" type="bit"/>
      <field name="immediate" type="bit"/>
    </method>
    <method name="return" content="1" index="50">
      <chassis name="client" implement="MUST"/>
      <field name="reply code" domain="reply code"/>
      <field name="reply text" domain="reply text"/>
      <field name="exchange" domain="exchange name"/>
      <field name="routing key" type="shortstr"/>
    </method>
    <method name="deliver" content="1" index="60">
      <chassis name="client" implement="MUST"/>
      <field name="consumer tag" domain="consumer tag"/>
      <field name="delivery tag" domain="delivery tag"/>
      <field name="exchange" domain="exchange name"/>
      <field name="queue" domain="queue name">
        <assert check="notnull"/>
      </field>
    </method>
  </class>
  <class name="tx" handler="channel" index="90">
    <chassis name="server" implement="SHOULD"/>
    <chassis name="client" implement="MAY"/>
    <method name="select" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="select-ok"/>
    </method>
    <method name="select-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="commit" synchronous="1" index="20">
      <chassis name="server" implement="MUST"/>
      <response name="commit-ok"/>
    </method>
    <method name="commit-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="rollback" synchronous="1" index="30">
      <chassis name="server" implement="MUST"/>
      <response name="rollback-ok"/>
    </method>
    <method name="rollback-ok" synchronous="1" index="31">
      <chassis name="client" implement="MUST"/>
    </method>
  </class>
  <class name="dtx" handler="channel" index="100">
    <chassis name="server" implement="MAY"/>
    <chassis name="client" implement="MAY"/>
    <method name="select" synchronous="1" index="10">
      <chassis name="server" implement="MUST"/>
      <response name="select-ok"/>
    </method>
    <method name="select-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
    </method>
    <method name="start" synchronous="1" index="20">
      <chassis name="server" implement="MAY"/>
      <response name="start-ok"/>
      <field name="dtx identifier" type="shortstr">
        <assert check="notnull"/>
      </field>
    </method>
    <method name="start-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
    </method>
  </class>
  <class name="tunnel" handler="tunnel" index="110">
    <chassis name="server" implement="MAY"/>
    <chassis name="client" implement="MAY"/>
    <field name="headers" type="table"/>
    <field name="proxy name" type="shortstr"/>
    <field name="data name" type="shortstr"/>
    <field name="durable" type="octet"/>
    <field name="broadcast" type="octet"/>
    <method name="request" content="1" index="10">
      <chassis name="server" implement="MUST"/>
      <field name="meta data" type="table"/>
    </method>
  </class>
  <class name="test" handler="channel" index="120">
    <chassis name="server" implement="MUST"/>
    <chassis name="client" implement="SHOULD"/>
    <method name="integer" synchronous="1" index="10">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <response name="integer-ok"/>
      <field name="integer 1" type="octet"/>
      <field name="integer 2" type="short"/>
      <field name="integer 3" type="long"/>
      <field name="integer 4" type="longlong"/>
      <field name="operation" type="octet">
        <assert check="enum">
          <value name="add"/>
          <value name="min"/>
          <value name="max"/>
        </assert>
      </field>
    </method>
    <method name="integer-ok" synchronous="1" index="11">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <field name="result" type="longlong"/>
    </method>
    <method name="string" synchronous="1" index="20">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <response name="string-ok"/>
      <field name="string 1" type="shortstr"/>
      <field name="string 2" type="longstr"/>
      <field name="operation" type="octet">
        <assert check="enum">
          <value name="add"/>
          <value name="min"/>
          <value name="max"/>
        </assert>
      </field>
    </method>
    <method name="string-ok" synchronous="1" index="21">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <field name="result" type="longstr"/>
    </method>
    <method name="table" synchronous="1" index="30">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <response name="table-ok"/>
      <field name="table" type="table"/>
      <field name="integer op" type="octet">
        <assert check="enum">
          <value name="add"/>
          <value name="min"/>
          <value name="max"/>
        </assert>
      </field>
      <field name="string op" type="octet">
        <assert check="enum">
          <value name="add"/>
          <value name="min"/>
          <value name="max"/>
        </assert>
      </field>
    </method>
    <method name="table-ok" synchronous="1" index="31">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <field name="integer result" type="longlong"/>
      <field name="string result" type="longstr"/>
    </method>
    <method name="content" synchronous="1" content="1" index="40">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <response name="content-ok"/>
    </method>
    <method name="content-ok" synchronous="1" content="1" index="41">
      <chassis name="client" implement="MUST"/>
      <chassis name="server" implement="MUST"/>
      <field name="content checksum" type="long"/>
    </method>
  </class>
</amqp>
