aboutsummaryrefslogtreecommitdiffstats
path: root/packet-m3ua.c
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2003-01-27 21:40:40 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2003-01-27 21:40:40 +0000
commit7a2b287186085e7137335e3f0ad10c3cd3719aeb (patch)
tree5c05c32e18df0149dbd056326d546a8ad722bd83 /packet-m3ua.c
parentcf5b6891fc79fafde579cd2a4dccad501c7b0eee (diff)
From Jeff Morriss: dissect parameters regardless of whether a protocol
tree is being generated or not, so that subdissectors get called. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@7009 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-m3ua.c')
-rw-r--r--packet-m3ua.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/packet-m3ua.c b/packet-m3ua.c
index 51921624ea..df019f7319 100644
--- a/packet-m3ua.c
+++ b/packet-m3ua.c
@@ -7,7 +7,7 @@
*
* Copyright 2000, 2001, 2002, 2003 Michael Tuexen <Michael.Tuexen [AT] siemens.com>
*
- * $Id: packet-m3ua.c,v 1.24 2003/01/22 09:07:26 tuexen Exp $
+ * $Id: packet-m3ua.c,v 1.25 2003/01/27 21:40:40 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -1189,6 +1189,9 @@ dissect_v5_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tr
length = tvb_get_ntohs(parameter_tvb, PARAMETER_LENGTH_OFFSET);
padding_length = tvb_length(parameter_tvb) - length;
+ if (!tree && tag != V5_PROTOCOL_DATA_PARAMETER_TAG)
+ return; /* Nothing to do here */
+
/* create proto_tree stuff */
parameter_item = proto_tree_add_text(m3ua_tree, parameter_tvb, PARAMETER_HEADER_OFFSET, tvb_length(parameter_tvb), val_to_str(tag, v5_parameter_tag_values, "Unknown parameter"));
parameter_tree = proto_item_add_subtree(parameter_item, ett_parameter);
@@ -1311,6 +1314,9 @@ dissect_v6_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tr
length = tvb_get_ntohs(parameter_tvb, PARAMETER_LENGTH_OFFSET);
padding_length = tvb_length(parameter_tvb) - length;
+ if (!tree && tag != V6_PROTOCOL_DATA_1_PARAMETER_TAG && tag != V6_PROTOCOL_DATA_2_PARAMETER_TAG)
+ return; /* Nothing to do here */
+
/* create proto_tree stuff */
parameter_item = proto_tree_add_text(m3ua_tree, parameter_tvb, PARAMETER_HEADER_OFFSET, tvb_length(parameter_tvb), val_to_str(tag, v6_parameter_tag_values, "Unknown parameter"));
parameter_tree = proto_item_add_subtree(parameter_item, ett_parameter);
@@ -1469,6 +1475,9 @@ dissect_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tree,
proto_item *parameter_item;
proto_tree *parameter_tree;
+ if (!tree)
+ return; /* Nothing to do here */
+
/* extract tag and length from the parameter */
tag = tvb_get_ntohs(parameter_tvb, PARAMETER_TAG_OFFSET);
length = tvb_get_ntohs(parameter_tvb, PARAMETER_LENGTH_OFFSET);
@@ -1609,8 +1618,11 @@ dissect_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *tree, pro
dissect_v5_common_header(common_header_tvb, pinfo, m3ua_tree);
else
dissect_common_header(common_header_tvb, pinfo, m3ua_tree);
- if (m3ua_tree)
- dissect_parameters(parameters_tvb, pinfo, tree, m3ua_tree);
+
+ /* Need to dissect (certain) parameters even when !tree, so subdissectors
+ * (e.g., MTP3) are always called.
+ */
+ dissect_parameters(parameters_tvb, pinfo, tree, m3ua_tree);
}
static void