diff options
author | Michael Mann <mmann78@netscape.net> | 2013-07-02 19:53:28 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-07-02 19:53:28 +0000 |
commit | e16933f4961aa8905444f80876355f6b3a2cf46f (patch) | |
tree | 28b72cf9e0e3228b1f4c03e81661da0ea98a3314 /epan/expert.c | |
parent | b0e04aca735b8dce0631107a480452deab00e048 (diff) |
Add proto_tree_add_expert and proto_tree_add_expert_format. This was added to expert.h instead of proto.h because the underlying code to process expert info is static (and should probably remain so). Also, proto_tree_add_expert and proto_tree_add_expert_format follow "expert info" rules in that they should be called regardless of tree status (even though they take a tree as an argument), unlike the functions in proto.h
Also added an enumeration for checksum validation status, as verifying checksums is considered "expert" functionality.
svn path=/trunk/; revision=50322
Diffstat (limited to 'epan/expert.c')
-rw-r--r-- | epan/expert.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/epan/expert.c b/epan/expert.c index ee38964d39..d540d2ea0b 100644 --- a/epan/expert.c +++ b/epan/expert.c @@ -72,6 +72,15 @@ static gpa_expertinfo_t gpa_expertinfo; */ static emem_tree_t *expert_modules = NULL; +/* Possible values for a checksum evaluation */ +const value_string expert_checksum_vals[] = { + { -1, "Unknown/Disabled" }, + { 0, "Good" }, + { 1, "Bad" }, + + { 0, NULL } +}; + #define EXPERT_REGISTRAR_GET_NTH(eiindex, expinfo) \ if((guint)eiindex >= gpa_expertinfo.len && getenv("WIRESHARK_ABORT_ON_DISSECTOR_BUG")) \ @@ -401,6 +410,39 @@ expert_add_info_format_text(packet_info *pinfo, proto_item *pi, expert_field *ex va_end(ap); } +proto_item * +proto_tree_add_expert(proto_tree *tree, packet_info *pinfo, expert_field* expindex, + tvbuff_t *tvb, gint start, gint length) +{ + expert_field_info* eiinfo; + proto_item *ti; + + /* Look up the item */ + EXPERT_REGISTRAR_GET_NTH(expindex->ei, eiinfo); + + ti = proto_tree_add_text(tree, tvb, start, length, "%s", eiinfo->summary); + expert_set_info_vformat(pinfo, ti, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, FALSE, eiinfo->summary, NULL); + return ti; +} + +proto_item * +proto_tree_add_expert_format(proto_tree *tree, packet_info *pinfo, expert_field* expindex, + tvbuff_t *tvb, gint start, gint length, const char *format, ...) +{ + va_list ap; + expert_field_info* eiinfo; + proto_item *ti; + + /* Look up the item */ + EXPERT_REGISTRAR_GET_NTH(expindex->ei, eiinfo); + + va_start(ap, format); + ti = proto_tree_add_text(tree, tvb, start, length, format, ap); + expert_set_info_vformat(pinfo, ti, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, TRUE, format, ap); + va_end(ap); + return ti; +} + void expert_add_undecoded_item(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int length, const int severity) { @@ -409,7 +451,7 @@ expert_add_undecoded_item(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, i expert_item = proto_tree_add_text(tree, tvb, offset, length, "Not dissected yet"); - expert_add_info_format(pinfo, expert_item, PI_UNDECODED, severity, "Not dissected yet(report to wireshark.org)"); \ - PROTO_ITEM_SET_GENERATED(expert_item); \ + expert_add_info_format(pinfo, expert_item, PI_UNDECODED, severity, "Not dissected yet(report to wireshark.org)"); + PROTO_ITEM_SET_GENERATED(expert_item); } |