aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2017-04-06 21:50:53 +0200
committerMichael Mann <mmann78@netscape.net>2017-04-17 23:36:34 +0000
commit3fac48da689998ca0942ec2bdcb0dabd77e04a36 (patch)
tree1a5dc09a0e5664adc989576d007d83b005de984f /epan
parente1e31ed1c9e2ecf379a988020c25c3059232a1d5 (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')
-rw-r--r--epan/dissectors/packet-raknet.c39
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);