aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/expert.c46
-rw-r--r--epan/expert.h40
2 files changed, 84 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);
}
diff --git a/epan/expert.h b/epan/expert.h
index c286db183c..fe218195d1 100644
--- a/epan/expert.h
+++ b/epan/expert.h
@@ -166,6 +166,43 @@ WS_DLL_PUBLIC void
expert_add_info_format_text(packet_info *pinfo, proto_item *pi, expert_field *eiindex,
const char *format, ...) G_GNUC_PRINTF(4, 5);
+/** Add an expert info associated with some byte data
+ Add an expert info tree to a protocol item using registered expert info item.
+ This function is intended to replace places where
+ proto_tree_add_text or proto_tree_add_none_format + expert_add_info
+ would be used.
+ @param pinfo Packet info of the currently processed packet. May be NULL if
+ pi is supplied
+ @param pi Current protocol item (or NULL)
+ @param eiindex The registered expert info item
+ @param tvb the tv buffer of the current data
+ @param start start of data in tvb
+ @param length length of data in tvb
+ @return the newly created item above expert info tree
+ */
+WS_DLL_PUBLIC proto_item *
+proto_tree_add_expert(proto_tree *tree, packet_info *pinfo, expert_field* eiindex,
+ tvbuff_t *tvb, gint start, gint length);
+
+/** Add an expert info associated with some byte data
+ Add an expert info tree to a protocol item, using registered expert info item,
+ but with a formatted message.
+ This function is intended to replace places where
+ proto_tree_add_text or proto_tree_add_none_format + expert_add_info_format_text
+ would be used.
+ @param pinfo Packet info of the currently processed packet. May be NULL if
+ pi is supplied
+ @param pi Current protocol item (or NULL)
+ @param eiindex The registered expert info item
+ @param tvb the tv buffer of the current data
+ @param start start of data in tvb
+ @param length length of data in tvb
+ @return the newly created item above expert info tree
+ */
+WS_DLL_PUBLIC proto_item *
+proto_tree_add_expert_format(proto_tree *tree, packet_info *pinfo, expert_field* eiindex,
+ tvbuff_t *tvb, gint start, gint length, const char *format, ...) G_GNUC_PRINTF(7, 8);
+
/*
* Register that a protocol has expert info.
*/
@@ -191,6 +228,9 @@ expert_register_field_array(expert_module_t* module, ei_register_info *ei, const
WS_DLL_PUBLIC void
expert_add_undecoded_item(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int length, const int severity);
+
+WS_DLL_PUBLIC const value_string expert_checksum_vals[];
+
#ifdef __cplusplus
}
#endif /* __cplusplus */