aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-sua.c
diff options
context:
space:
mode:
authormorriss <morriss@f5534014-38df-0310-8fa8-9805f1628bb7>2009-06-02 15:34:17 +0000
committermorriss <morriss@f5534014-38df-0310-8fa8-9805f1628bb7>2009-06-02 15:34:17 +0000
commit0bc4c14a35ec25f1de373719188e62538576c2ff (patch)
treed683e48ef477775663d26843419e8375c9ed6636 /epan/dissectors/packet-sua.c
parente9184a4035de640bf979bbec42b21160a0df8c14 (diff)
Decode SCCP cause values in SUA (using value_strings exported from the SCCP
dissector). git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@28599 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-sua.c')
-rw-r--r--epan/dissectors/packet-sua.c48
1 files changed, 40 insertions, 8 deletions
diff --git a/epan/dissectors/packet-sua.c b/epan/dissectors/packet-sua.c
index 59040e3290..b1e4a1a454 100644
--- a/epan/dissectors/packet-sua.c
+++ b/epan/dissectors/packet-sua.c
@@ -791,22 +791,54 @@ dissect_destination_reference_number_parameter(tvbuff_t *parameter_tvb, proto_tr
#define CAUSE_TYPE_OFFSET (PARAMETER_VALUE_OFFSET + RESERVED_2_LENGTH)
#define CAUSE_VALUE_OFFSET (CAUSE_TYPE_OFFSET + CAUSE_TYPE_LENGTH)
+#define CAUSE_TYPE_RETURN 0x1
+#define CAUSE_TYPE_REFUSAL 0x2
+#define CAUSE_TYPE_RELEASE 0x3
+#define CAUSE_TYPE_RESET 0x4
+#define CAUSE_TYPE_ERROR 0x5
static const value_string cause_type_values[] = {
- { 0x1, "Return Cause" },
- { 0x2, "Refusal Cause" },
- { 0x3, "Release Cause" },
- { 0x4, "Reset Cause" },
- { 0x5, "Error cause" },
- { 0, NULL } };
+ { CAUSE_TYPE_RETURN, "Return Cause" },
+ { CAUSE_TYPE_REFUSAL, "Refusal Cause" },
+ { CAUSE_TYPE_RELEASE, "Release Cause" },
+ { CAUSE_TYPE_RESET, "Reset Cause" },
+ { CAUSE_TYPE_ERROR, "Error cause" },
+ { 0, NULL } };
static void
dissect_sccp_cause_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
{
+ guint8 cause_type, cause;
+ proto_item *pi;
+ const gchar *cause_string;
+
proto_tree_add_item(parameter_tree, hf_cause_reserved, parameter_tvb, PARAMETER_VALUE_OFFSET, RESERVED_2_LENGTH, NETWORK_BYTE_ORDER);
proto_tree_add_item(parameter_tree, hf_cause_type, parameter_tvb, CAUSE_TYPE_OFFSET, CAUSE_TYPE_LENGTH, NETWORK_BYTE_ORDER);
- proto_tree_add_item(parameter_tree, hf_cause_value, parameter_tvb, CAUSE_VALUE_OFFSET, CAUSE_VALUE_LENGTH, NETWORK_BYTE_ORDER);
+ cause_type = tvb_get_guint8(parameter_tvb, CAUSE_TYPE_OFFSET);
+ pi = proto_tree_add_item(parameter_tree, hf_cause_value, parameter_tvb, CAUSE_VALUE_OFFSET, CAUSE_VALUE_LENGTH, NETWORK_BYTE_ORDER);
+ cause = tvb_get_guint8(parameter_tvb, CAUSE_VALUE_OFFSET);
+
+ switch (cause_type) {
+ case CAUSE_TYPE_RETURN:
+ cause_string = val_to_str(cause, sccp_return_cause_values, "unknown");
+ break;
+ case CAUSE_TYPE_REFUSAL:
+ cause_string = val_to_str(cause, sccp_refusal_cause_values, "unknown");
+ break;
+ case CAUSE_TYPE_RELEASE:
+ cause_string = val_to_str(cause, sccp_release_cause_values, "unknown");
+ break;
+ case CAUSE_TYPE_RESET:
+ cause_string = val_to_str(cause, sccp_reset_cause_values, "unknown");
+ break;
+ case CAUSE_TYPE_ERROR:
+ cause_string = val_to_str(cause, sccp_error_cause_values, "unknown");
+ break;
+ default:
+ cause_string = "unknown";
+ }
- proto_item_append_text(parameter_item, " (%s)", val_to_str(tvb_get_guint8(parameter_tvb, CAUSE_TYPE_OFFSET), cause_type_values, "unknown"));
+ proto_item_append_text(pi, " (%s)", cause_string);
+ proto_item_append_text(parameter_item, " (%s: %s)", val_to_str(cause_type, cause_type_values, "unknown"), cause_string);
}
#define SEQUENCE_NUMBER_REC_SEQ_LENGTH 1