Wireshark-dev: [Wireshark-dev] AMQP dissector - the code to review
From: Martin Sustrik <sustrik@xxxxxxxxxx>
Date: Thu, 22 Mar 2007 11:37:24 +0100
Ronnie,Here's the code and a sample capture. Is there anyting else I should do? What's the process for getting things into the codebase?
Thanks. Martin ronnie sahlberg wrote:
For inclusion into mainline wireshark, please send the patch to the list for revies (unless it is very large in case a url is better) also please provide a few example captures that we can use to test the dissector with.
/*--------------------------------------------------------------------
AMQP Wireshark dissector plug-in
Author: Martin Sustrik <martin@xxxxxxxxxx>
Copyright (c) 1996-2007 iMatix Corporation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
----------------------------------------------------------------------*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <gmodule.h>
#include <glib.h>
#include <epan/packet.h>
#include <epan/emem.h>
#include <epan/dissectors/packet-tcp.h>
#include <epan/prefs.h>
/* Generic data */
static int amqp_port = 5672;
static dissector_handle_t amqp_handle;
/* Generic defines */
#define AMQP_FRAME_TYPE_METHOD 1
#define AMQP_FRAME_TYPE_CONTENT_HEADER 2
#define AMQP_FRAME_TYPE_CONTENT_BODY 3
#define AMQP_FRAME_TYPE_OOB_METHOD 4
#define AMQP_FRAME_TYPE_OOB_CONTENT_HEADER 5
#define AMQP_FRAME_TYPE_OOB_CONTENT_BODY 6
#define AMQP_FRAME_TYPE_TRACE 7
#define AMQP_FRAME_TYPE_HEARTBEAT 8
/* Registration functions for the dissctor */
void proto_register_amqp ();
void proto_reg_handoff_amqp ();
/* Private functions */
static void dissect_amqp (tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree);
static guint get_amqp_message_len (packet_info *pinfo, tvbuff_t *tvb,
int offset);
static void dissect_amqp_message (tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree);
static void dissect_amqp_field_table (tvbuff_t *tvb, size_t offset,
size_t length, proto_item *item);
/* Various handles */
static int proto_amqp = -1;
static int hf_amqp_info = -1;
static int hf_amqp_type = -1;
static int hf_amqp_channel = -1;
static int hf_amqp_length = -1;
static int hf_amqp_method_class_id = -1;
static int hf_amqp_method_connection_method_id = -1;
static int hf_amqp_method_channel_method_id = -1;
static int hf_amqp_method_access_method_id = -1;
static int hf_amqp_method_exchange_method_id = -1;
static int hf_amqp_method_queue_method_id = -1;
static int hf_amqp_method_basic_method_id = -1;
static int hf_amqp_method_file_method_id = -1;
static int hf_amqp_method_stream_method_id = -1;
static int hf_amqp_method_tx_method_id = -1;
static int hf_amqp_method_dtx_method_id = -1;
static int hf_amqp_method_tunnel_method_id = -1;
static int hf_amqp_method_test_method_id = -1;
static int hf_amqp_method_arguments = -1;
static int hf_amqp_method_connection_start_version_major = -1;
static int hf_amqp_method_connection_start_version_minor = -1;
static int hf_amqp_method_connection_start_server_properties = -1;
static int hf_amqp_method_connection_start_mechanisms = -1;
static int hf_amqp_method_connection_start_locales = -1;
static int hf_amqp_method_connection_start_ok_client_properties = -1;
static int hf_amqp_method_connection_start_ok_mechanism = -1;
static int hf_amqp_method_connection_start_ok_response = -1;
static int hf_amqp_method_connection_start_ok_locale = -1;
static int hf_amqp_method_connection_secure_challenge = -1;
static int hf_amqp_method_connection_secure_ok_response = -1;
static int hf_amqp_method_connection_tune_channel_max = -1;
static int hf_amqp_method_connection_tune_frame_max = -1;
static int hf_amqp_method_connection_tune_heartbeat = -1;
static int hf_amqp_method_connection_tune_ok_channel_max = -1;
static int hf_amqp_method_connection_tune_ok_frame_max = -1;
static int hf_amqp_method_connection_tune_ok_heartbeat = -1;
static int hf_amqp_method_connection_open_virtual_host = -1;
static int hf_amqp_method_connection_open_capabilities = -1;
static int hf_amqp_method_connection_open_insist = -1;
static int hf_amqp_method_connection_open_ok_known_hosts = -1;
static int hf_amqp_method_connection_redirect_host = -1;
static int hf_amqp_method_connection_redirect_known_hosts = -1;
static int hf_amqp_method_connection_close_reply_code = -1;
static int hf_amqp_method_connection_close_reply_text = -1;
static int hf_amqp_method_connection_close_class_id = -1;
static int hf_amqp_method_connection_close_method_id = -1;
static int hf_amqp_method_channel_open_out_of_band = -1;
static int hf_amqp_method_channel_flow_active = -1;
static int hf_amqp_method_channel_flow_ok_active = -1;
static int hf_amqp_method_channel_alert_reply_code = -1;
static int hf_amqp_method_channel_alert_reply_text = -1;
static int hf_amqp_method_channel_alert_details = -1;
static int hf_amqp_method_channel_close_reply_code = -1;
static int hf_amqp_method_channel_close_reply_text = -1;
static int hf_amqp_method_channel_close_class_id = -1;
static int hf_amqp_method_channel_close_method_id = -1;
static int hf_amqp_method_access_request_realm = -1;
static int hf_amqp_method_access_request_exclusive = -1;
static int hf_amqp_method_access_request_passive = -1;
static int hf_amqp_method_access_request_active = -1;
static int hf_amqp_method_access_request_write = -1;
static int hf_amqp_method_access_request_read = -1;
static int hf_amqp_method_access_request_ok_ticket = -1;
static int hf_amqp_method_exchange_declare_ticket = -1;
static int hf_amqp_method_exchange_declare_exchange = -1;
static int hf_amqp_method_exchange_declare_type = -1;
static int hf_amqp_method_exchange_declare_passive = -1;
static int hf_amqp_method_exchange_declare_durable = -1;
static int hf_amqp_method_exchange_declare_auto_delete = -1;
static int hf_amqp_method_exchange_declare_internal = -1;
static int hf_amqp_method_exchange_declare_nowait = -1;
static int hf_amqp_method_exchange_declare_arguments = -1;
static int hf_amqp_method_exchange_delete_ticket = -1;
static int hf_amqp_method_exchange_delete_exchange = -1;
static int hf_amqp_method_exchange_delete_if_unused = -1;
static int hf_amqp_method_exchange_delete_nowait = -1;
static int hf_amqp_method_queue_declare_ticket = -1;
static int hf_amqp_method_queue_declare_queue = -1;
static int hf_amqp_method_queue_declare_passive = -1;
static int hf_amqp_method_queue_declare_durable = -1;
static int hf_amqp_method_queue_declare_exclusive = -1;
static int hf_amqp_method_queue_declare_auto_delete = -1;
static int hf_amqp_method_queue_declare_nowait = -1;
static int hf_amqp_method_queue_declare_arguments = -1;
static int hf_amqp_method_queue_declare_ok_queue = -1;
static int hf_amqp_method_queue_declare_ok_message_count = -1;
static int hf_amqp_method_queue_declare_ok_consumer_count = -1;
static int hf_amqp_method_queue_bind_ticket = -1;
static int hf_amqp_method_queue_bind_queue = -1;
static int hf_amqp_method_queue_bind_exchange = -1;
static int hf_amqp_method_queue_bind_routing_key = -1;
static int hf_amqp_method_queue_bind_nowait = -1;
static int hf_amqp_method_queue_bind_arguments = -1;
static int hf_amqp_method_queue_purge_ticket = -1;
static int hf_amqp_method_queue_purge_queue = -1;
static int hf_amqp_method_queue_purge_nowait = -1;
static int hf_amqp_method_queue_purge_ok_message_count = -1;
static int hf_amqp_method_queue_delete_ticket = -1;
static int hf_amqp_method_queue_delete_queue = -1;
static int hf_amqp_method_queue_delete_if_unused = -1;
static int hf_amqp_method_queue_delete_if_empty = -1;
static int hf_amqp_method_queue_delete_nowait = -1;
static int hf_amqp_method_queue_delete_ok_message_count = -1;
static int hf_amqp_method_basic_qos_prefetch_size = -1;
static int hf_amqp_method_basic_qos_prefetch_count = -1;
static int hf_amqp_method_basic_qos_global = -1;
static int hf_amqp_method_basic_consume_ticket = -1;
static int hf_amqp_method_basic_consume_queue = -1;
static int hf_amqp_method_basic_consume_consumer_tag = -1;
static int hf_amqp_method_basic_consume_no_local = -1;
static int hf_amqp_method_basic_consume_no_ack = -1;
static int hf_amqp_method_basic_consume_exclusive = -1;
static int hf_amqp_method_basic_consume_nowait = -1;
static int hf_amqp_method_basic_consume_ok_consumer_tag = -1;
static int hf_amqp_method_basic_cancel_consumer_tag = -1;
static int hf_amqp_method_basic_cancel_nowait = -1;
static int hf_amqp_method_basic_cancel_ok_consumer_tag = -1;
static int hf_amqp_method_basic_publish_ticket = -1;
static int hf_amqp_method_basic_publish_exchange = -1;
static int hf_amqp_method_basic_publish_routing_key = -1;
static int hf_amqp_method_basic_publish_mandatory = -1;
static int hf_amqp_method_basic_publish_immediate = -1;
static int hf_amqp_method_basic_return_reply_code = -1;
static int hf_amqp_method_basic_return_reply_text = -1;
static int hf_amqp_method_basic_return_exchange = -1;
static int hf_amqp_method_basic_return_routing_key = -1;
static int hf_amqp_method_basic_deliver_consumer_tag = -1;
static int hf_amqp_method_basic_deliver_delivery_tag = -1;
static int hf_amqp_method_basic_deliver_redelivered = -1;
static int hf_amqp_method_basic_deliver_exchange = -1;
static int hf_amqp_method_basic_deliver_routing_key = -1;
static int hf_amqp_method_basic_get_ticket = -1;
static int hf_amqp_method_basic_get_queue = -1;
static int hf_amqp_method_basic_get_no_ack = -1;
static int hf_amqp_method_basic_get_ok_delivery_tag = -1;
static int hf_amqp_method_basic_get_ok_redelivered = -1;
static int hf_amqp_method_basic_get_ok_exchange = -1;
static int hf_amqp_method_basic_get_ok_routing_key = -1;
static int hf_amqp_method_basic_get_ok_message_count = -1;
static int hf_amqp_method_basic_get_empty_cluster_id = -1;
static int hf_amqp_method_basic_ack_delivery_tag = -1;
static int hf_amqp_method_basic_ack_multiple = -1;
static int hf_amqp_method_basic_reject_delivery_tag = -1;
static int hf_amqp_method_basic_reject_requeue = -1;
static int hf_amqp_method_basic_recover_requeue = -1;
static int hf_amqp_method_file_qos_prefetch_size = -1;
static int hf_amqp_method_file_qos_prefetch_count = -1;
static int hf_amqp_method_file_qos_global = -1;
static int hf_amqp_method_file_consume_ticket = -1;
static int hf_amqp_method_file_consume_queue = -1;
static int hf_amqp_method_file_consume_consumer_tag = -1;
static int hf_amqp_method_file_consume_no_local = -1;
static int hf_amqp_method_file_consume_no_ack = -1;
static int hf_amqp_method_file_consume_exclusive = -1;
static int hf_amqp_method_file_consume_nowait = -1;
static int hf_amqp_method_file_consume_ok_consumer_tag = -1;
static int hf_amqp_method_file_cancel_consumer_tag = -1;
static int hf_amqp_method_file_cancel_nowait = -1;
static int hf_amqp_method_file_cancel_ok_consumer_tag = -1;
static int hf_amqp_method_file_open_identifier = -1;
static int hf_amqp_method_file_open_content_size = -1;
static int hf_amqp_method_file_open_ok_staged_size = -1;
static int hf_amqp_method_file_publish_ticket = -1;
static int hf_amqp_method_file_publish_exchange = -1;
static int hf_amqp_method_file_publish_routing_key = -1;
static int hf_amqp_method_file_publish_mandatory = -1;
static int hf_amqp_method_file_publish_immediate = -1;
static int hf_amqp_method_file_publish_identifier = -1;
static int hf_amqp_method_file_return_reply_code = -1;
static int hf_amqp_method_file_return_reply_text = -1;
static int hf_amqp_method_file_return_exchange = -1;
static int hf_amqp_method_file_return_routing_key = -1;
static int hf_amqp_method_file_deliver_consumer_tag = -1;
static int hf_amqp_method_file_deliver_delivery_tag = -1;
static int hf_amqp_method_file_deliver_redelivered = -1;
static int hf_amqp_method_file_deliver_exchange = -1;
static int hf_amqp_method_file_deliver_routing_key = -1;
static int hf_amqp_method_file_deliver_identifier = -1;
static int hf_amqp_method_file_ack_delivery_tag = -1;
static int hf_amqp_method_file_ack_multiple = -1;
static int hf_amqp_method_file_reject_delivery_tag = -1;
static int hf_amqp_method_file_reject_requeue = -1;
static int hf_amqp_method_stream_qos_prefetch_size = -1;
static int hf_amqp_method_stream_qos_prefetch_count = -1;
static int hf_amqp_method_stream_qos_consume_rate = -1;
static int hf_amqp_method_stream_qos_global = -1;
static int hf_amqp_method_stream_consume_ticket = -1;
static int hf_amqp_method_stream_consume_queue = -1;
static int hf_amqp_method_stream_consume_consumer_tag = -1;
static int hf_amqp_method_stream_consume_no_local = -1;
static int hf_amqp_method_stream_consume_exclusive = -1;
static int hf_amqp_method_stream_consume_nowait = -1;
static int hf_amqp_method_stream_consume_ok_consumer_tag = -1;
static int hf_amqp_method_stream_cancel_consumer_tag = -1;
static int hf_amqp_method_stream_cancel_nowait = -1;
static int hf_amqp_method_stream_cancel_ok_consumer_tag = -1;
static int hf_amqp_method_stream_publish_ticket = -1;
static int hf_amqp_method_stream_publish_exchange = -1;
static int hf_amqp_method_stream_publish_routing_key = -1;
static int hf_amqp_method_stream_publish_mandatory = -1;
static int hf_amqp_method_stream_publish_immediate = -1;
static int hf_amqp_method_stream_return_reply_code = -1;
static int hf_amqp_method_stream_return_reply_text = -1;
static int hf_amqp_method_stream_return_exchange = -1;
static int hf_amqp_method_stream_return_routing_key = -1;
static int hf_amqp_method_stream_deliver_consumer_tag = -1;
static int hf_amqp_method_stream_deliver_delivery_tag = -1;
static int hf_amqp_method_stream_deliver_exchange = -1;
static int hf_amqp_method_stream_deliver_queue = -1;
static int hf_amqp_method_dtx_start_dtx_identifier = -1;
static int hf_amqp_method_tunnel_request_meta_data = -1;
static int hf_amqp_method_test_integer_integer_1 = -1;
static int hf_amqp_method_test_integer_integer_2 = -1;
static int hf_amqp_method_test_integer_integer_3 = -1;
static int hf_amqp_method_test_integer_integer_4 = -1;
static int hf_amqp_method_test_integer_operation = -1;
static int hf_amqp_method_test_integer_ok_result = -1;
static int hf_amqp_method_test_string_string_1 = -1;
static int hf_amqp_method_test_string_string_2 = -1;
static int hf_amqp_method_test_string_operation = -1;
static int hf_amqp_method_test_string_ok_result = -1;
static int hf_amqp_method_test_table_table = -1;
static int hf_amqp_method_test_table_integer_op = -1;
static int hf_amqp_method_test_table_string_op = -1;
static int hf_amqp_method_test_table_ok_integer_result = -1;
static int hf_amqp_method_test_table_ok_string_result = -1;
static int hf_amqp_method_test_content_ok_content_checksum = -1;
static int hf_amqp_field = -1;
static int hf_amqp_header_class_id = -1;
static int hf_amqp_header_weight = -1;
static int hf_amqp_header_body_size = -1;
static int hf_amqp_header_property_flags = -1;
static int hf_amqp_header_properties = -1;
static int hf_amqp_header_basic_content_type = -1;
static int hf_amqp_header_basic_content_encoding = -1;
static int hf_amqp_header_basic_headers = -1;
static int hf_amqp_header_basic_delivery_mode = -1;
static int hf_amqp_header_basic_priority = -1;
static int hf_amqp_header_basic_correlation_id = -1;
static int hf_amqp_header_basic_reply_to = -1;
static int hf_amqp_header_basic_expiration = -1;
static int hf_amqp_header_basic_message_id = -1;
static int hf_amqp_header_basic_timestamp = -1;
static int hf_amqp_header_basic_type = -1;
static int hf_amqp_header_basic_user_id = -1;
static int hf_amqp_header_basic_app_id = -1;
static int hf_amqp_header_basic_cluster_id = -1;
static int hf_amqp_header_file_content_type = -1;
static int hf_amqp_header_file_content_encoding = -1;
static int hf_amqp_header_file_headers = -1;
static int hf_amqp_header_file_priority = -1;
static int hf_amqp_header_file_reply_to = -1;
static int hf_amqp_header_file_message_id = -1;
static int hf_amqp_header_file_filename = -1;
static int hf_amqp_header_file_timestamp = -1;
static int hf_amqp_header_file_cluster_id = -1;
static int hf_amqp_header_stream_content_type = -1;
static int hf_amqp_header_stream_content_encoding = -1;
static int hf_amqp_header_stream_headers = -1;
static int hf_amqp_header_stream_priority = -1;
static int hf_amqp_header_stream_timestamp = -1;
static int hf_amqp_header_tunnel_headers = -1;
static int hf_amqp_header_tunnel_proxy_name = -1;
static int hf_amqp_header_tunnel_data_name = -1;
static int hf_amqp_header_tunnel_durable = -1;
static int hf_amqp_header_tunnel_broadcast = -1;
static int hf_amqp_payload = -1;
/* Setup of protocol subtree array */
static gint ett_amqp = -1;
static gint ett_args = -1;
static gint ett_props = -1;
static gint ett_field_table = -1;
static gint *ett [] = {
&ett_amqp,
&ett_args,
&ett_props,
&ett_field_table
};
/* Various enumerations */
static const value_string amqp_frame_types [] = {
{AMQP_FRAME_TYPE_METHOD, "Method"},
{AMQP_FRAME_TYPE_CONTENT_HEADER, "Content header"},
{AMQP_FRAME_TYPE_CONTENT_BODY, "Content body"},
{AMQP_FRAME_TYPE_OOB_METHOD, "OOB Method"},
{AMQP_FRAME_TYPE_OOB_CONTENT_HEADER, "OOB Content header"},
{AMQP_FRAME_TYPE_OOB_CONTENT_BODY, "OOB Content body"},
{AMQP_FRAME_TYPE_TRACE , "Trace"},
{AMQP_FRAME_TYPE_HEARTBEAT, "Heartbeat"},
{0, NULL}
};
static const value_string amqp_method_classes [] = {
{10, "Connection"},
{20, "Channel"},
{30, "Access"},
{40, "Exchange"},
{50, "Queue"},
{60, "Basic"},
{70, "File"},
{80, "Stream"},
{90, "Tx"},
{100, "Dtx"},
{110, "Tunnel"},
{120, "Test"},
{0, NULL}
};
static const value_string amqp_method_connection_methods [] = {
{10, "Start"},
{11, "Start-Ok"},
{20, "Secure"},
{21, "Secure-Ok"},
{30, "Tune"},
{31, "Tune-Ok"},
{40, "Open"},
{41, "Open-Ok"},
{50, "Redirect"},
{60, "Close"},
{61, "Close-Ok"},
{0, NULL}
};
static const value_string amqp_method_channel_methods [] = {
{10, "Open"},
{11, "Open-Ok"},
{20, "Flow"},
{21, "Flow-Ok"},
{30, "Alert"},
{40, "Close"},
{41, "Close-Ok"},
{0, NULL}
};
static const value_string amqp_method_access_methods [] = {
{10, "Request"},
{11, "Request-Ok"},
{0, NULL}
};
static const value_string amqp_method_exchange_methods [] = {
{10, "Declare"},
{11, "Declare-Ok"},
{20, "Delete"},
{21, "Delete-Ok"},
{0, NULL}
};
static const value_string amqp_method_queue_methods [] = {
{10, "Declare"},
{11, "Declare-Ok"},
{20, "Bind"},
{21, "Bind-Ok"},
{30, "Purge"},
{31, "Purge-Ok"},
{40, "Delete"},
{41, "Delete-Ok"},
{0, NULL}
};
static const value_string amqp_method_basic_methods [] = {
{10, "Qos"},
{11, "Qos-Ok"},
{20, "Consume"},
{21, "Consume-Ok"},
{30, "Cancel"},
{31, "Cancel-Ok"},
{40, "Publish"},
{50, "Return"},
{60, "Deliver"},
{70, "Get"},
{71, "Get-Ok"},
{72, "Get-Empty"},
{80, "Ack"},
{90, "Reject"},
{100, "Recover"},
{0, NULL}
};
static const value_string amqp_method_file_methods [] = {
{10, "Qos"},
{11, "Qos-Ok"},
{20, "Consume"},
{21, "Consume-Ok"},
{30, "Cancel"},
{31, "Cancel-Ok"},
{40, "Open"},
{41, "Open-Ok"},
{50, "Stage"},
{60, "Publish"},
{70, "Return"},
{80, "Deliver"},
{90, "Ack"},
{100, "Reject"},
{0, NULL}
};
static const value_string amqp_method_stream_methods [] = {
{10, "Qos"},
{11, "Qos-Ok"},
{20, "Consume"},
{21, "Consume-Ok"},
{30, "Cancel"},
{31, "Cancel-Ok"},
{40, "Publish"},
{50, "Return"},
{60, "Deliver"},
{0, NULL}
};
static const value_string amqp_method_tx_methods [] = {
{10, "Select"},
{11, "Select-Ok"},
{20, "Commit"},
{21, "Commit-Ok"},
{30, "Rollback"},
{31, "Rollback-Ok"},
{0, NULL}
};
static const value_string amqp_method_dtx_methods [] = {
{10, "Select"},
{11, "Select-Ok"},
{20, "Start"},
{21, "Start-Ok"},
{0, NULL}
};
static const value_string amqp_method_tunnel_methods [] = {
{10, "Request"},
{0, NULL}
};
static const value_string amqp_method_test_methods [] = {
{10, "Integer"},
{11, "Integer-Ok"},
{20, "String"},
{21, "String-Ok"},
{30, "Table"},
{31, "Table-Ok"},
{40, "Content"},
{41, "Content-Ok"},
{0, NULL}
};
/* Formatting info for different elements of AMQP protocol */
static hf_register_info hf[] = {
{&hf_amqp_info, {
"Info", "",
FT_NONE, BASE_NONE, NULL, 0x0,
"Dissector info", HFILL}},
{&hf_amqp_type, {
"Type", "amqp.type",
FT_UINT8, BASE_DEC, VALS (amqp_frame_types), 0x0,
"Frame type", HFILL}},
{&hf_amqp_channel,{
"Channel", "amqp.channel",
FT_UINT16, BASE_DEC, NULL, 0x0,
"Channel ID", HFILL}},
{&hf_amqp_length, {
"Length", "amqp.length",
FT_UINT32, BASE_DEC, NULL, 0x0,
"Length of the frame", HFILL}},
{&hf_amqp_method_class_id, {
"Class", "amqp.method.class",
FT_UINT16, BASE_DEC, VALS (amqp_method_classes), 0x0,
"Class ID", HFILL}},
{&hf_amqp_method_connection_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_connection_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_channel_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_channel_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_access_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_access_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_exchange_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_exchange_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_queue_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_queue_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_basic_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_basic_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_file_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_file_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_stream_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_stream_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_tx_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_tx_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_dtx_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_dtx_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_tunnel_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_tunnel_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_test_method_id, {
"Method", "amqp.method.method",
FT_UINT16, BASE_DEC, VALS (amqp_method_test_methods), 0x0,
"Method ID", HFILL}},
{&hf_amqp_method_arguments, {
"Arguments", "",
FT_NONE, 0, NULL, 0x0,
"Method arguments", HFILL}},
{&hf_amqp_method_connection_start_version_major, {
"Version Major", "",
FT_UINT8, BASE_DEC, NULL, 0,
"version major", HFILL}},
{&hf_amqp_method_connection_start_version_minor, {
"Version Minor", "",
FT_UINT8, BASE_DEC, NULL, 0,
"version minor", HFILL}},
{&hf_amqp_method_connection_start_server_properties, {
"Server Properties", "",
FT_NONE, BASE_NONE, NULL, 0,
"server properties", HFILL}},
{&hf_amqp_method_connection_start_mechanisms, {
"Mechanisms", "",
FT_BYTES, BASE_NONE, NULL, 0,
"mechanisms", HFILL}},
{&hf_amqp_method_connection_start_locales, {
"Locales", "",
FT_BYTES, BASE_NONE, NULL, 0,
"locales", HFILL}},
{&hf_amqp_method_connection_start_ok_client_properties, {
"Client Properties", "",
FT_NONE, BASE_NONE, NULL, 0,
"client properties", HFILL}},
{&hf_amqp_method_connection_start_ok_mechanism, {
"Mechanism", "",
FT_STRING, BASE_NONE, NULL, 0,
"mechanism", HFILL}},
{&hf_amqp_method_connection_start_ok_response, {
"Response", "",
FT_BYTES, BASE_NONE, NULL, 0,
"response", HFILL}},
{&hf_amqp_method_connection_start_ok_locale, {
"Locale", "",
FT_STRING, BASE_NONE, NULL, 0,
"locale", HFILL}},
{&hf_amqp_method_connection_secure_challenge, {
"Challenge", "",
FT_BYTES, BASE_NONE, NULL, 0,
"challenge", HFILL}},
{&hf_amqp_method_connection_secure_ok_response, {
"Response", "",
FT_BYTES, BASE_NONE, NULL, 0,
"response", HFILL}},
{&hf_amqp_method_connection_tune_channel_max, {
"Channel Max", "",
FT_UINT16, BASE_DEC, NULL, 0,
"channel max", HFILL}},
{&hf_amqp_method_connection_tune_frame_max, {
"Frame Max", "",
FT_UINT32, BASE_DEC, NULL, 0,
"frame max", HFILL}},
{&hf_amqp_method_connection_tune_heartbeat, {
"Heartbeat", "",
FT_UINT16, BASE_DEC, NULL, 0,
"heartbeat", HFILL}},
{&hf_amqp_method_connection_tune_ok_channel_max, {
"Channel Max", "",
FT_UINT16, BASE_DEC, NULL, 0,
"channel max", HFILL}},
{&hf_amqp_method_connection_tune_ok_frame_max, {
"Frame Max", "",
FT_UINT32, BASE_DEC, NULL, 0,
"frame max", HFILL}},
{&hf_amqp_method_connection_tune_ok_heartbeat, {
"Heartbeat", "",
FT_UINT16, BASE_DEC, NULL, 0,
"heartbeat", HFILL}},
{&hf_amqp_method_connection_open_virtual_host, {
"Virtual Host", "",
FT_STRING, BASE_NONE, NULL, 0,
"virtual host", HFILL}},
{&hf_amqp_method_connection_open_capabilities, {
"Capabilities", "",
FT_STRING, BASE_NONE, NULL, 0,
"capabilities", HFILL}},
{&hf_amqp_method_connection_open_insist, {
"Insist", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"insist", HFILL}},
{&hf_amqp_method_connection_open_ok_known_hosts, {
"Known Hosts", "",
FT_STRING, BASE_NONE, NULL, 0,
"known hosts", HFILL}},
{&hf_amqp_method_connection_redirect_host, {
"Host", "",
FT_STRING, BASE_NONE, NULL, 0,
"host", HFILL}},
{&hf_amqp_method_connection_redirect_known_hosts, {
"Known Hosts", "",
FT_STRING, BASE_NONE, NULL, 0,
"known hosts", HFILL}},
{&hf_amqp_method_connection_close_reply_code, {
"Reply Code", "",
FT_UINT16, BASE_DEC, NULL, 0,
"reply code", HFILL}},
{&hf_amqp_method_connection_close_reply_text, {
"Reply Text", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply text", HFILL}},
{&hf_amqp_method_connection_close_class_id, {
"Class Id", "",
FT_UINT16, BASE_DEC, NULL, 0,
"class id", HFILL}},
{&hf_amqp_method_connection_close_method_id, {
"Method Id", "",
FT_UINT16, BASE_DEC, NULL, 0,
"method id", HFILL}},
{&hf_amqp_method_channel_open_out_of_band, {
"Out Of Band", "",
FT_STRING, BASE_NONE, NULL, 0,
"out of band", HFILL}},
{&hf_amqp_method_channel_flow_active, {
"Active", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"active", HFILL}},
{&hf_amqp_method_channel_flow_ok_active, {
"Active", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"active", HFILL}},
{&hf_amqp_method_channel_alert_reply_code, {
"Reply Code", "",
FT_UINT16, BASE_DEC, NULL, 0,
"reply code", HFILL}},
{&hf_amqp_method_channel_alert_reply_text, {
"Reply Text", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply text", HFILL}},
{&hf_amqp_method_channel_alert_details, {
"Details", "",
FT_NONE, BASE_NONE, NULL, 0,
"details", HFILL}},
{&hf_amqp_method_channel_close_reply_code, {
"Reply Code", "",
FT_UINT16, BASE_DEC, NULL, 0,
"reply code", HFILL}},
{&hf_amqp_method_channel_close_reply_text, {
"Reply Text", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply text", HFILL}},
{&hf_amqp_method_channel_close_class_id, {
"Class Id", "",
FT_UINT16, BASE_DEC, NULL, 0,
"class id", HFILL}},
{&hf_amqp_method_channel_close_method_id, {
"Method Id", "",
FT_UINT16, BASE_DEC, NULL, 0,
"method id", HFILL}},
{&hf_amqp_method_access_request_realm, {
"Realm", "",
FT_STRING, BASE_NONE, NULL, 0,
"realm", HFILL}},
{&hf_amqp_method_access_request_exclusive, {
"Exclusive", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"exclusive", HFILL}},
{&hf_amqp_method_access_request_passive, {
"Passive", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"passive", HFILL}},
{&hf_amqp_method_access_request_active, {
"Active", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"active", HFILL}},
{&hf_amqp_method_access_request_write, {
"Write", "",
FT_BOOLEAN, BASE_NONE, NULL, 8,
"write", HFILL}},
{&hf_amqp_method_access_request_read, {
"Read", "",
FT_BOOLEAN, BASE_NONE, NULL, 16,
"read", HFILL}},
{&hf_amqp_method_access_request_ok_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_exchange_declare_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_exchange_declare_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_exchange_declare_type, {
"Type", "",
FT_STRING, BASE_NONE, NULL, 0,
"type", HFILL}},
{&hf_amqp_method_exchange_declare_passive, {
"Passive", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"passive", HFILL}},
{&hf_amqp_method_exchange_declare_durable, {
"Durable", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"durable", HFILL}},
{&hf_amqp_method_exchange_declare_auto_delete, {
"Auto Delete", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"auto delete", HFILL}},
{&hf_amqp_method_exchange_declare_internal, {
"Internal", "",
FT_BOOLEAN, BASE_NONE, NULL, 8,
"internal", HFILL}},
{&hf_amqp_method_exchange_declare_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 16,
"nowait", HFILL}},
{&hf_amqp_method_exchange_declare_arguments, {
"Arguments", "",
FT_NONE, BASE_NONE, NULL, 0,
"arguments", HFILL}},
{&hf_amqp_method_exchange_delete_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_exchange_delete_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_exchange_delete_if_unused, {
"If Unused", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"if unused", HFILL}},
{&hf_amqp_method_exchange_delete_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"nowait", HFILL}},
{&hf_amqp_method_queue_declare_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_queue_declare_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_queue_declare_passive, {
"Passive", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"passive", HFILL}},
{&hf_amqp_method_queue_declare_durable, {
"Durable", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"durable", HFILL}},
{&hf_amqp_method_queue_declare_exclusive, {
"Exclusive", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"exclusive", HFILL}},
{&hf_amqp_method_queue_declare_auto_delete, {
"Auto Delete", "",
FT_BOOLEAN, BASE_NONE, NULL, 8,
"auto delete", HFILL}},
{&hf_amqp_method_queue_declare_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 16,
"nowait", HFILL}},
{&hf_amqp_method_queue_declare_arguments, {
"Arguments", "",
FT_NONE, BASE_NONE, NULL, 0,
"arguments", HFILL}},
{&hf_amqp_method_queue_declare_ok_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_queue_declare_ok_message_count, {
"Message Count", "",
FT_UINT32, BASE_DEC, NULL, 0,
"message count", HFILL}},
{&hf_amqp_method_queue_declare_ok_consumer_count, {
"Consumer Count", "",
FT_UINT32, BASE_DEC, NULL, 0,
"consumer count", HFILL}},
{&hf_amqp_method_queue_bind_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_queue_bind_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_queue_bind_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_queue_bind_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_queue_bind_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"nowait", HFILL}},
{&hf_amqp_method_queue_bind_arguments, {
"Arguments", "",
FT_NONE, BASE_NONE, NULL, 0,
"arguments", HFILL}},
{&hf_amqp_method_queue_purge_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_queue_purge_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_queue_purge_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"nowait", HFILL}},
{&hf_amqp_method_queue_purge_ok_message_count, {
"Message Count", "",
FT_UINT32, BASE_DEC, NULL, 0,
"message count", HFILL}},
{&hf_amqp_method_queue_delete_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_queue_delete_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_queue_delete_if_unused, {
"If Unused", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"if unused", HFILL}},
{&hf_amqp_method_queue_delete_if_empty, {
"If Empty", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"if empty", HFILL}},
{&hf_amqp_method_queue_delete_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"nowait", HFILL}},
{&hf_amqp_method_queue_delete_ok_message_count, {
"Message Count", "",
FT_UINT32, BASE_DEC, NULL, 0,
"message count", HFILL}},
{&hf_amqp_method_basic_qos_prefetch_size, {
"Prefetch Size", "",
FT_UINT32, BASE_DEC, NULL, 0,
"prefetch size", HFILL}},
{&hf_amqp_method_basic_qos_prefetch_count, {
"Prefetch Count", "",
FT_UINT16, BASE_DEC, NULL, 0,
"prefetch count", HFILL}},
{&hf_amqp_method_basic_qos_global, {
"Global", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"global", HFILL}},
{&hf_amqp_method_basic_consume_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_basic_consume_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_basic_consume_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_basic_consume_no_local, {
"No Local", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"no local", HFILL}},
{&hf_amqp_method_basic_consume_no_ack, {
"No Ack", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"no ack", HFILL}},
{&hf_amqp_method_basic_consume_exclusive, {
"Exclusive", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"exclusive", HFILL}},
{&hf_amqp_method_basic_consume_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 8,
"nowait", HFILL}},
{&hf_amqp_method_basic_consume_ok_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_basic_cancel_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_basic_cancel_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"nowait", HFILL}},
{&hf_amqp_method_basic_cancel_ok_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_basic_publish_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_basic_publish_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_basic_publish_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_basic_publish_mandatory, {
"Mandatory", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"mandatory", HFILL}},
{&hf_amqp_method_basic_publish_immediate, {
"Immediate", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"immediate", HFILL}},
{&hf_amqp_method_basic_return_reply_code, {
"Reply Code", "",
FT_UINT16, BASE_DEC, NULL, 0,
"reply code", HFILL}},
{&hf_amqp_method_basic_return_reply_text, {
"Reply Text", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply text", HFILL}},
{&hf_amqp_method_basic_return_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_basic_return_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_basic_deliver_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_basic_deliver_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_basic_deliver_redelivered, {
"Redelivered", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"redelivered", HFILL}},
{&hf_amqp_method_basic_deliver_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_basic_deliver_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_basic_get_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_basic_get_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_basic_get_no_ack, {
"No Ack", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"no ack", HFILL}},
{&hf_amqp_method_basic_get_ok_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_basic_get_ok_redelivered, {
"Redelivered", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"redelivered", HFILL}},
{&hf_amqp_method_basic_get_ok_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_basic_get_ok_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_basic_get_ok_message_count, {
"Message Count", "",
FT_UINT32, BASE_DEC, NULL, 0,
"message count", HFILL}},
{&hf_amqp_method_basic_get_empty_cluster_id, {
"Cluster Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"cluster id", HFILL}},
{&hf_amqp_method_basic_ack_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_basic_ack_multiple, {
"Multiple", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"multiple", HFILL}},
{&hf_amqp_method_basic_reject_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_basic_reject_requeue, {
"Requeue", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"requeue", HFILL}},
{&hf_amqp_method_basic_recover_requeue, {
"Requeue", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"requeue", HFILL}},
{&hf_amqp_method_file_qos_prefetch_size, {
"Prefetch Size", "",
FT_UINT32, BASE_DEC, NULL, 0,
"prefetch size", HFILL}},
{&hf_amqp_method_file_qos_prefetch_count, {
"Prefetch Count", "",
FT_UINT16, BASE_DEC, NULL, 0,
"prefetch count", HFILL}},
{&hf_amqp_method_file_qos_global, {
"Global", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"global", HFILL}},
{&hf_amqp_method_file_consume_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_file_consume_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_file_consume_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_file_consume_no_local, {
"No Local", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"no local", HFILL}},
{&hf_amqp_method_file_consume_no_ack, {
"No Ack", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"no ack", HFILL}},
{&hf_amqp_method_file_consume_exclusive, {
"Exclusive", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"exclusive", HFILL}},
{&hf_amqp_method_file_consume_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 8,
"nowait", HFILL}},
{&hf_amqp_method_file_consume_ok_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_file_cancel_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_file_cancel_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"nowait", HFILL}},
{&hf_amqp_method_file_cancel_ok_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_file_open_identifier, {
"Identifier", "",
FT_STRING, BASE_NONE, NULL, 0,
"identifier", HFILL}},
{&hf_amqp_method_file_open_content_size, {
"Content Size", "",
FT_UINT64, BASE_DEC, NULL, 0,
"content size", HFILL}},
{&hf_amqp_method_file_open_ok_staged_size, {
"Staged Size", "",
FT_UINT64, BASE_DEC, NULL, 0,
"staged size", HFILL}},
{&hf_amqp_method_file_publish_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_file_publish_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_file_publish_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_file_publish_mandatory, {
"Mandatory", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"mandatory", HFILL}},
{&hf_amqp_method_file_publish_immediate, {
"Immediate", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"immediate", HFILL}},
{&hf_amqp_method_file_publish_identifier, {
"Identifier", "",
FT_STRING, BASE_NONE, NULL, 0,
"identifier", HFILL}},
{&hf_amqp_method_file_return_reply_code, {
"Reply Code", "",
FT_UINT16, BASE_DEC, NULL, 0,
"reply code", HFILL}},
{&hf_amqp_method_file_return_reply_text, {
"Reply Text", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply text", HFILL}},
{&hf_amqp_method_file_return_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_file_return_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_file_deliver_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_file_deliver_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_file_deliver_redelivered, {
"Redelivered", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"redelivered", HFILL}},
{&hf_amqp_method_file_deliver_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_file_deliver_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_file_deliver_identifier, {
"Identifier", "",
FT_STRING, BASE_NONE, NULL, 0,
"identifier", HFILL}},
{&hf_amqp_method_file_ack_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_file_ack_multiple, {
"Multiple", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"multiple", HFILL}},
{&hf_amqp_method_file_reject_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_file_reject_requeue, {
"Requeue", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"requeue", HFILL}},
{&hf_amqp_method_stream_qos_prefetch_size, {
"Prefetch Size", "",
FT_UINT32, BASE_DEC, NULL, 0,
"prefetch size", HFILL}},
{&hf_amqp_method_stream_qos_prefetch_count, {
"Prefetch Count", "",
FT_UINT16, BASE_DEC, NULL, 0,
"prefetch count", HFILL}},
{&hf_amqp_method_stream_qos_consume_rate, {
"Consume Rate", "",
FT_UINT32, BASE_DEC, NULL, 0,
"consume rate", HFILL}},
{&hf_amqp_method_stream_qos_global, {
"Global", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"global", HFILL}},
{&hf_amqp_method_stream_consume_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_stream_consume_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_stream_consume_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_stream_consume_no_local, {
"No Local", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"no local", HFILL}},
{&hf_amqp_method_stream_consume_exclusive, {
"Exclusive", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"exclusive", HFILL}},
{&hf_amqp_method_stream_consume_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 4,
"nowait", HFILL}},
{&hf_amqp_method_stream_consume_ok_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_stream_cancel_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_stream_cancel_nowait, {
"Nowait", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"nowait", HFILL}},
{&hf_amqp_method_stream_cancel_ok_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_stream_publish_ticket, {
"Ticket", "",
FT_UINT16, BASE_DEC, NULL, 0,
"ticket", HFILL}},
{&hf_amqp_method_stream_publish_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_stream_publish_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_stream_publish_mandatory, {
"Mandatory", "",
FT_BOOLEAN, BASE_NONE, NULL, 1,
"mandatory", HFILL}},
{&hf_amqp_method_stream_publish_immediate, {
"Immediate", "",
FT_BOOLEAN, BASE_NONE, NULL, 2,
"immediate", HFILL}},
{&hf_amqp_method_stream_return_reply_code, {
"Reply Code", "",
FT_UINT16, BASE_DEC, NULL, 0,
"reply code", HFILL}},
{&hf_amqp_method_stream_return_reply_text, {
"Reply Text", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply text", HFILL}},
{&hf_amqp_method_stream_return_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_stream_return_routing_key, {
"Routing Key", "",
FT_STRING, BASE_NONE, NULL, 0,
"routing key", HFILL}},
{&hf_amqp_method_stream_deliver_consumer_tag, {
"Consumer Tag", "",
FT_STRING, BASE_NONE, NULL, 0,
"consumer tag", HFILL}},
{&hf_amqp_method_stream_deliver_delivery_tag, {
"Delivery Tag", "",
FT_UINT64, BASE_DEC, NULL, 0,
"delivery tag", HFILL}},
{&hf_amqp_method_stream_deliver_exchange, {
"Exchange", "",
FT_STRING, BASE_NONE, NULL, 0,
"exchange", HFILL}},
{&hf_amqp_method_stream_deliver_queue, {
"Queue", "",
FT_STRING, BASE_NONE, NULL, 0,
"queue", HFILL}},
{&hf_amqp_method_dtx_start_dtx_identifier, {
"Dtx Identifier", "",
FT_STRING, BASE_NONE, NULL, 0,
"dtx identifier", HFILL}},
{&hf_amqp_method_tunnel_request_meta_data, {
"Meta Data", "",
FT_NONE, BASE_NONE, NULL, 0,
"meta data", HFILL}},
{&hf_amqp_method_test_integer_integer_1, {
"Integer 1", "",
FT_UINT8, BASE_DEC, NULL, 0,
"integer 1", HFILL}},
{&hf_amqp_method_test_integer_integer_2, {
"Integer 2", "",
FT_UINT16, BASE_DEC, NULL, 0,
"integer 2", HFILL}},
{&hf_amqp_method_test_integer_integer_3, {
"Integer 3", "",
FT_UINT32, BASE_DEC, NULL, 0,
"integer 3", HFILL}},
{&hf_amqp_method_test_integer_integer_4, {
"Integer 4", "",
FT_UINT64, BASE_DEC, NULL, 0,
"integer 4", HFILL}},
{&hf_amqp_method_test_integer_operation, {
"Operation", "",
FT_UINT8, BASE_DEC, NULL, 0,
"operation", HFILL}},
{&hf_amqp_method_test_integer_ok_result, {
"Result", "",
FT_UINT64, BASE_DEC, NULL, 0,
"result", HFILL}},
{&hf_amqp_method_test_string_string_1, {
"String 1", "",
FT_STRING, BASE_NONE, NULL, 0,
"string 1", HFILL}},
{&hf_amqp_method_test_string_string_2, {
"String 2", "",
FT_BYTES, BASE_NONE, NULL, 0,
"string 2", HFILL}},
{&hf_amqp_method_test_string_operation, {
"Operation", "",
FT_UINT8, BASE_DEC, NULL, 0,
"operation", HFILL}},
{&hf_amqp_method_test_string_ok_result, {
"Result", "",
FT_BYTES, BASE_NONE, NULL, 0,
"result", HFILL}},
{&hf_amqp_method_test_table_table, {
"Table", "",
FT_NONE, BASE_NONE, NULL, 0,
"table", HFILL}},
{&hf_amqp_method_test_table_integer_op, {
"Integer Op", "",
FT_UINT8, BASE_DEC, NULL, 0,
"integer op", HFILL}},
{&hf_amqp_method_test_table_string_op, {
"String Op", "",
FT_UINT8, BASE_DEC, NULL, 0,
"string op", HFILL}},
{&hf_amqp_method_test_table_ok_integer_result, {
"Integer Result", "",
FT_UINT64, BASE_DEC, NULL, 0,
"integer result", HFILL}},
{&hf_amqp_method_test_table_ok_string_result, {
"String Result", "",
FT_BYTES, BASE_NONE, NULL, 0,
"string result", HFILL}},
{&hf_amqp_method_test_content_ok_content_checksum, {
"Content Checksum", "",
FT_UINT32, BASE_DEC, NULL, 0,
"content checksum", HFILL}},
{&hf_amqp_field, {
"", "",
FT_NONE, BASE_NONE, NULL, 0,
"", HFILL}},
{&hf_amqp_header_class_id, {
"Class ID", "amqp.header.class",
FT_UINT16, BASE_DEC, VALS (amqp_method_classes), 0,
"Class ID", HFILL}},
{&hf_amqp_header_weight, {
"Weight", "amqp.header.weight",
FT_UINT16, BASE_DEC, NULL, 0,
"Weight", HFILL}},
{&hf_amqp_header_body_size, {
"Body size", "amqp.header.body-size",
FT_UINT64, BASE_DEC, NULL, 0,
"Body size", HFILL}},
{&hf_amqp_header_property_flags, {
"Property flags", "amqp.header.property-flags",
FT_UINT16, BASE_HEX, NULL, 0,
"Property flags", HFILL}},
{&hf_amqp_header_properties, {
"Properties", "",
FT_NONE, 0, NULL, 0x0,
"Message properties", HFILL}},
{&hf_amqp_header_basic_content_type, {
"Content Type", "",
FT_STRING, BASE_NONE, NULL, 0,
"content type", HFILL}},
{&hf_amqp_header_basic_content_encoding, {
"Content Encoding", "",
FT_STRING, BASE_NONE, NULL, 0,
"content encoding", HFILL}},
{&hf_amqp_header_basic_headers, {
"Headers", "",
FT_NONE, BASE_NONE, NULL, 0,
"headers", HFILL}},
{&hf_amqp_header_basic_delivery_mode, {
"Delivery Mode", "",
FT_UINT8, BASE_DEC, NULL, 0,
"delivery mode", HFILL}},
{&hf_amqp_header_basic_priority, {
"Priority", "",
FT_UINT8, BASE_DEC, NULL, 0,
"priority", HFILL}},
{&hf_amqp_header_basic_correlation_id, {
"Correlation Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"correlation id", HFILL}},
{&hf_amqp_header_basic_reply_to, {
"Reply To", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply to", HFILL}},
{&hf_amqp_header_basic_expiration, {
"Expiration", "",
FT_STRING, BASE_NONE, NULL, 0,
"expiration", HFILL}},
{&hf_amqp_header_basic_message_id, {
"Message Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"message id", HFILL}},
{&hf_amqp_header_basic_timestamp, {
"Timestamp", "",
FT_UINT64, BASE_DEC, NULL, 0,
"timestamp", HFILL}},
{&hf_amqp_header_basic_type, {
"Type", "",
FT_STRING, BASE_NONE, NULL, 0,
"type", HFILL}},
{&hf_amqp_header_basic_user_id, {
"User Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"user id", HFILL}},
{&hf_amqp_header_basic_app_id, {
"App Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"app id", HFILL}},
{&hf_amqp_header_basic_cluster_id, {
"Cluster Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"cluster id", HFILL}},
{&hf_amqp_header_file_content_type, {
"Content Type", "",
FT_STRING, BASE_NONE, NULL, 0,
"content type", HFILL}},
{&hf_amqp_header_file_content_encoding, {
"Content Encoding", "",
FT_STRING, BASE_NONE, NULL, 0,
"content encoding", HFILL}},
{&hf_amqp_header_file_headers, {
"Headers", "",
FT_NONE, BASE_NONE, NULL, 0,
"headers", HFILL}},
{&hf_amqp_header_file_priority, {
"Priority", "",
FT_UINT8, BASE_DEC, NULL, 0,
"priority", HFILL}},
{&hf_amqp_header_file_reply_to, {
"Reply To", "",
FT_STRING, BASE_NONE, NULL, 0,
"reply to", HFILL}},
{&hf_amqp_header_file_message_id, {
"Message Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"message id", HFILL}},
{&hf_amqp_header_file_filename, {
"Filename", "",
FT_STRING, BASE_NONE, NULL, 0,
"filename", HFILL}},
{&hf_amqp_header_file_timestamp, {
"Timestamp", "",
FT_UINT64, BASE_DEC, NULL, 0,
"timestamp", HFILL}},
{&hf_amqp_header_file_cluster_id, {
"Cluster Id", "",
FT_STRING, BASE_NONE, NULL, 0,
"cluster id", HFILL}},
{&hf_amqp_header_stream_content_type, {
"Content Type", "",
FT_STRING, BASE_NONE, NULL, 0,
"content type", HFILL}},
{&hf_amqp_header_stream_content_encoding, {
"Content Encoding", "",
FT_STRING, BASE_NONE, NULL, 0,
"content encoding", HFILL}},
{&hf_amqp_header_stream_headers, {
"Headers", "",
FT_NONE, BASE_NONE, NULL, 0,
"headers", HFILL}},
{&hf_amqp_header_stream_priority, {
"Priority", "",
FT_UINT8, BASE_DEC, NULL, 0,
"priority", HFILL}},
{&hf_amqp_header_stream_timestamp, {
"Timestamp", "",
FT_UINT64, BASE_DEC, NULL, 0,
"timestamp", HFILL}},
{&hf_amqp_header_tunnel_headers, {
"Headers", "",
FT_NONE, BASE_NONE, NULL, 0,
"headers", HFILL}},
{&hf_amqp_header_tunnel_proxy_name, {
"Proxy Name", "",
FT_STRING, BASE_NONE, NULL, 0,
"proxy name", HFILL}},
{&hf_amqp_header_tunnel_data_name, {
"Data Name", "",
FT_STRING, BASE_NONE, NULL, 0,
"data name", HFILL}},
{&hf_amqp_header_tunnel_durable, {
"Durable", "",
FT_UINT8, BASE_DEC, NULL, 0,
"durable", HFILL}},
{&hf_amqp_header_tunnel_broadcast, {
"Broadcast", "",
FT_UINT8, BASE_DEC, NULL, 0,
"broadcast", HFILL}},
{&hf_amqp_payload, {
"Payload", "amqp.payload",
FT_BYTES, BASE_NONE, NULL, 0,
"Message payload", HFILL}},
};
/* Basic registration functions */
void proto_register_amqp (void)
{
module_t *amqp_module;
if (proto_amqp == -1) {
proto_amqp = proto_register_protocol (
"Advanced Message Queueing Protocol", "AMQP", "amqp");
proto_register_field_array (proto_amqp, hf, array_length(hf));
proto_register_subtree_array (ett, array_length(ett));
}
amqp_module = prefs_register_protocol (proto_amqp, proto_reg_handoff_amqp);
}
void proto_reg_handoff_amqp (void)
{
static int initialised = FALSE;
if (!initialised) {
amqp_handle = create_dissector_handle (dissect_amqp, proto_amqp);
dissector_add ("tcp.port", amqp_port, amqp_handle);
}
}
/* Main dissection routine */
static void dissect_amqp (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
tcp_dissect_pdus (tvb, pinfo, tree, TRUE, 7,
get_amqp_message_len, dissect_amqp_message);
}
static guint get_amqp_message_len(packet_info *pinfo, tvbuff_t *tvb, int offset)
{
return (guint) tvb_get_ntohl (tvb, offset + 3) + 8;
}
/* Dissection routine for AMQP frames */
static void dissect_amqp_message (tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree)
{
proto_item
*ti,
*amqp_tree,
*args_tree,
*prop_tree;
size_t
argptr;
guint16
prop_flags;
if (check_col (pinfo->cinfo, COL_PROTOCOL))
col_set_str (pinfo->cinfo, COL_PROTOCOL, "AMQP");
if (check_col (pinfo->cinfo, COL_INFO)) {
col_clear (pinfo->cinfo, COL_INFO);
}
if (tree) {
ti = proto_tree_add_item (tree, proto_amqp, tvb, 0, -1, FALSE);
amqp_tree = proto_item_add_subtree (ti, ett_amqp);
proto_tree_add_item (amqp_tree, hf_amqp_type, tvb, 0, 1, FALSE);
proto_tree_add_item (amqp_tree, hf_amqp_channel, tvb, 1, 2, FALSE);
proto_tree_add_item (amqp_tree, hf_amqp_length, tvb, 3, 4, FALSE);
switch (tvb_get_guint8(tvb, 0)) {
case AMQP_FRAME_TYPE_METHOD:
proto_tree_add_item (amqp_tree, hf_amqp_method_class_id,
tvb, 7, 2, FALSE);
switch (tvb_get_ntohs (tvb, 7)) {
case 10:
proto_tree_add_item (amqp_tree, hf_amqp_method_connection_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* version major (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_version_major,
tvb, argptr, 1, FALSE);
argptr += 1;
/* version minor (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_version_minor,
tvb, argptr, 1, FALSE);
argptr += 1;
/* server properties (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_connection_start_server_properties,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
/* mechanisms (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_mechanisms,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
/* locales (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_locales,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 11:
argptr = 11;
/* client properties (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_connection_start_ok_client_properties,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
/* mechanism (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_ok_mechanism,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* response (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_ok_response,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
/* locale (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_start_ok_locale,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 20:
argptr = 11;
/* challenge (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_secure_challenge,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 21:
argptr = 11;
/* response (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_secure_ok_response,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 30:
argptr = 11;
/* channel max (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_tune_channel_max,
tvb, argptr, 2, FALSE);
argptr += 2;
/* frame max (long) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_tune_frame_max,
tvb, argptr, 4, FALSE);
argptr += 4;
/* heartbeat (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_tune_heartbeat,
tvb, argptr, 2, FALSE);
argptr += 2;
break;
case 31:
argptr = 11;
/* channel max (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_tune_ok_channel_max,
tvb, argptr, 2, FALSE);
argptr += 2;
/* frame max (long) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_tune_ok_frame_max,
tvb, argptr, 4, FALSE);
argptr += 4;
/* heartbeat (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_tune_ok_heartbeat,
tvb, argptr, 2, FALSE);
argptr += 2;
break;
case 40:
argptr = 11;
/* virtual host (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_open_virtual_host,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* capabilities (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_open_capabilities,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* insist (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_open_insist,
tvb, argptr, 1, FALSE);
break;
case 41:
argptr = 11;
/* known hosts (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_open_ok_known_hosts,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 50:
argptr = 11;
/* host (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_redirect_host,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* known hosts (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_redirect_known_hosts,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 60:
argptr = 11;
/* reply code (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_close_reply_code,
tvb, argptr, 2, FALSE);
argptr += 2;
/* reply text (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_close_reply_text,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* class id (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_close_class_id,
tvb, argptr, 2, FALSE);
argptr += 2;
/* method id (short) */
proto_tree_add_item (args_tree, hf_amqp_method_connection_close_method_id,
tvb, argptr, 2, FALSE);
argptr += 2;
break;
case 61:
argptr = 11;
break;
}
break;
case 20:
proto_tree_add_item (amqp_tree, hf_amqp_method_channel_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* out of band (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_open_out_of_band,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
/* active (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_flow_active,
tvb, argptr, 1, FALSE);
break;
case 21:
argptr = 11;
/* active (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_flow_ok_active,
tvb, argptr, 1, FALSE);
break;
case 30:
argptr = 11;
/* reply code (short) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_alert_reply_code,
tvb, argptr, 2, FALSE);
argptr += 2;
/* reply text (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_alert_reply_text,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* details (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_channel_alert_details,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 40:
argptr = 11;
/* reply code (short) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_close_reply_code,
tvb, argptr, 2, FALSE);
argptr += 2;
/* reply text (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_close_reply_text,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* class id (short) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_close_class_id,
tvb, argptr, 2, FALSE);
argptr += 2;
/* method id (short) */
proto_tree_add_item (args_tree, hf_amqp_method_channel_close_method_id,
tvb, argptr, 2, FALSE);
argptr += 2;
break;
case 41:
argptr = 11;
break;
}
break;
case 30:
proto_tree_add_item (amqp_tree, hf_amqp_method_access_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* realm (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_realm,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* exclusive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_exclusive,
tvb, argptr, 1, FALSE);
/* passive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_passive,
tvb, argptr, 1, FALSE);
/* active (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_active,
tvb, argptr, 1, FALSE);
/* write (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_write,
tvb, argptr, 1, FALSE);
/* read (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_read,
tvb, argptr, 1, FALSE);
break;
case 11:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_access_request_ok_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
break;
}
break;
case 40:
proto_tree_add_item (amqp_tree, hf_amqp_method_exchange_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* type (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_type,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* passive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_passive,
tvb, argptr, 1, FALSE);
/* durable (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_durable,
tvb, argptr, 1, FALSE);
/* auto delete (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_auto_delete,
tvb, argptr, 1, FALSE);
/* internal (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_internal,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_declare_nowait,
tvb, argptr, 1, FALSE);
argptr += 1;
/* arguments (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_exchange_declare_arguments,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_delete_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_delete_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* if unused (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_delete_if_unused,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_exchange_delete_nowait,
tvb, argptr, 1, FALSE);
break;
case 21:
argptr = 11;
break;
}
break;
case 50:
proto_tree_add_item (amqp_tree, hf_amqp_method_queue_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* passive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_passive,
tvb, argptr, 1, FALSE);
/* durable (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_durable,
tvb, argptr, 1, FALSE);
/* exclusive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_exclusive,
tvb, argptr, 1, FALSE);
/* auto delete (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_auto_delete,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_nowait,
tvb, argptr, 1, FALSE);
argptr += 1;
/* arguments (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_queue_declare_arguments,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 11:
argptr = 11;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_ok_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* message count (long) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_ok_message_count,
tvb, argptr, 4, FALSE);
argptr += 4;
/* consumer count (long) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_declare_ok_consumer_count,
tvb, argptr, 4, FALSE);
argptr += 4;
break;
case 20:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_bind_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_bind_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_bind_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_bind_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_bind_nowait,
tvb, argptr, 1, FALSE);
argptr += 1;
/* arguments (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_queue_bind_arguments,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 21:
argptr = 11;
break;
case 30:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_purge_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_purge_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_purge_nowait,
tvb, argptr, 1, FALSE);
break;
case 31:
argptr = 11;
/* message count (long) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_purge_ok_message_count,
tvb, argptr, 4, FALSE);
argptr += 4;
break;
case 40:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_delete_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_delete_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* if unused (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_delete_if_unused,
tvb, argptr, 1, FALSE);
/* if empty (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_delete_if_empty,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_delete_nowait,
tvb, argptr, 1, FALSE);
break;
case 41:
argptr = 11;
/* message count (long) */
proto_tree_add_item (args_tree, hf_amqp_method_queue_delete_ok_message_count,
tvb, argptr, 4, FALSE);
argptr += 4;
break;
}
break;
case 60:
proto_tree_add_item (amqp_tree, hf_amqp_method_basic_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* prefetch size (long) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_qos_prefetch_size,
tvb, argptr, 4, FALSE);
argptr += 4;
/* prefetch count (short) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_qos_prefetch_count,
tvb, argptr, 2, FALSE);
argptr += 2;
/* global (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_qos_global,
tvb, argptr, 1, FALSE);
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* no local (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_no_local,
tvb, argptr, 1, FALSE);
/* no ack (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_no_ack,
tvb, argptr, 1, FALSE);
/* exclusive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_exclusive,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_nowait,
tvb, argptr, 1, FALSE);
break;
case 21:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_consume_ok_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 30:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_cancel_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_cancel_nowait,
tvb, argptr, 1, FALSE);
break;
case 31:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_cancel_ok_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 40:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_publish_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_publish_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_publish_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* mandatory (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_publish_mandatory,
tvb, argptr, 1, FALSE);
/* immediate (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_publish_immediate,
tvb, argptr, 1, FALSE);
break;
case 50:
argptr = 11;
/* reply code (short) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_return_reply_code,
tvb, argptr, 2, FALSE);
argptr += 2;
/* reply text (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_return_reply_text,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_return_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_return_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 60:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_deliver_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_deliver_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* redelivered (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_deliver_redelivered,
tvb, argptr, 1, FALSE);
argptr += 1;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_deliver_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_deliver_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 70:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* no ack (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_no_ack,
tvb, argptr, 1, FALSE);
break;
case 71:
argptr = 11;
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_ok_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* redelivered (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_ok_redelivered,
tvb, argptr, 1, FALSE);
argptr += 1;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_ok_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_ok_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* message count (long) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_ok_message_count,
tvb, argptr, 4, FALSE);
argptr += 4;
break;
case 72:
argptr = 11;
/* cluster id (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_get_empty_cluster_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 80:
argptr = 11;
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_ack_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* multiple (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_ack_multiple,
tvb, argptr, 1, FALSE);
break;
case 90:
argptr = 11;
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_reject_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* requeue (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_reject_requeue,
tvb, argptr, 1, FALSE);
break;
case 100:
argptr = 11;
/* requeue (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_basic_recover_requeue,
tvb, argptr, 1, FALSE);
break;
}
break;
case 70:
proto_tree_add_item (amqp_tree, hf_amqp_method_file_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* prefetch size (long) */
proto_tree_add_item (args_tree, hf_amqp_method_file_qos_prefetch_size,
tvb, argptr, 4, FALSE);
argptr += 4;
/* prefetch count (short) */
proto_tree_add_item (args_tree, hf_amqp_method_file_qos_prefetch_count,
tvb, argptr, 2, FALSE);
argptr += 2;
/* global (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_qos_global,
tvb, argptr, 1, FALSE);
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* no local (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_no_local,
tvb, argptr, 1, FALSE);
/* no ack (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_no_ack,
tvb, argptr, 1, FALSE);
/* exclusive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_exclusive,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_nowait,
tvb, argptr, 1, FALSE);
break;
case 21:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_consume_ok_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 30:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_cancel_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_cancel_nowait,
tvb, argptr, 1, FALSE);
break;
case 31:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_cancel_ok_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 40:
argptr = 11;
/* identifier (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_open_identifier,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* content size (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_file_open_content_size,
tvb, argptr, 8, FALSE);
argptr += 8;
break;
case 41:
argptr = 11;
/* staged size (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_file_open_ok_staged_size,
tvb, argptr, 8, FALSE);
argptr += 8;
break;
case 50:
argptr = 11;
break;
case 60:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_file_publish_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_publish_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_publish_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* mandatory (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_publish_mandatory,
tvb, argptr, 1, FALSE);
/* immediate (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_publish_immediate,
tvb, argptr, 1, FALSE);
argptr += 1;
/* identifier (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_publish_identifier,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 70:
argptr = 11;
/* reply code (short) */
proto_tree_add_item (args_tree, hf_amqp_method_file_return_reply_code,
tvb, argptr, 2, FALSE);
argptr += 2;
/* reply text (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_return_reply_text,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_return_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_return_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 80:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_deliver_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_file_deliver_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* redelivered (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_deliver_redelivered,
tvb, argptr, 1, FALSE);
argptr += 1;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_deliver_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_deliver_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* identifier (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_file_deliver_identifier,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 90:
argptr = 11;
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_file_ack_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* multiple (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_ack_multiple,
tvb, argptr, 1, FALSE);
break;
case 100:
argptr = 11;
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_file_reject_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* requeue (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_file_reject_requeue,
tvb, argptr, 1, FALSE);
break;
}
break;
case 80:
proto_tree_add_item (amqp_tree, hf_amqp_method_stream_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* prefetch size (long) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_qos_prefetch_size,
tvb, argptr, 4, FALSE);
argptr += 4;
/* prefetch count (short) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_qos_prefetch_count,
tvb, argptr, 2, FALSE);
argptr += 2;
/* consume rate (long) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_qos_consume_rate,
tvb, argptr, 4, FALSE);
argptr += 4;
/* global (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_qos_global,
tvb, argptr, 1, FALSE);
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* no local (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_no_local,
tvb, argptr, 1, FALSE);
/* exclusive (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_exclusive,
tvb, argptr, 1, FALSE);
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_nowait,
tvb, argptr, 1, FALSE);
break;
case 21:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_consume_ok_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 30:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_cancel_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* nowait (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_cancel_nowait,
tvb, argptr, 1, FALSE);
break;
case 31:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_cancel_ok_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 40:
argptr = 11;
/* ticket (short) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_publish_ticket,
tvb, argptr, 2, FALSE);
argptr += 2;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_publish_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_publish_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* mandatory (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_publish_mandatory,
tvb, argptr, 1, FALSE);
/* immediate (bit) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_publish_immediate,
tvb, argptr, 1, FALSE);
break;
case 50:
argptr = 11;
/* reply code (short) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_return_reply_code,
tvb, argptr, 2, FALSE);
argptr += 2;
/* reply text (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_return_reply_text,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_return_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* routing key (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_return_routing_key,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 60:
argptr = 11;
/* consumer tag (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_deliver_consumer_tag,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* delivery tag (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_deliver_delivery_tag,
tvb, argptr, 8, FALSE);
argptr += 8;
/* exchange (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_deliver_exchange,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* queue (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_stream_deliver_queue,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
}
break;
case 90:
proto_tree_add_item (amqp_tree, hf_amqp_method_tx_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
break;
case 21:
argptr = 11;
break;
case 30:
argptr = 11;
break;
case 31:
argptr = 11;
break;
}
break;
case 100:
proto_tree_add_item (amqp_tree, hf_amqp_method_dtx_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
break;
case 11:
argptr = 11;
break;
case 20:
argptr = 11;
/* dtx identifier (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_dtx_start_dtx_identifier,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
break;
case 21:
argptr = 11;
break;
}
break;
case 110:
proto_tree_add_item (amqp_tree, hf_amqp_method_tunnel_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* meta data (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_tunnel_request_meta_data,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
}
break;
case 120:
proto_tree_add_item (amqp_tree, hf_amqp_method_test_method_id,
tvb, 9, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_method_arguments,
tvb, 11, -1, FALSE);
args_tree = proto_item_add_subtree (ti, ett_args);
switch (tvb_get_ntohs (tvb, 9)) {
case 10:
argptr = 11;
/* integer 1 (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_test_integer_integer_1,
tvb, argptr, 1, FALSE);
argptr += 1;
/* integer 2 (short) */
proto_tree_add_item (args_tree, hf_amqp_method_test_integer_integer_2,
tvb, argptr, 2, FALSE);
argptr += 2;
/* integer 3 (long) */
proto_tree_add_item (args_tree, hf_amqp_method_test_integer_integer_3,
tvb, argptr, 4, FALSE);
argptr += 4;
/* integer 4 (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_test_integer_integer_4,
tvb, argptr, 8, FALSE);
argptr += 8;
/* operation (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_test_integer_operation,
tvb, argptr, 1, FALSE);
argptr += 1;
break;
case 11:
argptr = 11;
/* result (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_test_integer_ok_result,
tvb, argptr, 8, FALSE);
argptr += 8;
break;
case 20:
argptr = 11;
/* string 1 (shortstr) */
proto_tree_add_item (args_tree, hf_amqp_method_test_string_string_1,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
/* string 2 (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_test_string_string_2,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
/* operation (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_test_string_operation,
tvb, argptr, 1, FALSE);
argptr += 1;
break;
case 21:
argptr = 11;
/* result (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_test_string_ok_result,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 30:
argptr = 11;
/* table (table) */
ti = proto_tree_add_item (
args_tree, hf_amqp_method_test_table_table,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
/* integer op (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_test_table_integer_op,
tvb, argptr, 1, FALSE);
argptr += 1;
/* string op (octet) */
proto_tree_add_item (args_tree, hf_amqp_method_test_table_string_op,
tvb, argptr, 1, FALSE);
argptr += 1;
break;
case 31:
argptr = 11;
/* integer result (longlong) */
proto_tree_add_item (args_tree, hf_amqp_method_test_table_ok_integer_result,
tvb, argptr, 8, FALSE);
argptr += 8;
/* string result (longstr) */
proto_tree_add_item (args_tree, hf_amqp_method_test_table_ok_string_result,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
break;
case 40:
argptr = 11;
break;
case 41:
argptr = 11;
/* content checksum (long) */
proto_tree_add_item (args_tree, hf_amqp_method_test_content_ok_content_checksum,
tvb, argptr, 4, FALSE);
argptr += 4;
break;
}
break;
}
break;
case AMQP_FRAME_TYPE_CONTENT_HEADER:
proto_tree_add_item (amqp_tree, hf_amqp_header_class_id,
tvb, 7, 2, FALSE);
proto_tree_add_item (amqp_tree, hf_amqp_header_weight,
tvb, 9, 2, FALSE);
proto_tree_add_item (amqp_tree, hf_amqp_header_body_size,
tvb, 11, 8, FALSE);
proto_tree_add_item (amqp_tree, hf_amqp_header_property_flags,
tvb, 19, 2, FALSE);
ti = proto_tree_add_item (amqp_tree, hf_amqp_header_properties,
tvb, 21, -1, FALSE);
prop_tree = proto_item_add_subtree (ti, ett_props);
argptr = 21;
prop_flags = tvb_get_ntohs (tvb, 19);
switch (tvb_get_ntohs (tvb, 7)) {
case 10:
break;
case 20:
break;
case 30:
break;
case 40:
break;
case 50:
break;
case 60:
if (prop_flags & 0x8000) {
/* content type (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_content_type,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* content encoding (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_content_encoding,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* headers (table) */
ti = proto_tree_add_item (
prop_tree, hf_amqp_header_basic_headers,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* delivery mode (octet) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_delivery_mode,
tvb, argptr, 1, FALSE);
argptr += 1;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* priority (octet) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_priority,
tvb, argptr, 1, FALSE);
argptr += 1;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* correlation id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_correlation_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* reply to (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_reply_to,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* expiration (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_expiration,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* message id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_message_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* timestamp (timestamp) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_timestamp,
tvb, argptr, 8, FALSE);
argptr += 8;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* type (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_type,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* user id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_user_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* app id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_app_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* cluster id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_basic_cluster_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
break;
case 70:
if (prop_flags & 0x8000) {
/* content type (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_content_type,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* content encoding (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_content_encoding,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* headers (table) */
ti = proto_tree_add_item (
prop_tree, hf_amqp_header_file_headers,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* priority (octet) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_priority,
tvb, argptr, 1, FALSE);
argptr += 1;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* reply to (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_reply_to,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* message id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_message_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* filename (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_filename,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* timestamp (timestamp) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_timestamp,
tvb, argptr, 8, FALSE);
argptr += 8;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* cluster id (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_file_cluster_id,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
break;
case 80:
if (prop_flags & 0x8000) {
/* content type (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_stream_content_type,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* content encoding (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_stream_content_encoding,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* headers (table) */
ti = proto_tree_add_item (
prop_tree, hf_amqp_header_stream_headers,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* priority (octet) */
proto_tree_add_item (prop_tree, hf_amqp_header_stream_priority,
tvb, argptr, 1, FALSE);
argptr += 1;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* timestamp (timestamp) */
proto_tree_add_item (prop_tree, hf_amqp_header_stream_timestamp,
tvb, argptr, 8, FALSE);
argptr += 8;
}
prop_flags <<= 1;
break;
case 90:
break;
case 100:
break;
case 110:
if (prop_flags & 0x8000) {
/* headers (table) */
ti = proto_tree_add_item (
prop_tree, hf_amqp_header_tunnel_headers,
tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), FALSE);
dissect_amqp_field_table (tvb, argptr + 4, tvb_get_ntohl (tvb, argptr), ti);
argptr += (4 + tvb_get_ntohl (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* proxy name (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_tunnel_proxy_name,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* data name (shortstr) */
proto_tree_add_item (prop_tree, hf_amqp_header_tunnel_data_name,
tvb, argptr + 1, tvb_get_guint8 (tvb, argptr), FALSE);
argptr += (1 + tvb_get_guint8 (tvb, argptr));
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* durable (octet) */
proto_tree_add_item (prop_tree, hf_amqp_header_tunnel_durable,
tvb, argptr, 1, FALSE);
argptr += 1;
}
prop_flags <<= 1;
if (prop_flags & 0x8000) {
/* broadcast (octet) */
proto_tree_add_item (prop_tree, hf_amqp_header_tunnel_broadcast,
tvb, argptr, 1, FALSE);
argptr += 1;
}
prop_flags <<= 1;
break;
case 120:
break;
}
break;
case AMQP_FRAME_TYPE_CONTENT_BODY:
proto_tree_add_item (amqp_tree, hf_amqp_payload,
tvb, 7, -1, FALSE);
break;
}
}
}
/* Dissection routine for AMQP field tables */
static void dissect_amqp_field_table (tvbuff_t *tvb, size_t offset,
size_t length, proto_item *item)
{
proto_item
*field_table_tree;
char
buff [256];
size_t
namelen,
vallen;
guint8
type;
const char
*name,
*typename,
*value;
size_t
field_start;
field_table_tree = proto_item_add_subtree (item, ett_amqp);
while (length > 0) {
field_start = offset;
namelen = tvb_get_guint8 (tvb, offset);
offset += 1;
length -= 1;
name = (char*) tvb_get_ephemeral_string (tvb, offset, namelen);
offset += namelen;
length -= namelen;
type = tvb_get_guint8 (tvb, offset);
offset += 1;
length -= 1;
switch (type) {
case 'S':
typename = "string";
vallen = tvb_get_ntohl (tvb, offset);
offset += 4;
length -= 4;
value = (char*) tvb_get_ephemeral_string (tvb, offset, vallen);
offset += vallen;
length -= vallen;
break;
case 'I':
typename = "integer";
sprintf (buff, "%ld", (long) tvb_get_ntohl (tvb, offset));
value = buff;
offset += 4;
length -= 4;
break;
case 'D':
typename = "decimal";
value = "...";
offset += 5;
length -= 5;
break;
case 'T':
typename = "timestamp";
value = "...";
offset += 8;
length -= 8;
break;
case 'F':
/* TODO: make it recursive here */
typename = "field table";
vallen = tvb_get_ntohl (tvb, offset);
offset += 4;
length -= 4;
value = "...";
offset += vallen;
length -= vallen;
break;
case 'V':
typename = "void";
value = "";
default:
typename = "invalid";
value = "";
break;
}
proto_tree_add_none_format(field_table_tree, hf_amqp_field, tvb,
field_start, offset - field_start, "%s (%s): %s", name, typename,
value);
}
}
Attachment:
amqp
Description: Binary data
- Follow-Ups:
- Re: [Wireshark-dev] AMQP dissector - the code to review
- From: ronnie sahlberg
- Re: [Wireshark-dev] AMQP dissector - the code to review
- References:
- [Wireshark-dev] AMQP dissector - alpha version
- From: Martin Sustrik
- Re: [Wireshark-dev] AMQP dissector - alpha version
- From: ronnie sahlberg
- [Wireshark-dev] AMQP dissector - alpha version
- Prev by Date: Re: [Wireshark-dev] [PATCH 1/2] wiretap: New MPEG file format
- Next by Date: Re: [Wireshark-dev] [PATCH 1/2] wiretap: New MPEG file format
- Previous by thread: Re: [Wireshark-dev] AMQP dissector - alpha version
- Next by thread: Re: [Wireshark-dev] AMQP dissector - the code to review
- Index(es):