diff options
author | Jeff Morriss <jeff.morriss@ulticom.com> | 2007-12-05 19:55:40 +0000 |
---|---|---|
committer | Jeff Morriss <jeff.morriss@ulticom.com> | 2007-12-05 19:55:40 +0000 |
commit | 20a98a36f37cce4ca1651b204eb80a45f754d8e4 (patch) | |
tree | 5f2bb2336acc6bd4de0bafd4f9df0bd711b99210 /epan | |
parent | 69fbf4c69f6b264d337d1675d429b35629146741 (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.c | 45 |
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; |