aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2001-01-14 10:15:56 +0000
committerGuy Harris <guy@alum.mit.edu>2001-01-14 10:15:56 +0000
commit254179eec8c38183c3861d30a980f1571c05345c (patch)
treed7e84f84f226c16f869aa35fe49f823b6a0bf07c
parent5531f6945c90a65d2ee5793520cccc3598fcd68d (diff)
Updates from Michael Tuexen.
XXX - this causes the Info column for M3UA packets to have stuff from SCTP as well as M3UA, but doesn't cause the Protocol column to say "SCTP/M3UA", just "M3UA"; fixing that requires that the M3UA dissector be able to find out whether it's already put "/M3UA" into the Protocol column, but I Have A Cunning Plan to handle that which might also allow display filters containing only protocol names (i.e., filters that care only whether a given packet contains data for a given protocol) to run much faster. svn path=/trunk/; revision=2898
-rw-r--r--packet-iua.c77
-rw-r--r--packet-m3ua.c84
2 files changed, 83 insertions, 78 deletions
diff --git a/packet-iua.c b/packet-iua.c
index 3521f735dd..867e8f7b68 100644
--- a/packet-iua.c
+++ b/packet-iua.c
@@ -8,7 +8,7 @@
*
* Copyright 2000, Michael Tüxen <Michael.Tuexen@icn.siemens.de>
*
- * $Id: packet-iua.c,v 1.2 2001/01/13 04:30:20 guy Exp $
+ * $Id: packet-iua.c,v 1.3 2001/01/14 10:15:56 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -430,25 +430,27 @@ dissect_iua_common_header(tvbuff_t *common_header_tvb, packet_info *pinfo, proto
col_append_str(pinfo->fd, COL_INFO, " ");
};
- /* add the components of the common header to the protocol tree */
- proto_tree_add_uint_format(iua_tree, hf_iua_version,
- common_header_tvb, VERSION_OFFSET, VERSION_LENGTH,
- version, "Version: %u (%s)",
- version, val_to_str(version, iua_protocol_version_values, "unknown"));
- proto_tree_add_uint(iua_tree, hf_iua_reserved,
- common_header_tvb, RESERVED_OFFSET, RESERVED_LENGTH,
- reserved);
- proto_tree_add_uint_format(iua_tree, hf_iua_message_class,
- common_header_tvb, MESSAGE_CLASS_OFFSET, MESSAGE_CLASS_LENGTH,
- message_class, "Message class: %u (%s)",
- message_class, val_to_str(message_class, iua_message_class_values, "reserved"));
- proto_tree_add_uint_format(iua_tree, hf_iua_message_type,
- common_header_tvb, MESSAGE_TYPE_OFFSET, MESSAGE_TYPE_LENGTH,
- message_type, "Message type: %u (%s)",
- message_type, val_to_str(message_class * 256 + message_type, iua_message_class_type_values, "reserved"));
- proto_tree_add_uint(iua_tree, hf_iua_message_length,
- common_header_tvb, MESSAGE_LENGTH_OFFSET, MESSAGE_LENGTH_LENGTH,
- message_length);
+ if (iua_tree) {
+ /* add the components of the common header to the protocol tree */
+ proto_tree_add_uint_format(iua_tree, hf_iua_version,
+ common_header_tvb, VERSION_OFFSET, VERSION_LENGTH,
+ version, "Version: %u (%s)",
+ version, val_to_str(version, iua_protocol_version_values, "unknown"));
+ proto_tree_add_uint(iua_tree, hf_iua_reserved,
+ common_header_tvb, RESERVED_OFFSET, RESERVED_LENGTH,
+ reserved);
+ proto_tree_add_uint_format(iua_tree, hf_iua_message_class,
+ common_header_tvb, MESSAGE_CLASS_OFFSET, MESSAGE_CLASS_LENGTH,
+ message_class, "Message class: %u (%s)",
+ message_class, val_to_str(message_class, iua_message_class_values, "reserved"));
+ proto_tree_add_uint_format(iua_tree, hf_iua_message_type,
+ common_header_tvb, MESSAGE_TYPE_OFFSET, MESSAGE_TYPE_LENGTH,
+ message_type, "Message type: %u (%s)",
+ message_type, val_to_str(message_class * 256 + message_type, iua_message_class_type_values, "reserved"));
+ proto_tree_add_uint(iua_tree, hf_iua_message_length,
+ common_header_tvb, MESSAGE_LENGTH_OFFSET, MESSAGE_LENGTH_LENGTH,
+ message_length);
+ }
}
static void
@@ -822,23 +824,25 @@ dissect_iua_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *iua_t
dissect_iua_common_header(common_header_tvb, pinfo, iua_tree);
offset += COMMON_HEADER_LENGTH;
- /* extract zero or more parameters and process them individually */
- while(tvb_length_remaining(message_tvb, offset)) {
- length = tvb_get_ntohs(message_tvb, offset + PARAMETER_LENGTH_OFFSET);
- padding_length = nr_of_padding_bytes(length);
- total_length = length + padding_length;
- /* create a tvb for the parameter including the padding bytes */
- parameter_tvb = tvb_new_subset(message_tvb, offset, total_length, total_length);
- dissect_iua_parameter(parameter_tvb, iua_tree);
- /* get rid of the handled parameter */
- offset += total_length;
+ if (iua_tree) {
+ /* extract zero or more parameters and process them individually */
+ while(tvb_length_remaining(message_tvb, offset)) {
+ length = tvb_get_ntohs(message_tvb, offset + PARAMETER_LENGTH_OFFSET);
+ padding_length = nr_of_padding_bytes(length);
+ total_length = length + padding_length;
+ /* create a tvb for the parameter including the padding bytes */
+ parameter_tvb = tvb_new_subset(message_tvb, offset, total_length, total_length);
+ dissect_iua_parameter(parameter_tvb, iua_tree);
+ /* get rid of the handled parameter */
+ offset += total_length;
+ }
}
}
static void
dissect_iua(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *ti;
+ proto_item *iua_item;
proto_tree *iua_tree;
pinfo->current_proto = "IUA";
@@ -853,12 +857,13 @@ dissect_iua(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *tree)
necessary to generate protocol tree items. */
if (tree) {
/* create the m3ua protocol tree */
- ti = proto_tree_add_protocol_format(tree, proto_iua, message_tvb, 0, tvb_length(message_tvb),
- "ISDN Q.921-User Adaptation Layer");
- iua_tree = proto_item_add_subtree(ti, ett_iua);
- /* dissect the message */
- dissect_iua_message(message_tvb, pinfo, iua_tree);
+ iua_item = proto_tree_add_item(tree, proto_iua, message_tvb, 0, tvb_length(message_tvb), FALSE);
+ iua_tree = proto_item_add_subtree(iua_item, ett_iua);
+ } else {
+ iua_tree = NULL;
};
+ /* dissect the message */
+ dissect_iua_message(message_tvb, pinfo, iua_tree);
}
/* Register the protocol with Ethereal */
diff --git a/packet-m3ua.c b/packet-m3ua.c
index bbec906122..9ecea83f7b 100644
--- a/packet-m3ua.c
+++ b/packet-m3ua.c
@@ -8,7 +8,7 @@
*
* Copyright 2000, Michael Tüxen <Michael.Tuexen@icn.siemens.de>
*
- * $Id: packet-m3ua.c,v 1.2 2001/01/13 18:29:39 guy Exp $
+ * $Id: packet-m3ua.c,v 1.3 2001/01/14 10:15:56 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -409,7 +409,6 @@ dissect_m3ua_common_header(tvbuff_t *common_header_tvb, packet_info *pinfo, prot
{
guint8 version, reserved, message_class, message_type;
guint32 message_length;
-
/* Extract the common header */
version = tvb_get_guint8(common_header_tvb, VERSION_OFFSET);
reserved = tvb_get_guint8(common_header_tvb, RESERVED_OFFSET);
@@ -422,26 +421,29 @@ dissect_m3ua_common_header(tvbuff_t *common_header_tvb, packet_info *pinfo, prot
col_append_str(pinfo->fd, COL_INFO, " ");
};
- /* add the components of the common header to the protocol tree */
- proto_tree_add_uint_format(m3ua_tree, hf_m3ua_version,
- common_header_tvb, VERSION_OFFSET, VERSION_LENGTH,
- version, "Version: %u (%s)",
- version, val_to_str(version, m3ua_protocol_version_values, "unknown"));
- proto_tree_add_uint(m3ua_tree, hf_m3ua_reserved,
- common_header_tvb, RESERVED_OFFSET, RESERVED_LENGTH,
- reserved);
- proto_tree_add_uint_format(m3ua_tree, hf_m3ua_message_class,
- common_header_tvb, MESSAGE_CLASS_OFFSET, MESSAGE_CLASS_LENGTH,
+ if (m3ua_tree) {
+ /* add the components of the common header to the protocol tree */
+ proto_tree_add_uint_format(m3ua_tree, hf_m3ua_version,
+ common_header_tvb, VERSION_OFFSET, VERSION_LENGTH,
+ version, "Version: %u (%s)",
+ version, val_to_str(version, m3ua_protocol_version_values, "unknown"));
+ proto_tree_add_uint(m3ua_tree, hf_m3ua_reserved,
+ common_header_tvb, RESERVED_OFFSET, RESERVED_LENGTH,
+ reserved);
+ proto_tree_add_uint_format(m3ua_tree, hf_m3ua_message_class,
+ common_header_tvb, MESSAGE_CLASS_OFFSET, MESSAGE_CLASS_LENGTH,
message_class, "Message class: %u (%s)",
- message_class, val_to_str(message_class, m3ua_message_class_values, "reserved"));
- proto_tree_add_uint_format(m3ua_tree, hf_m3ua_message_type,
- common_header_tvb, MESSAGE_TYPE_OFFSET, MESSAGE_TYPE_LENGTH,
- message_type, "Message type: %u (%s)",
- message_type, val_to_str(message_class * 256 + message_type, m3ua_message_class_type_values, "reserved"));
- proto_tree_add_uint(m3ua_tree, hf_m3ua_message_length,
- common_header_tvb, MESSAGE_LENGTH_OFFSET, MESSAGE_LENGTH_LENGTH,
- message_length);
+ message_class, val_to_str(message_class, m3ua_message_class_values, "reserved"));
+ proto_tree_add_uint_format(m3ua_tree, hf_m3ua_message_type,
+ common_header_tvb, MESSAGE_TYPE_OFFSET, MESSAGE_TYPE_LENGTH,
+ message_type, "Message type: %u (%s)",
+ message_type, val_to_str(message_class * 256 + message_type, m3ua_message_class_type_values, "reserved"));
+ proto_tree_add_uint(m3ua_tree, hf_m3ua_message_length,
+ common_header_tvb, MESSAGE_LENGTH_OFFSET, MESSAGE_LENGTH_LENGTH,
+ message_length);
+ };
}
+
static void
dissect_m3ua_network_appearance_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
{
@@ -797,24 +799,26 @@ dissect_m3ua_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *m3ua
common_header_tvb = tvb_new_subset(message_tvb, offset, COMMON_HEADER_LENGTH, COMMON_HEADER_LENGTH);
dissect_m3ua_common_header(common_header_tvb, pinfo, m3ua_tree);
offset += COMMON_HEADER_LENGTH;
-
- /* extract zero or more parameters and process them individually */
- while(tvb_length_remaining(message_tvb, offset)) {
- length = tvb_get_ntohs(message_tvb, offset + PARAMETER_LENGTH_OFFSET);
- padding_length = nr_of_padding_bytes(length);
- total_length = length + padding_length;
- /* create a tvb for the parameter including the padding bytes */
- parameter_tvb = tvb_new_subset(message_tvb, offset, total_length, total_length);
- dissect_m3ua_parameter(parameter_tvb, m3ua_tree);
- /* get rid of the handled parameter */
- offset += total_length;
+
+ if (m3ua_tree) {
+ /* extract zero or more parameters and process them individually */
+ while(tvb_length_remaining(message_tvb, offset)) {
+ length = tvb_get_ntohs(message_tvb, offset + PARAMETER_LENGTH_OFFSET);
+ padding_length = nr_of_padding_bytes(length);
+ total_length = length + padding_length;
+ /* create a tvb for the parameter including the padding bytes */
+ parameter_tvb = tvb_new_subset(message_tvb, offset, total_length, total_length);
+ dissect_m3ua_parameter(parameter_tvb, m3ua_tree);
+ /* get rid of the handled parameter */
+ offset += total_length;
+ }
}
}
static void
dissect_m3ua(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *ti;
+ proto_item *m3ua_item;
proto_tree *m3ua_tree;
CHECK_DISPLAY_AS_DATA(proto_m3ua, message_tvb, pinfo, tree);
@@ -825,21 +829,17 @@ dissect_m3ua(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *tree)
if (check_col(pinfo->fd, COL_PROTOCOL))
col_set_str(pinfo->fd, COL_PROTOCOL, "M3UA");
- /* clear the Info column so that if we throw an exception it doesn't
- show stuff from the protocol above us */
- if (check_col(pinfo->fd, COL_INFO))
- col_clear(pinfo->fd, COL_INFO);
-
/* In the interest of speed, if "tree" is NULL, don't do any work not
necessary to generate protocol tree items. */
if (tree) {
/* create the m3ua protocol tree */
- ti = proto_tree_add_protocol_format(tree, proto_m3ua, message_tvb, 0, tvb_length(message_tvb),
- "MTP 3 User Adaptation Layer");
- m3ua_tree = proto_item_add_subtree(ti, ett_m3ua);
- /* dissect the message */
- dissect_m3ua_message(message_tvb, pinfo, m3ua_tree);
+ m3ua_item = proto_tree_add_item(tree, proto_m3ua, message_tvb, 0, tvb_length(message_tvb), FALSE);
+ m3ua_tree = proto_item_add_subtree(m3ua_item, ett_m3ua);
+ } else {
+ m3ua_tree = NULL;
};
+ /* dissect the message */
+ dissect_m3ua_message(message_tvb, pinfo, m3ua_tree);
}
/* Register the protocol with Ethereal */