diff options
author | Martin Kaiser <wireshark@kaiser.cx> | 2017-04-06 21:50:53 +0200 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2017-04-17 23:36:34 +0000 |
commit | 3fac48da689998ca0942ec2bdcb0dabd77e04a36 (patch) | |
tree | 1a5dc09a0e5664adc989576d007d83b005de984f /epan/dissectors/packet-raknet.c | |
parent | e1e31ed1c9e2ecf379a988020c25c3059232a1d5 (diff) |
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>
Diffstat (limited to 'epan/dissectors/packet-raknet.c')
-rw-r--r-- | epan/dissectors/packet-raknet.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/epan/dissectors/packet-raknet.c b/epan/dissectors/packet-raknet.c index 520a7b95d9..5435cab421 100644 --- a/epan/dissectors/packet-raknet.c +++ b/epan/dissectors/packet-raknet.c @@ -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); |