raknet: re-structure raknet_dissect_system_address()
Create the subtree first. Increment *offset as we process the fields. Change-Id: I03b6ba9a20541593b90ac7932aab5ac88538f640 Reviewed-on: https://code.wireshark.org/review/21167 Reviewed-by: Martin Kaiser <wireshark@kaiser.cx> Petri-Dish: Martin Kaiser <wireshark@kaiser.cx> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
parent
e1e31ed1c9
commit
3fac48da68
|
@ -276,7 +276,13 @@ raknet_dissect_system_address(proto_tree *tree, int hf, tvbuff_t *tvb, gint *off
|
|||
address addr;
|
||||
gchar *addr_str;
|
||||
|
||||
/* XXX - does it really make sense to have a string hf that's set to
|
||||
an empty string? */
|
||||
ti = proto_tree_add_string(tree, hf, tvb, *offset, -1, "");
|
||||
sub_tree = proto_item_add_subtree(ti, ett_raknet_system_address);
|
||||
ip_version = tvb_get_guint8(tvb, *offset);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_ip_version, tvb, *offset, 1, ENC_NA);
|
||||
(*offset)++;
|
||||
switch (ip_version) {
|
||||
case 4:
|
||||
/*
|
||||
|
@ -284,31 +290,26 @@ raknet_dissect_system_address(proto_tree *tree, int hf, tvbuff_t *tvb, gint *off
|
|||
* changing them. See ..RakNet/Source/BitStream.h
|
||||
* (BitStream::Write)
|
||||
*/
|
||||
v4_addr = ~tvb_get_ipv4(tvb, *offset + 1);
|
||||
port = tvb_get_ntohs(tvb, *offset + 1 + 4);
|
||||
|
||||
v4_addr = ~tvb_get_ipv4(tvb, *offset);
|
||||
set_address(&addr, AT_IPv4, sizeof(v4_addr), &v4_addr);
|
||||
addr_str = address_to_display(wmem_packet_scope(), &addr);
|
||||
|
||||
ti = proto_tree_add_string_format_value(tree, hf, tvb, *offset, 1 + 4 + 2,
|
||||
"", "%s:%" G_GUINT16_FORMAT, addr_str, port);
|
||||
sub_tree = proto_item_add_subtree(ti, ett_raknet_system_address);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_ip_version, tvb, *offset, 1, ENC_NA);
|
||||
proto_tree_add_ipv4(sub_tree, hf_raknet_ipv4_address, tvb, *offset + 1, 4, v4_addr);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_port, tvb, *offset + 1 + 4, 2, ENC_BIG_ENDIAN);
|
||||
*offset += 1 + 4 + 2;
|
||||
*offset += 4;
|
||||
port = tvb_get_ntohs(tvb, *offset);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_port, tvb, *offset, 2, ENC_BIG_ENDIAN);
|
||||
*offset += 2;
|
||||
proto_item_set_len(ti, 1 + 4 + 2);
|
||||
proto_item_append_text(ti, "%s:%" G_GUINT16_FORMAT, addr_str, port);
|
||||
break;
|
||||
case 6:
|
||||
addr_str = tvb_ip6_to_str(tvb, *offset + 1);
|
||||
port = tvb_get_ntohs(tvb, *offset + 1 + 16);
|
||||
|
||||
ti = proto_tree_add_string_format_value(tree, hf, tvb, *offset, 1 + 16 + 2,
|
||||
"", "[%s]:%" G_GUINT16_FORMAT, addr_str, port);
|
||||
sub_tree = proto_item_add_subtree(ti, ett_raknet_system_address);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_ip_version, tvb, *offset, 1, ENC_NA);
|
||||
addr_str = tvb_ip6_to_str(tvb, *offset);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_ipv6_address, tvb, *offset + 1, 16, ENC_NA);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_port, tvb, *offset + 1 + 16, 2, ENC_BIG_ENDIAN);
|
||||
*offset += 1 + 16 + 2;
|
||||
*offset += 16;
|
||||
port = tvb_get_ntohs(tvb, *offset);
|
||||
proto_tree_add_item(sub_tree, hf_raknet_port, tvb, *offset, 2, ENC_BIG_ENDIAN);
|
||||
*offset += 2;
|
||||
proto_item_set_len(ti, 1 + 16 + 2);
|
||||
proto_item_append_text(ti, "[%s]:%" G_GUINT16_FORMAT, addr_str, port);
|
||||
break;
|
||||
default:
|
||||
THROW(ReportedBoundsError);
|
||||
|
|
Loading…
Reference in New Issue