aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorJeff Morriss <jeff.morriss@ulticom.com>2007-12-05 19:55:40 +0000
committerJeff Morriss <jeff.morriss@ulticom.com>2007-12-05 19:55:40 +0000
commit20a98a36f37cce4ca1651b204eb80a45f754d8e4 (patch)
tree5f2bb2336acc6bd4de0bafd4f9df0bd711b99210 /epan
parent69fbf4c69f6b264d337d1675d429b35629146741 (diff)
From Cliff Romash: TMR is not a mandatory parameter on an ANSI IAM but USI is.
svn path=/trunk/; revision=23773
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-isup.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c
index 4cd81e7102..d070510eef 100644
--- a/epan/dissectors/packet-isup.c
+++ b/epan/dissectors/packet-isup.c
@@ -5990,18 +5990,39 @@ dissect_isup_initial_address_message(tvbuff_t *message_tvb, proto_tree *isup_tre
dissect_isup_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item);
offset += CALLING_PRTYS_CATEGORY_LENGTH;
- /* Do stuff for 4th mandatory fixed parameter: Transmission medium requirement */
- parameter_type = PARAM_TYPE_TRANSM_MEDIUM_REQU;
- parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset,
- TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH,
- "Transmission medium requirement");
- parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter);
- proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
- actual_length = tvb_ensure_length_remaining(message_tvb, offset);
- parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH, actual_length), TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH);
- dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item);
- offset += TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH;
-
+ switch (isup_standard){
+ case ITU_STANDARD:
+ /* If ITU, do stuff for 4th mandatory fixed parameter: Transmission medium requirement */
+ parameter_type = PARAM_TYPE_TRANSM_MEDIUM_REQU;
+ parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset,
+ TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH,
+ "Transmission medium requirement");
+ parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter);
+ proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+ actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+ parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH, actual_length), TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH);
+ dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item);
+ offset += TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH;
+ break;
+ case ANSI_STANDARD:
+ /* If ANSI, do stuff for the first mandatory variable parameter, USER_SERVICE_INFORMATION */
+ parameter_type = PARAM_TYPE_USER_SERVICE_INFO;
+ parameter_pointer = tvb_get_guint8(message_tvb, offset);
+ parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer);
+ parameter_item = proto_tree_add_text(isup_tree, message_tvb,
+ offset + parameter_pointer,
+ parameter_length + PARAMETER_LENGTH_IND_LENGTH,
+ "User Service Information");
+ parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter);
+ proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+ proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer);
+ proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length);
+ actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+ parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length );
+ dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item);
+ offset += PARAMETER_POINTER_LENGTH;
+ break;
+ }
/* Do stuff for mandatory variable parameter Called party number */
parameter_type = PARAM_TYPE_CALLED_PARTY_NR;