aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ppi-antenna.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2014-09-05 08:48:37 -0400
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2014-09-06 07:44:46 +0000
commitceef7eba755cbecf670653360f72d864949dac49 (patch)
tree2cc48ebd17a4e7dc714f1b00af21f4f92546c948 /epan/dissectors/packet-ppi-antenna.c
parentf1ad9eb212a6f4c5e1b6b1963bccf5f3a4900293 (diff)
Eliminate proto_tree_add_text from some of the dissectors.
Other minor cleanups while in the area. Change-Id: I8ea59205cfe6fab643d8fe01b75ce91532004fd9 Reviewed-on: https://code.wireshark.org/review/4004 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-ppi-antenna.c')
-rw-r--r--epan/dissectors/packet-ppi-antenna.c84
1 files changed, 39 insertions, 45 deletions
diff --git a/epan/dissectors/packet-ppi-antenna.c b/epan/dissectors/packet-ppi-antenna.c
index 8df262c191..757142af13 100644
--- a/epan/dissectors/packet-ppi-antenna.c
+++ b/epan/dissectors/packet-ppi-antenna.c
@@ -28,6 +28,7 @@
#include <glib.h>
#include <epan/packet.h>
+#include <epan/expert.h>
#include "packet-ppi-geolocation-common.h"
enum ppi_antenna_type {
@@ -99,6 +100,7 @@ static gint ett_ppi_antenna = -1;
static gint ett_ppi_antenna_present = -1;
static gint ett_ppi_antennaflags= -1;
+static expert_field ei_ppi_antenna_present_bit = EI_INIT;
static void
dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
@@ -108,7 +110,6 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
gint length_remaining;
proto_tree *ppi_antenna_tree = NULL;
- proto_tree *present_tree = NULL;
proto_tree *antennaflags_tree = NULL;
proto_tree *pt, *my_pt;
proto_item *ti = NULL;
@@ -127,8 +128,24 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
gchar *curr_str;
int offset = 0;
+ static const int * ppi_antenna_present_flags[] = {
+ &hf_ppi_antenna_present_flags,
+ &hf_ppi_antenna_present_gaindb,
+ &hf_ppi_antenna_present_horizbw,
+ &hf_ppi_antenna_present_vertbw,
+ &hf_ppi_antenna_present_pgain,
+ &hf_ppi_antenna_present_beamid,
+ &hf_ppi_antenna_present_serialnum,
+ &hf_ppi_antenna_present_modelname,
+ &hf_ppi_antenna_present_descstr,
+ &hf_ppi_antenna_present_appspecific_num,
+ &hf_ppi_antenna_present_appspecific_data,
+ &hf_ppi_antenna_present_ext,
+ NULL
+ };
+
/* Clear out stuff in the info column */
- col_clear(pinfo->cinfo,COL_INFO);
+ col_clear(pinfo->cinfo,COL_INFO);
/* pull out the first three fields of the BASE-GEOTAG-HEADER */
version = tvb_get_guint8(tvb, offset);
@@ -168,39 +185,20 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
* Base-geotag-header (Radiotap lookalike) is shorter than the fixed-length portion
* plus one "present" bitset.
*/
- if (tree)
- proto_item_append_text(ti, " (invalid - minimum length is 8)");
+ proto_item_append_text(ti, " (invalid - minimum length is 8)");
return;
}
/* perform max length sanity checking */
if (length > PPI_ANTENNA_MAXTAGLEN ) {
- if (tree)
- proto_item_append_text(ti, "Invalid PPI-Antenna length (got %d, %d max\n)", length, PPI_ANTENNA_MAXTAGLEN);
+ proto_item_append_text(ti, "Invalid PPI-Antenna length (got %d, %d max\n)", length, PPI_ANTENNA_MAXTAGLEN);
return;
}
-
/* Subtree for the "present flags" bitfield. */
- if (tree) {
- pt = proto_tree_add_uint(ppi_antenna_tree, hf_ppi_antenna_present, tvb, offset + 4, 4, present);
- present_tree = proto_item_add_subtree(pt, ett_ppi_antenna_present);
-
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_flags, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_gaindb, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_horizbw, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_vertbw, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_pgain, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_beamid, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_serialnum, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_modelname, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_descstr, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_appspecific_num, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_appspecific_data, tvb, 4, 4, ENC_LITTLE_ENDIAN);
-
- proto_tree_add_item(present_tree, hf_ppi_antenna_present_ext, tvb, 4, 4, ENC_LITTLE_ENDIAN);
- }
+ pt = proto_tree_add_bitmask(ppi_antenna_tree, tvb, offset + 4, hf_ppi_antenna_present, ett_ppi_antenna_present, ppi_antenna_present_flags, ENC_LITTLE_ENDIAN);
+
offset += PPI_GEOBASE_MIN_HEADER_LEN;
length_remaining -= PPI_GEOBASE_MIN_HEADER_LEN;
@@ -260,9 +258,7 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
break;
t_vbw = tvb_get_letohl(tvb, offset);
vertbw = ppi_fixed3_6_to_gdouble(t_vbw);
- if (tree) {
- proto_tree_add_double(ppi_antenna_tree, hf_ppi_antenna_vertbw, tvb, offset, 4, vertbw);
- }
+ proto_tree_add_double(ppi_antenna_tree, hf_ppi_antenna_vertbw, tvb, offset, 4, vertbw);
offset+=4;
length_remaining-=4;
break;
@@ -271,9 +267,7 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
break;
t_pgain = tvb_get_letohl(tvb, offset);
pgain = ppi_fixed3_6_to_gdouble(t_pgain);
- if (tree) {
- proto_tree_add_double(ppi_antenna_tree, hf_ppi_antenna_pgain, tvb, offset, 4, pgain);
- }
+ proto_tree_add_double(ppi_antenna_tree, hf_ppi_antenna_pgain, tvb, offset, 4, pgain);
offset+=4;
length_remaining-=4;
break;
@@ -281,18 +275,14 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
if (length_remaining < 2)
break;
beamid= tvb_get_letohs(tvb, offset); /* convert endianess */
- if (tree) {
- proto_tree_add_uint(ppi_antenna_tree, hf_ppi_antenna_beamid, tvb, offset, 2, beamid);
- }
+ proto_tree_add_uint(ppi_antenna_tree, hf_ppi_antenna_beamid, tvb, offset, 2, beamid);
offset+=2;
length_remaining-=2;
break;
case PPI_ANTENNA_SERIALNUM:
if (length_remaining < 32)
break;
- if (tree) {
- proto_tree_add_item(ppi_antenna_tree, hf_ppi_antenna_serialnum, tvb, offset, 32, ENC_ASCII|ENC_NA);
- }
+ proto_tree_add_item(ppi_antenna_tree, hf_ppi_antenna_serialnum, tvb, offset, 32, ENC_ASCII|ENC_NA);
offset+=32;
length_remaining-=32;
break;
@@ -325,18 +315,14 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
if (length_remaining < 4)
break;
t_appspecific_num = tvb_get_letohl(tvb, offset); /* application specific parsers may switch on this later */
- if (tree) {
- proto_tree_add_uint(ppi_antenna_tree, hf_ppi_antenna_appspecific_num, tvb, offset, 4, t_appspecific_num);
- }
+ proto_tree_add_uint(ppi_antenna_tree, hf_ppi_antenna_appspecific_num, tvb, offset, 4, t_appspecific_num);
offset+=4;
length_remaining-=4;
break;
case PPI_ANTENNA_APPDATA:
if (length_remaining < 60)
break;
- if (tree) {
- proto_tree_add_item(ppi_antenna_tree, hf_ppi_antenna_appspecific_data, tvb, offset, 60, ENC_NA);
- }
+ proto_tree_add_item(ppi_antenna_tree, hf_ppi_antenna_appspecific_data, tvb, offset, 60, ENC_NA);
offset+=60;
length_remaining-=60;
break;
@@ -345,8 +331,8 @@ dissect_ppi_antenna(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
* This indicates a field whose size we do not
* know, so we cannot proceed.
*/
- proto_tree_add_text(ppi_antenna_tree, tvb, offset, 0,
- "Error: PPI-ANTENNA: unknown bit (%d) set in present field.\n", bit);
+ expert_add_info_format(pinfo, pt, &ei_ppi_antenna_present_bit,
+ "Error: PPI-ANTENNA: unknown bit (%d) set in present field.", bit);
next_present = 0;
continue;
}
@@ -541,9 +527,17 @@ proto_register_ppi_antenna(void) {
&ett_ppi_antennaflags
};
+ static ei_register_info ei[] = {
+ { &ei_ppi_antenna_present_bit, { "ppi_antenna.present.unknown_bit", PI_PROTOCOL, PI_WARN, "Error: PPI-ANTENNA: unknown bit set in present field.", EXPFILL }},
+ };
+
+ expert_module_t* expert_ppi_antenna;
+
proto_ppi_antenna = proto_register_protocol("PPI antenna decoder", "PPI antenna Decoder", "ppi_antenna");
proto_register_field_array(proto_ppi_antenna, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ expert_ppi_antenna = expert_register_protocol(proto_ppi_antenna);
+ expert_register_field_array(expert_ppi_antenna, ei, array_length(ei));
register_dissector("ppi_antenna", dissect_ppi_antenna, proto_ppi_antenna);
}