Fix WSP redirect and SIR address parsing:
- The incorrect number of octets were highlighted (bearer type and port number were disregarded). - In SIR version 1 content, correct the parsing (full WSP address length was not added to the offset for parsing the non-WSP contact points). svn path=/trunk/; revision=16012
This commit is contained in:
parent
d415c719ae
commit
875fb98655
|
@ -4492,6 +4492,7 @@ dissect_redirect(tvbuff_t *tvb, int offset, packet_info *pinfo,
|
|||
address redir_address;
|
||||
conversation_t *conv;
|
||||
guint32 index = 0; /* Address index */
|
||||
guint32 address_record_len; /* Length of the entire address record */
|
||||
|
||||
/*
|
||||
* Redirect flags.
|
||||
|
@ -4524,10 +4525,14 @@ dissect_redirect(tvbuff_t *tvb, int offset, packet_info *pinfo,
|
|||
*/
|
||||
address_flags_len = tvb_get_guint8 (tvb, offset);
|
||||
address_len = address_flags_len & ADDRESS_LEN;
|
||||
if (tree) {
|
||||
address_record_len = address_len
|
||||
+ (address_flags_len & BEARER_TYPE_INCLUDED ? 1 : 0)
|
||||
+ (address_flags_len & PORT_NUMBER_INCLUDED ? 2 : 0)
|
||||
;
|
||||
|
||||
if (tree) {
|
||||
ti = proto_tree_add_uint(addresses_tree, hf_address_entry,
|
||||
tvb, offset, 1 + address_len, index);
|
||||
tvb, offset, 1 + address_record_len, index);
|
||||
addr_tree = proto_item_add_subtree(ti, ett_address);
|
||||
|
||||
ti = proto_tree_add_uint (addr_tree, hf_address_flags_length,
|
||||
|
@ -4700,6 +4705,7 @@ add_addresses(proto_tree *tree, tvbuff_t *tvb, int hf)
|
|||
guint32 tvb_len = tvb_length(tvb);
|
||||
guint32 offset = 0;
|
||||
guint32 index = 0; /* Address index */
|
||||
guint32 address_record_len; /* Length of the entire address record */
|
||||
|
||||
/* Skip needless processing */
|
||||
if (! tree)
|
||||
|
@ -4720,9 +4726,13 @@ add_addresses(proto_tree *tree, tvbuff_t *tvb, int hf)
|
|||
*/
|
||||
address_flags_len = tvb_get_guint8 (tvb, offset);
|
||||
address_len = address_flags_len & ADDRESS_LEN;
|
||||
address_record_len = address_len
|
||||
+ (address_flags_len & BEARER_TYPE_INCLUDED ? 1 : 0)
|
||||
+ (address_flags_len & PORT_NUMBER_INCLUDED ? 2 : 0)
|
||||
;
|
||||
|
||||
ti = proto_tree_add_uint(addresses_tree, hf_address_entry,
|
||||
tvb, offset, 1 + address_len, index);
|
||||
tvb, offset, 1 + address_record_len, index);
|
||||
addr_tree = proto_item_add_subtree(ti, ett_address);
|
||||
|
||||
ti = proto_tree_add_uint (addr_tree, hf_address_flags_length,
|
||||
|
@ -4896,6 +4906,8 @@ dissect_sir(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
if (version == 0)
|
||||
return;
|
||||
|
||||
offset += val_len;
|
||||
|
||||
/* Length of non-WSP contact points list */
|
||||
val_len = tvb_get_guintvar(tvb, offset, &len);
|
||||
proto_tree_add_uint(subtree, hf_sir_contact_points_len,
|
||||
|
|
Loading…
Reference in New Issue