Created attachment 9969 [details]
Test Case - 1
Build Information:
wireshark 1.9.0 (SVN Rev 47627 from /trunk)
Copyright 1998-2013 Gerald Combs <gerald@wireshark.org> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiled (32-bit) with GTK+ 2.22.0, with Cairo 1.10.0, with Pango 1.28.2, with
GLib 2.26.1, with libpcap, with libz 1.2.3.4, without POSIX capabilities,
without libnl, without SMI, without c-ares, without ADNS, without Lua, without
Python, without GnuTLS, without Gcrypt, without Kerberos, without GeoIP,
without
PortAudio, with AirPcap.
Running on Linux 2.6.35-22-generic, with locale en_IN, with libpcap version
1.1.1, with libz 1.2.3.4, without AirPcap.
Built using gcc 4.4.5.
--
Is there any reason why the dissection for ISUP Generic notification hasn't
been implemented? The cause codes are actually present (as comments) in the
packet-isup.c.
Currently the message "Refer Q.763 for detailed documentation" is being
displayed.
Attached are some traces for the case.
The following changes in packet-isup.c is correcting the dissection:
--- packet-isup.c_original 2013-02-11 11:13:52.504090818 +0530
+++ packet-isup.c 2013-02-11 15:09:15.526544577 +0530
@@ -3730,6 +3730,31 @@
};
static value_string_ext ansi_isup_cause_code_vals_ext =
VALUE_STRING_EXT_INIT(ansi_isup_cause_code_vals);
+static const value_string q763_generic_notification_indicator_vals[] = {
+{ 0x0 , "User Suspended" },
+{ 0x1 , "User Resumed" },
+{ 0x2 , "Bearer service change" },
+{ 0x3 , "Discriminator for extension to ASN.1 encoded component (used in
DSS1)" },
+{ 0x4 , "Call completion delay" },
+{ 0x42 , "Conference established" },
+{ 0x43 , "Conference disconnected" },
+{ 0x44 , "Other party added" },
+{ 0x45 , "Isolated" },
+{ 0x46 , "Reattached" },
+{ 0x47 , "Other party isolated" },
+{ 0x48 , "Other party reattached" },
+{ 0x49 , "Other party split" },
+{ 0x4A , "Other party disconnected" },
+{ 0x4B , "Conference floating" },
+{ 0x60 , "Call is a waiting call" },
+{ 0x68 , "Diversion activated (used in DSS1)" },
+{ 0x69 , "Call transfer, alerting" },
+{ 0x6A , "Call transfer, active" },
+{ 0x79 , "Remote hold" },
+{ 0x7A , "Remote retrieval" },
+{ 0x7B , "Call is diverting" },
+};
+
static const value_string ansi_isup_coding_standard_vals[] = {
{ 0, "CCITT Standard" },
{ 1, "Reserved for other international standards" },
@@ -5752,11 +5777,28 @@
dissect_isup_generic_notification_indicator_parameter(tvbuff_t *parameter_tvb,
proto_tree *parameter_tree, proto_item *parameter_item)
{
guint8 indicators;
-
+ guint8 actual_indicator;
+ int offset = 0;
+ guint length = tvb_reported_length(parameter_tvb);
+
indicators = tvb_get_guint8(parameter_tvb, 0);
+ actual_indicator = indicators & 0x7F;
proto_tree_add_text(parameter_tree, parameter_tvb, 0,
GENERIC_NOTIFICATION_IND_LENGTH,
- "Generic notification indicator: 0x%x (refer to
3.25/Q.763 for detailed decoding)", indicators);
- proto_item_set_text(parameter_item,"Generic notification indicator: 0x%x",
indicators);
+ "Generic notification indicator:
%s",val_to_str(actual_indicator,q763_generic_notification_indicator_vals,"Reserved
(0x%X)"));
+
+ proto_item_set_text(parameter_item,"Generic notification indicator: 0x%x",
indicators);
+
+ length--;
+ offset++;
+ if (length==0)
+ {
+ return;
+ }
+ proto_tree_add_text(parameter_tree, parameter_tvb, offset,
+ length, "Diagnostic: %s",
+ tvb_bytes_to_str(parameter_tvb, offset, length));
+ return;
+
}
/* ------------------------------------------------------------------