diff options
author | João Valverde <joao.valverde@tecnico.ulisboa.pt> | 2015-10-05 11:53:07 +0100 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2015-10-05 18:10:48 +0000 |
commit | a459ac72a2c01ec12d186907837aff891e3e223b (patch) | |
tree | 01328590650245061ae8d78c02f14c8fbdde0381 /epan/dissectors/packet-udp.c | |
parent | d52322efb3ab782871312950876803334ec018b9 (diff) |
Add BASE_PT_ field display types
Avoid displaying duplicate port numbers with transport name resolution disabled and
make some dissector code simpler.
Introduces port_with_resolution_to_str_buf() function and amends UDP/TCP/DCCP/SCTP to
use the new field display type.
Change-Id: Ifb97810b9c669ccbb1a310a2c0ffd6e2b63af210
Reviewed-on: https://code.wireshark.org/review/10625
Petri-Dish: Michael Mann <mmann78@netscape.net>
Reviewed-by: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-udp.c')
-rw-r--r-- | epan/dissectors/packet-udp.c | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/epan/dissectors/packet-udp.c b/epan/dissectors/packet-udp.c index d0acf286ad..800f1e8f4b 100644 --- a/epan/dissectors/packet-udp.c +++ b/epan/dissectors/packet-udp.c @@ -54,8 +54,6 @@ static dissector_handle_t udplite_handle; static int udp_tap = -1; static int udp_follow_tap = -1; -static value_string udp_ports[65536+1]; - static header_field_info *hfi_udp = NULL; static header_field_info *hfi_udplite = NULL; @@ -63,15 +61,15 @@ static header_field_info *hfi_udplite = NULL; #define UDPLITE_HFI_INIT HFI_INIT(proto_udplite) static header_field_info hfi_udp_srcport UDP_HFI_INIT = -{ "Source Port", "udp.srcport", FT_UINT16, BASE_DEC, VALS(udp_ports), 0x0, +{ "Source Port", "udp.srcport", FT_UINT16, BASE_PT_UDP, NULL, 0x0, NULL, HFILL }; static header_field_info hfi_udp_dstport UDP_HFI_INIT = -{ "Destination Port", "udp.dstport", FT_UINT16, BASE_DEC, VALS(udp_ports), 0x0, +{ "Destination Port", "udp.dstport", FT_UINT16, BASE_PT_UDP, NULL, 0x0, NULL, HFILL }; static header_field_info hfi_udp_port UDP_HFI_INIT = -{ "Source or Destination Port", "udp.port", FT_UINT16, BASE_DEC, VALS(udp_ports), 0x0, +{ "Source or Destination Port", "udp.port", FT_UINT16, BASE_PT_UDP, NULL, 0x0, NULL, HFILL }; static header_field_info hfi_udp_stream UDP_HFI_INIT = @@ -733,8 +731,7 @@ dissect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 ip_proto) udp_tree = proto_item_add_subtree(ti, ett_udp); p_add_proto_data(pinfo->pool, pinfo, hfi_udp->id, pinfo->curr_layer_num, udp_tree); - port_item = proto_tree_add_uint_format_value(udp_tree, hfi_udp_srcport.id, tvb, offset, 2, udph->uh_sport, - "%s (%u)", src_port_str, udph->uh_sport); + port_item = proto_tree_add_item(udp_tree, &hfi_udp_srcport, tvb, offset, 2, ENC_BIG_ENDIAN); /* The beginning port number, 32768 + 666 (33434), is from LBL's traceroute.c source code and this code * further assumes that 3 attempts are made per hop */ if ((udph->uh_sport > (32768 + 666)) && (udph->uh_sport <= (32768 + 666 + 30))) @@ -743,17 +740,16 @@ dissect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 ip_proto) ((udph->uh_sport - 32768 - 666 - 1) % 3) + 1 ); - port_item = proto_tree_add_uint_format_value(udp_tree, hfi_udp_dstport.id, tvb, offset + 2, 2, udph->uh_dport, - "%s (%u)", dst_port_str, udph->uh_dport); + port_item = proto_tree_add_item(udp_tree, &hfi_udp_dstport, tvb, offset + 2, 2, ENC_BIG_ENDIAN); if ((udph->uh_dport > (32768 + 666)) && (udph->uh_dport <= (32768 + 666 + 30))) expert_add_info_format(pinfo, port_item, &ei_udp_possible_traceroute, "Possible traceroute: hop #%u, attempt #%u", ((udph->uh_dport - 32768 - 666 - 1) / 3) + 1, ((udph->uh_dport - 32768 - 666 - 1) % 3) + 1 ); - hidden_item = proto_tree_add_uint(udp_tree, &hfi_udp_port, tvb, offset, 2, udph->uh_sport); + hidden_item = proto_tree_add_item(udp_tree, &hfi_udp_port, tvb, offset, 2, ENC_BIG_ENDIAN); PROTO_ITEM_SET_HIDDEN(hidden_item); - hidden_item = proto_tree_add_uint(udp_tree, &hfi_udp_port, tvb, offset+2, 2, udph->uh_dport); + hidden_item = proto_tree_add_item(udp_tree, &hfi_udp_port, tvb, offset+2, 2, ENC_BIG_ENDIAN); PROTO_ITEM_SET_HIDDEN(hidden_item); } @@ -1091,27 +1087,7 @@ proto_register_udp(void) static decode_as_t udp_da = {"udp", "Transport", "udp.port", 3, 2, udp_da_values, "UDP", "port(s) as", decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL}; - int proto_udp, proto_udplite, i, j; - gboolean transport_name_old = gbl_resolv_flags.transport_name; - - gbl_resolv_flags.transport_name = TRUE; - for (i = 0, j = 0; i <= 65535; i++) { - const char *serv = udp_port_to_display(wmem_epan_scope(), i); - - if (serv) { - value_string *p = &udp_ports[j++]; - - p->value = i; - p->strptr = serv; - } - } - - /* NULL terminate */ - udp_ports[j].value = 0; - udp_ports[j].strptr = NULL; - - gbl_resolv_flags.transport_name = transport_name_old; - + int proto_udp, proto_udplite; proto_udp = proto_register_protocol("User Datagram Protocol", "UDP", "udp"); |