diff --git a/epan/expert.c b/epan/expert.c index cc737ec897..c549e86f39 100644 --- a/epan/expert.c +++ b/epan/expert.c @@ -34,9 +34,12 @@ #include "tap.h" +/* proto_expert cannot be static because it's referenced in the + * print routines + */ +int proto_expert = -1; static int expert_tap = -1; -static int proto_expert = -1; static int highest_severity = 0; static int ett_expert = -1; diff --git a/epan/expert.h b/epan/expert.h index 58bd9e44fa..87cd65f2e3 100644 --- a/epan/expert.h +++ b/epan/expert.h @@ -47,6 +47,11 @@ typedef struct expert_info_s { WS_VAR_IMPORT const value_string expert_severity_vals[]; WS_VAR_IMPORT const value_string expert_group_vals[]; +/* "proto_expert" is exported from libwireshark.dll. + * Thus we need a special declaration. + */ +WS_VAR_IMPORT int proto_expert; + extern void expert_init(void); diff --git a/epan/libwireshark.def b/epan/libwireshark.def index 1e568f07b4..3ccddb8ca0 100644 --- a/epan/libwireshark.def +++ b/epan/libwireshark.def @@ -744,6 +744,7 @@ proto_check_field_name proto_construct_match_selected_string proto_data DATA proto_enable_all +proto_expert DATA proto_field_is_referenced proto_find_field_from_offset proto_find_finfo diff --git a/print.c b/print.c index 647a8d4e0b..0f0014cbb0 100644 --- a/print.c +++ b/print.c @@ -38,6 +38,7 @@ #include #include #include +#include #include "packet-range.h" #include "print.h" @@ -364,7 +365,7 @@ proto_tree_write_node_pdml(proto_node *node, gpointer data) } /* Normal protocols and fields */ else { - if (fi->hfinfo->type == FT_PROTOCOL) { + if (fi->hfinfo->type == FT_PROTOCOL && fi->hfinfo->id != proto_expert) { fputs("fh); } else { @@ -493,7 +494,8 @@ proto_tree_write_node_pdml(proto_node *node, gpointer data) fputs(" ", pdata->fh); } /* Close off current element */ - if (fi->hfinfo->id != proto_data) { /* Data protocol uses simple tags */ + /* Data and expert "protocols" use simple tags */ + if (fi->hfinfo->id != proto_data && fi->hfinfo->id != proto_expert) { if (fi->hfinfo->type == FT_PROTOCOL) { fputs("\n", pdata->fh); }