aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-nbns.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2014-09-11 16:43:00 -0400
committerAnders Broman <a.broman58@gmail.com>2014-09-12 05:51:11 +0000
commit3df42e79a54af411d3b197f461e8f98913cce59e (patch)
tree3313b9bf2326667ac80f1c3302c4ed90c25293e7 /epan/dissectors/packet-nbns.c
parent47c592938ba9f0caeacc4c2ccadb370e72f293a2 (diff)
proto_tree_add_text cleanup
Create filters (expert and hf_) that have the "most bang for the buck" (ie have many instances for a single filter) Change-Id: I61995e41c5b298df77e084e65cdf30ebe95da1e6 Reviewed-on: https://code.wireshark.org/review/4086 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: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-nbns.c')
-rw-r--r--epan/dissectors/packet-nbns.c95
1 files changed, 41 insertions, 54 deletions
diff --git a/epan/dissectors/packet-nbns.c b/epan/dissectors/packet-nbns.c
index 45db5bbff5..1ddb4b2599 100644
--- a/epan/dissectors/packet-nbns.c
+++ b/epan/dissectors/packet-nbns.c
@@ -28,6 +28,7 @@
#include <glib.h>
#include <epan/packet.h>
+#include <epan/expert.h>
#include <epan/exceptions.h>
#include <epan/wmem/wmem.h>
#include <epan/prefs.h>
@@ -77,6 +78,8 @@ static gint ett_nbns_rr = -1;
static gint ett_nbns_qry = -1;
static gint ett_nbns_ans = -1;
+static expert_field ei_nbns_incomplete_entry = EI_INIT;
+
static int proto_nbdgm = -1;
static int hf_nbdgm_type = -1;
static int hf_nbdgm_fragment = -1;
@@ -609,7 +612,7 @@ nbns_add_name_flags(proto_tree *rr_tree, tvbuff_t *tvb, int offset)
}
static int
-dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
+dissect_nbns_answer(tvbuff_t *tvb, packet_info *pinfo, int offset, int nbns_data_offset,
column_info *cinfo, proto_tree *nbns_tree, int opcode)
{
int len;
@@ -678,8 +681,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
* same type of RR data as other T_NB
* responses. */
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
flags = tvb_get_ntohs(tvb, cur_offset);
@@ -689,8 +691,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
} else {
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
nbns_add_nb_flags(rr_tree, tvb, cur_offset);
@@ -698,8 +699,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 4) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
proto_tree_add_text(rr_tree, tvb, cur_offset, 4,
@@ -725,8 +725,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
}
if (data_len < 1) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
@@ -737,8 +736,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
while (num_names != 0) {
if (data_len < NETBIOS_NAME_LEN) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
goto out;
}
if (rr_tree) {
@@ -755,8 +753,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= NETBIOS_NAME_LEN;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
goto out;
}
if (rr_tree) {
@@ -769,8 +766,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
}
if (data_len < 6) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
@@ -783,8 +779,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 6;
if (data_len < 1) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
@@ -796,8 +791,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 1;
if (data_len < 1) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -808,8 +802,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 1;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -820,8 +813,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -833,8 +825,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -845,8 +836,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -858,8 +848,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -870,8 +859,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -882,8 +870,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 4) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -894,8 +881,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 4;
if (data_len < 4) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -907,8 +893,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 4;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -919,8 +904,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -932,8 +916,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -945,8 +928,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -958,8 +940,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -971,8 +952,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -984,8 +964,7 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_text(rr_tree, tvb, cur_offset,
- data_len, "(incomplete entry)");
+ proto_tree_add_expert(rr_tree, pinfo, &ei_nbns_incomplete_entry, tvb, cur_offset, data_len);
break;
}
if (rr_tree) {
@@ -1041,7 +1020,7 @@ dissect_query_records(tvbuff_t *tvb, int cur_off, int nbns_data_offset,
}
static int
-dissect_answer_records(tvbuff_t *tvb, int cur_off, int nbns_data_offset,
+dissect_answer_records(tvbuff_t *tvb, packet_info *pinfo, int cur_off, int nbns_data_offset,
int count, column_info *cinfo, proto_tree *nbns_tree,
int opcode, const char *name)
{
@@ -1053,7 +1032,7 @@ dissect_answer_records(tvbuff_t *tvb, int cur_off, int nbns_data_offset,
qatree = proto_tree_add_subtree(nbns_tree, tvb, start_off, -1, ett_nbns_ans, &ti, name);
while (count-- > 0) {
- add_off = dissect_nbns_answer(tvb, cur_off, nbns_data_offset,
+ add_off = dissect_nbns_answer(tvb, pinfo, cur_off, nbns_data_offset,
cinfo, qatree, opcode);
cur_off += add_off;
}
@@ -1134,7 +1113,7 @@ dissect_nbns(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* If this is a request, don't add information about the
answers to the summary, just add information about the
queries. */
- cur_off += dissect_answer_records(tvb, cur_off,
+ cur_off += dissect_answer_records(tvb, pinfo, cur_off,
nbns_data_offset, ans,
((flags & F_RESPONSE) ? pinfo->cinfo : NULL), nbns_tree,
opcode, "Answers");
@@ -1143,13 +1122,13 @@ dissect_nbns(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* Don't add information about the authoritative name
servers, or the additional records, to the summary. */
if (auth > 0)
- cur_off += dissect_answer_records(tvb, cur_off,
+ cur_off += dissect_answer_records(tvb, pinfo, cur_off,
nbns_data_offset,
auth, NULL, nbns_tree, opcode,
"Authoritative nameservers");
if (add > 0)
- /*cur_off += */dissect_answer_records(tvb, cur_off,
+ /*cur_off += */dissect_answer_records(tvb, pinfo, cur_off,
nbns_data_offset,
add, NULL, nbns_tree, opcode,
"Additional records");
@@ -2053,10 +2032,18 @@ proto_register_nbt(void)
&ett_nbss,
&ett_nbss_flags,
};
+
+ static ei_register_info ei[] = {
+ { &ei_nbns_incomplete_entry, { "nbns.incomplete_entry", PI_MALFORMED, PI_ERROR, "incomplete entry", EXPFILL }},
+ };
+
module_t *nbss_module;
+ expert_module_t* expert_nbns;
proto_nbns = proto_register_protocol("NetBIOS Name Service", "NBNS", "nbns");
proto_register_field_array(proto_nbns, hf_nbns, array_length(hf_nbns));
+ expert_nbns = expert_register_protocol(proto_nbns);
+ expert_register_field_array(expert_nbns, ei, array_length(ei));
proto_nbdgm = proto_register_protocol("NetBIOS Datagram Service",
"NBDS", "nbdgm");