aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-q931.c
diff options
context:
space:
mode:
authorjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>2009-08-03 21:12:41 +0000
committerjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>2009-08-03 21:12:41 +0000
commitd79bf700ae1a6a826d722cc7554810596319ca57 (patch)
treeda8a88c5d9af354d171e9363d4d598b1d9f5ae4e /epan/dissectors/packet-q931.c
parentf09d378d3d5392bf86f5430681619d04953bee6b (diff)
From Gerasimos Dimitriadis:
Added decoding support for the High Layer Compatibility IE in DTAP and updated the relevant part in Q.931. Also some minor enhancements in Q.931. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@29280 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-q931.c')
-rw-r--r--epan/dissectors/packet-q931.c111
1 files changed, 92 insertions, 19 deletions
diff --git a/epan/dissectors/packet-q931.c b/epan/dissectors/packet-q931.c
index 31e98c007b..544d5534d8 100644
--- a/epan/dissectors/packet-q931.c
+++ b/epan/dissectors/packet-q931.c
@@ -69,6 +69,11 @@ static int q931_tap = -1;
static int proto_q931 = -1;
static int hf_q931_discriminator = -1;
static int hf_q931_coding_standard = -1;
+static int hf_q931_interpretation = -1;
+static int hf_q931_pres_meth_prot_prof = -1;
+static int hf_q931_high_layer_characteristics = -1;
+static int hf_q931_extended_high_layer_characteristics = -1;
+static int hf_q931_extended_audiovisual_characteristics = -1;
static int hf_q931_information_transfer_capability = -1;
static int hf_q931_transfer_mode = -1;
static int hf_q931_information_transfer_rate = -1;
@@ -544,6 +549,9 @@ static const value_string q931_information_transfer_rate_vals[] = {
{ 0, NULL }
};
+/*
+ * Values 0x0a and 0x0b added from Q.931 Amendment 1 (12/2002)
+ */
static const value_string q931_uil1_vals[] = {
{ 0x01, "V.110/I.460/X.30 rate adaption" },
{ 0x02, "Recommendation G.711 u-law" },
@@ -554,6 +562,8 @@ static const value_string q931_uil1_vals[] = {
{ 0x07, "Non-ITU-T-standardized rate adaption" },
{ 0x08, "V.120 rate adaption" },
{ 0x09, "X.31 HDLC flag stuffing" },
+ { 0x0a, "Recommendation G.728 LD-CELP" },
+ { 0x0b, "Recommendation G.729 CS-ACELP" },
{ 0, NULL }
};
@@ -2293,6 +2303,8 @@ dissect_q931_restart_indicator_ie(tvbuff_t *tvb, int offset, int len,
/*
* Dissect a High-layer compatibility information element.
*/
+#define Q931_MAINTENANCE 0x5e
+#define Q931_MANAGEMENT 0x5f
#define Q931_AUDIOVISUAL 0x60
static const value_string q931_high_layer_characteristics_vals[] = {
{ 0x01, "Telephony" },
@@ -2312,6 +2324,29 @@ static const value_string q931_high_layer_characteristics_vals[] = {
{ Q931_AUDIOVISUAL, "F.720/F.821 and F.731 Profile 1a videotelephony" },
{ 0x61, "F.702 and F.731 Profile 1b videoconferencing" },
{ 0x62, "F.702 and F.731 audiographic conferencing" },
+ { 0x68, "F.700-series Multimedia services" },
+ { 0, NULL }
+};
+
+static const value_string q931_extended_high_layer_characteristics_vals[] = {
+ { 0x01, "Telephony" },
+ { 0x04, "F.182 Facsimile Group 2/3" },
+ { 0x21, "F.184 Facsimile Group 4 Class I" },
+ { 0x24, "F.230 Teletex, basic and mixed mode, and F.184 Facsimile Group 4, Classes II and III" },
+ { 0x28, "F.220 Teletex, basic and processable mode" },
+ { 0x31, "F.200 Teletex, basic mode" },
+ { 0x32, "F.300 and T.102 syntax-based Videotex" },
+ { 0x33, "F.300 and T.101 international Videotex interworking" },
+ { 0x35, "F.60 Telex" },
+ { 0x38, "X.400 Message Handling Systems" },
+ { 0x41, "X.200 OSI application" },
+ { 0x42, "FTAM application" },
+ { 0x5E, "Not available for assignment" },
+ { 0x5F, "Not available for assignment" },
+ { Q931_AUDIOVISUAL, "F.720/F.821 and F.731 Profile 1a videotelephony" },
+ { 0x61, "F.702 and F.731 Profile 1b videoconferencing" },
+ { 0x62, "F.702 and F.731 audiographic conferencing" },
+ { 0x68, "F.700-series Multimedia services" },
{ 0, NULL }
};
@@ -2322,22 +2357,44 @@ static const value_string q931_audiovisual_characteristics_vals[] = {
{ 0x00, NULL }
};
+static const value_string q931_interpretation_vals[] = {
+ { 0x04, "First (primary or only) high layer characteristics identification to be used in the call" },
+ { 0x00, NULL }
+};
+
+static const value_string q931_pres_meth_prot_prof_vals[] = {
+ { 0x01, "High layer protocol profile (without specification of attributes)" },
+ { 0x00, NULL }
+};
+
+/*
+ * High layer protocol profile
+ */
+#define Q931_HIGH_LAYER_PROTOCOL_PROFILE 0x01
+
void
dissect_q931_high_layer_compat_ie(tvbuff_t *tvb, int offset, int len,
proto_tree *tree)
{
guint8 octet;
guint8 coding_standard;
+ guint8 pres_method;
guint8 characteristics;
if (len == 0)
return;
octet = tvb_get_guint8(tvb, offset);
coding_standard = octet & 0x60;
+ pres_method = octet & 0x03;
+
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
proto_tree_add_uint(tree, hf_q931_coding_standard, tvb, offset, 1, octet);
+ proto_tree_add_uint(tree, hf_q931_interpretation, tvb, offset, 1, octet);
+ proto_tree_add_uint(tree, hf_q931_pres_meth_prot_prof, tvb, offset, 1, octet);
+
offset += 1;
len -= 1;
- if (coding_standard != Q931_ITU_STANDARDIZED_CODING) {
+ if ((coding_standard != Q931_ITU_STANDARDIZED_CODING) || (pres_method != Q931_HIGH_LAYER_PROTOCOL_PROFILE)) {
/*
* We don't know how the call state is encoded,
* so just dump it as data and be done with it.
@@ -2347,15 +2404,15 @@ dissect_q931_high_layer_compat_ie(tvbuff_t *tvb, int offset, int len,
tvb_bytes_to_str(tvb, offset, len));
return;
}
-
if (len == 0)
return;
+
octet = tvb_get_guint8(tvb, offset);
characteristics = octet & 0x7F;
- proto_tree_add_text(tree, tvb, offset, 1,
- "High layer characteristics identification: %s",
- val_to_str(characteristics, q931_high_layer_characteristics_vals,
- "Unknown (0x%02X)"));
+
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
+ proto_tree_add_uint(tree, hf_q931_high_layer_characteristics, tvb, offset, 1, octet);
+
offset += 1;
len -= 1;
@@ -2363,19 +2420,15 @@ dissect_q931_high_layer_compat_ie(tvbuff_t *tvb, int offset, int len,
if (len == 0)
return;
octet = tvb_get_guint8(tvb, offset);
- if (characteristics == Q931_AUDIOVISUAL) {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Extended audiovisual characteristics identification: %s",
- val_to_str(octet & 0x7F,
- q931_audiovisual_characteristics_vals,
- "Unknown (0x%02X)"));
- } else {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Extended high layer characteristics identification: %s",
- val_to_str(octet & 0x7F,
- q931_high_layer_characteristics_vals,
- "Unknown (0x%02X)"));
- }
+ if ((characteristics == Q931_AUDIOVISUAL) || (characteristics == 0x61) || (characteristics == 0x62) ||
+ (characteristics == 0x68)) {
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
+ proto_tree_add_uint(tree, hf_q931_extended_audiovisual_characteristics, tvb, offset, 1, octet);
+ }
+ else if ((characteristics == Q931_MANAGEMENT) || (characteristics == Q931_MAINTENANCE)) {
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
+ proto_tree_add_uint(tree, hf_q931_extended_high_layer_characteristics, tvb, offset, 1, octet);
+ }
}
}
@@ -3283,6 +3336,26 @@ proto_register_q931(void)
{ "Coding standard", "q931.coding_standard", FT_UINT8, BASE_HEX,
VALS(q931_coding_standard_vals), 0x60,NULL, HFILL }},
+ { &hf_q931_interpretation,
+ { "Interpretation", "q931.interpretation", FT_UINT8, BASE_HEX,
+ VALS(q931_interpretation_vals), 0x1C, NULL, HFILL}},
+
+ { &hf_q931_pres_meth_prot_prof,
+ { "Presentation method of protocol profile", "q931.presentation_method_protocol_profile", FT_UINT8, BASE_HEX,
+ VALS(q931_pres_meth_prot_prof_vals), 0x03, NULL, HFILL}},
+
+ { &hf_q931_high_layer_characteristics,
+ { "High layer characteristics identification", "q931.high_layer_characteristics", FT_UINT8, BASE_HEX,
+ VALS(q931_high_layer_characteristics_vals), 0x7f, NULL, HFILL }},
+
+ { &hf_q931_extended_high_layer_characteristics,
+ { "Extended high layer characteristics identification", "q931.extended_high_layer_characteristics", FT_UINT8, BASE_HEX,
+ VALS(q931_extended_high_layer_characteristics_vals), 0x7f, NULL, HFILL }},
+
+ { &hf_q931_extended_audiovisual_characteristics,
+ { "Extended audiovisual characteristics identification", "q931.extended_audiovisual_characteristics", FT_UINT8, BASE_HEX,
+ VALS(q931_audiovisual_characteristics_vals), 0x7f, NULL, HFILL }},
+
{ &hf_q931_information_transfer_capability,
{ "Information transfer capability", "q931.information_transfer_capability", FT_UINT8, BASE_HEX,
VALS(q931_information_transfer_capability_vals), 0x1f,NULL, HFILL }},