diff options
author | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2009-06-05 22:42:47 +0000 |
---|---|---|
committer | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2009-06-05 22:42:47 +0000 |
commit | fdaebbf4975f970f7dce82341920c20ad6098e0f (patch) | |
tree | 2654abe47f378933a5d325856a7b3f877338dd19 | |
parent | 0242e35e0c6a335b92d6ca5e29714efb96a580df (diff) |
Have tap listeners specify whether the "packet" routine requires
a protocol tree;
the column values.
This includes stats-tree listeners.
Have the routines to build the packet list, and to retap packets, honor
those requirements. This means that cf_retap_packets() no longer needs
an argument to specify whether to construct the column values or not, so
get rid of that argument.
This also means that there's no need for a tap to have a fake filter
to ensure that the protocol tree will be built, so don't set up a fake
"frame" filter.
While we're at it, clean up some cases where "no filter" was represented
as a null string rather than a null pointer.
Have a routine to return an indication of the number of tap listeners
with filters; use that rather than the global num_tap_filters.
Clean up some indentation and some gboolean vs. gint items.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@28645 f5534014-38df-0310-8fa8-9805f1628bb7
103 files changed, 559 insertions, 445 deletions
diff --git a/doc/README.tapping b/doc/README.tapping index f437ed71e7..1dc4da0785 100644 --- a/doc/README.tapping +++ b/doc/README.tapping @@ -63,9 +63,10 @@ Only 3 callbacks and two functions. The two functions to start or stop tapping are -register_tap_listener(char *tapname, void *tapdata, char *fstring, - void (*reset)(void *tapdata), int (*packet)(void *tapdata, - packet_info *pinfo, epan_dissect_t *edt, const void *<pointer>), +register_tap_listener(const char *tapname, void *tapdata, const char *fstring, + guint flags, + void (*reset)(void *tapdata), + gboolean (*packet)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *<pointer>), void (*draw)(void *tapdata)); remove_tap_listener(void *tapdata); @@ -105,20 +106,41 @@ unfiltered data and just filter it yourself in the packet-callback than to specify a filter string. ONLY use a filter string if no other option exist. +flags +is a set of flags for the tap listener. The flags that can be set are: + + TL_REQUIRES_PROTO_TREE + + set if your tap listener "packet" routine requires a protocol + tree to be built. It will require a protocol tree to be + built if either + + 1) it looks at the protocol tree in edt->tree + + or + + 2) the tap-specific data passed to it is constructed only if + the protocol tree is being built. + + TL_REQUIRES_COLUMNS + + set if your tap listener "packet" routine requires the column + strings to be constructed. + void (*reset)(void *tapdata) This callback is called whenever Wireshark wants to inform your listener that it is about to start [re]reading a capture file or a new capture from an interface and that your application should reset any state it has in the *tapdata instance. -int (*packet)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, void *data) +gboolean (*packet)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, void *data) This callback is used whenever a new packet has arrived at the tap and that it has passed the filter (if there were a filter). The *data structure type is specific to each tap. -This function returns an int and it should return - 1, if the data in the packet caused state to be updated - (and thus a redraw of the window would later be required) - 0, if we don't need to redraw the window. +This function returns an gboolean and it should return + TRUE, if the data in the packet caused state to be updated + (and thus a redraw of the window would later be required) + FALSE, if we don't need to redraw the window. NOTE: that (*packet) should be as fast and efficient as possible. Use this function ONLY to store data for later and do the CPU-intensive processing or GUI updates down in (*draw) instead. diff --git a/epan/dissectors/packet-http.c b/epan/dissectors/packet-http.c index c05230584c..f62b69b3b0 100644 --- a/epan/dissectors/packet-http.c +++ b/epan/dissectors/packet-http.c @@ -2569,9 +2569,9 @@ proto_reg_handoff_http(void) ntlmssp_handle = find_dissector("ntlmssp"); gssapi_handle = find_dissector("gssapi"); - stats_tree_register("http","http","HTTP/Packet Counter", http_stats_tree_packet, http_stats_tree_init, NULL ); - stats_tree_register("http","http_req","HTTP/Requests", http_req_stats_tree_packet, http_req_stats_tree_init, NULL ); - stats_tree_register("http","http_srv","HTTP/Load Distribution",http_reqs_stats_tree_packet,http_reqs_stats_tree_init, NULL ); + stats_tree_register("http","http","HTTP/Packet Counter", 0, http_stats_tree_packet, http_stats_tree_init, NULL ); + stats_tree_register("http","http_req","HTTP/Requests", 0, http_req_stats_tree_packet, http_req_stats_tree_init, NULL ); + stats_tree_register("http","http_srv","HTTP/Load Distribution",0,http_reqs_stats_tree_packet,http_reqs_stats_tree_init, NULL ); } diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index 83ca4496ec..1ad7904312 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -8258,7 +8258,7 @@ proto_register_isup(void) /* Register the stats_tree */ stats_tree_register_with_group("isup", "isup_msg", "ISUP Messages", - msg_stats_tree_packet, msg_stats_tree_init, + 0, msg_stats_tree_packet, msg_stats_tree_init, NULL, REGISTER_STAT_GROUP_TELEPHONY); } diff --git a/epan/dissectors/packet-smb-sidsnooping.c b/epan/dissectors/packet-smb-sidsnooping.c index 59e7854c72..80cb7f5670 100644 --- a/epan/dissectors/packet-smb-sidsnooping.c +++ b/epan/dissectors/packet-smb-sidsnooping.c @@ -404,7 +404,10 @@ sid_name_snooping=0; } - error_string=register_tap_listener("dcerpc", &lsa_policy_information_tap_installed, "lsa.policy_information and ( lsa.info.level or lsa.domain or nt.domain_sid )", NULL, lsa_policy_information, NULL); + error_string=register_tap_listener("dcerpc", + &lsa_policy_information_tap_installed, + "lsa.policy_information and ( lsa.info.level or lsa.domain or nt.domain_sid )", + TL_REQUIRES_PROTO_TREE, NULL, lsa_policy_information, NULL); if(error_string){ /* error, we failed to attach to the tap. clean up */ @@ -415,7 +418,10 @@ sid_name_snooping=0; } lsa_policy_information_tap_installed=TRUE; - error_string=register_tap_listener("dcerpc", &samr_query_dispinfo_tap_installed, "samr and samr.opnum==40 and ( samr.handle or samr.rid or samr.acct_name or samr.level )", NULL, samr_query_dispinfo, NULL); + error_string=register_tap_listener("dcerpc", + &samr_query_dispinfo_tap_installed, + "samr and samr.opnum==40 and ( samr.handle or samr.rid or samr.acct_name or samr.level )", + TL_REQUIRES_PROTO_TREE, NULL, samr_query_dispinfo, NULL); if(error_string){ /* error, we failed to attach to the tap. clean up */ diff --git a/epan/dissectors/packet-smb.c b/epan/dissectors/packet-smb.c index 46aa05a012..1c84372628 100644 --- a/epan/dissectors/packet-smb.c +++ b/epan/dissectors/packet-smb.c @@ -6712,7 +6712,8 @@ dissect_session_setup_andx_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree * security blob has been fully dissected and before * we exit from this dissector. */ - error_string=register_tap_listener("ntlmssp", NULL, NULL, NULL, NULL, NULL); + error_string=register_tap_listener("ntlmssp", NULL, NULL, + 0, NULL, NULL, NULL); if(!error_string){ ntlmssp_tap_id=find_tap_id("ntlmssp"); } diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c index 9f66c9c905..b07de7f35c 100644 --- a/epan/dissectors/packet-smb2.c +++ b/epan/dissectors/packet-smb2.c @@ -1988,7 +1988,8 @@ dissect_smb2_session_setup_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree * security blob has been fully dissected and before * we exit from this dissector. */ - error_string=register_tap_listener("ntlmssp", NULL, NULL, NULL, NULL, NULL); + error_string=register_tap_listener("ntlmssp", NULL, NULL, + 0, NULL, NULL, NULL); if(!error_string){ ntlmssp_tap_id=find_tap_id("ntlmssp"); } diff --git a/epan/dissectors/packet-smpp.c b/epan/dissectors/packet-smpp.c index a21608ac98..cdf5601bd5 100644 --- a/epan/dissectors/packet-smpp.c +++ b/epan/dissectors/packet-smpp.c @@ -3544,7 +3544,7 @@ proto_reg_handoff_smpp(void) DISSECTOR_ASSERT(gsm_sms_handle); /* Tapping setup */ - stats_tree_register_with_group("smpp","smpp_commands", st_str_smpp, + stats_tree_register_with_group("smpp","smpp_commands", st_str_smpp, 0, smpp_stats_tree_per_packet, smpp_stats_tree_init, NULL, REGISTER_STAT_GROUP_TELEPHONY); } diff --git a/epan/dissectors/packet-ucp.c b/epan/dissectors/packet-ucp.c index 0c1c966ad7..1e2aadaf19 100644 --- a/epan/dissectors/packet-ucp.c +++ b/epan/dissectors/packet-ucp.c @@ -2757,7 +2757,7 @@ proto_reg_handoff_ucp(void) dissector_add_handle("tcp.port", ucp_handle); /* Tapping setup */ - stats_tree_register_with_group("ucp", "ucp_messages", st_str_ucp, + stats_tree_register_with_group("ucp", "ucp_messages", st_str_ucp, 0, ucp_stats_tree_per_packet, ucp_stats_tree_init, NULL, REGISTER_STAT_GROUP_TELEPHONY); } diff --git a/epan/libwireshark.def b/epan/libwireshark.def index 239ca9fa28..c0c3de6ec4 100644 --- a/epan/libwireshark.def +++ b/epan/libwireshark.def @@ -539,6 +539,7 @@ h245_set_h223_set_mc_handle h248_param_ber_integer h248_register_package have_custom_cols +have_filtering_tap_listeners have_tap_listeners heur_dissector_add heur_dissector_delete @@ -596,7 +597,6 @@ nstime_sum nstime_to_msec nstime_to_sec nt_cmd_vals DATA -num_tap_filters DATA num_tree_types DATA offset_from_real_beginning oid_add @@ -1033,6 +1033,7 @@ uat_new uat_remove_record_idx uat_save uat_swap +union_of_tap_listener_flags UnregRejectReason_vals DATA UnregRequestReason_vals DATA uri_str_to_bytes diff --git a/epan/stats_tree.c b/epan/stats_tree.c index 7fbf32362b..554c50eb2a 100644 --- a/epan/stats_tree.c +++ b/epan/stats_tree.c @@ -260,6 +260,7 @@ stats_tree_reinit(void *p) /* register a new stats_tree */ extern void stats_tree_register_with_group(const char *tapname, const char *abbr, const char *name, + guint flags, stat_tree_packet_cb packet, stat_tree_init_cb init, stat_tree_cleanup_cb cleanup, register_stat_group_t stat_group) { @@ -272,11 +273,13 @@ stats_tree_register_with_group(const char *tapname, const char *abbr, const char cfg->tapname = g_strdup(tapname); cfg->abbr = g_strdup(abbr); cfg->name = name ? g_strdup(name) : g_strdup(abbr); - cfg->stat_group = stat_group; + cfg->stat_group = stat_group; cfg->packet = packet; cfg->init = init; cfg->cleanup = cleanup; + + cfg->flags = flags; /* these have to be filled in by implementations */ cfg->setup_node_pr = NULL; @@ -297,10 +300,12 @@ stats_tree_register_with_group(const char *tapname, const char *abbr, const char /* register a new stats_tree with default group REGISTER_STAT_GROUP_UNSORTED */ extern void stats_tree_register(const char *tapname, const char *abbr, const char *name, + guint flags, stat_tree_packet_cb packet, stat_tree_init_cb init, stat_tree_cleanup_cb cleanup) { - stats_tree_register_with_group(tapname, abbr, name, + stats_tree_register_with_group(tapname, abbr, name, + flags, packet, init, cleanup, REGISTER_STAT_GROUP_UNSORTED); } diff --git a/epan/stats_tree.h b/epan/stats_tree.h index 66a0c556cd..fcbc9025dd 100644 --- a/epan/stats_tree.h +++ b/epan/stats_tree.h @@ -53,6 +53,7 @@ typedef void (*stat_tree_cleanup_cb)(stats_tree*); /* registers a new stats tree with default group REGISTER_STAT_GROUP_UNSORTED * abbr: protocol abbr * name: protocol display name + * flags: tap listener flags for per-packet callback * packet: per packet callback * init: tree initialization callback * cleanup: cleanup callback @@ -60,6 +61,7 @@ typedef void (*stat_tree_cleanup_cb)(stats_tree*); extern void stats_tree_register(const gchar *tapname, const gchar *abbr, const gchar *name, + guint flags, stat_tree_packet_cb packet, stat_tree_init_cb init, stat_tree_cleanup_cb cleanup); @@ -67,6 +69,7 @@ extern void stats_tree_register(const gchar *tapname, /* registers a new stats tree * abbr: protocol abbr * name: protocol display name + * flags: tap listener flags for per-packet callback * packet: per packet callback * init: tree initialization callback * cleanup: cleanup callback @@ -75,10 +78,11 @@ extern void stats_tree_register(const gchar *tapname, extern void stats_tree_register_with_group(const gchar *tapname, const gchar *abbr, const gchar *name, + guint flags, stat_tree_packet_cb packet, stat_tree_init_cb init, stat_tree_cleanup_cb cleanup, - register_stat_group_t stat_group); + register_stat_group_t stat_group); extern int stats_tree_parent_id_by_name(stats_tree *st, const gchar *parent_name); diff --git a/epan/stats_tree_priv.h b/epan/stats_tree_priv.h index 7bfd9015bf..24e4f4df6f 100644 --- a/epan/stats_tree_priv.h +++ b/epan/stats_tree_priv.h @@ -110,7 +110,7 @@ struct _stats_tree_cfg { gchar* abbr; gchar* name; gchar* tapname; - register_stat_group_t stat_group; + register_stat_group_t stat_group; gboolean in_use; @@ -118,6 +118,9 @@ struct _stats_tree_cfg { stat_tree_packet_cb packet; stat_tree_init_cb init; stat_tree_cleanup_cb cleanup; + + /* tap listener flags for the per-packet callback */ + guint flags; /* * node presentation callbacks diff --git a/epan/tap.c b/epan/tap.c index d53bdd0432..acab1fd5d3 100644 --- a/epan/tap.c +++ b/epan/tap.c @@ -42,7 +42,6 @@ #include <epan/tap.h> static gboolean tapping_is_active=FALSE; -int num_tap_filters=0; typedef struct _tap_dissector_t { struct _tap_dissector_t *next; @@ -70,7 +69,8 @@ static guint tap_packet_index; typedef struct _tap_listener_t { struct _tap_listener_t *next; int tap_id; - int needs_redraw; + gboolean needs_redraw; + guint flags; dfilter_t *code; void *tapdata; tap_reset_cb reset; @@ -247,7 +247,7 @@ tap_push_tapped_queue(epan_dissect_t *edt) for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){ tp=&tap_packet_array[i]; if(tp->tap_id==tl->tap_id){ - int passed=TRUE; + gboolean passed=TRUE; if(tl->code){ passed=dfilter_apply_edt(tl->code, edt); } @@ -315,7 +315,7 @@ reset_tap_listeners(void) if(tl->reset){ tl->reset(tl->tapdata); } - tl->needs_redraw=1; + tl->needs_redraw=TRUE; } } @@ -339,7 +339,7 @@ draw_tap_listeners(gboolean draw_all) tl->draw(tl->tapdata); } } - tl->needs_redraw=0; + tl->needs_redraw=FALSE; } } @@ -376,7 +376,8 @@ find_tap_id(const char *name) * message. */ GString * -register_tap_listener(const char *tapname, void *tapdata, const char *fstring, tap_reset_cb reset, tap_packet_cb packet, tap_draw_cb draw) +register_tap_listener(const char *tapname, void *tapdata, const char *fstring, + guint flags, tap_reset_cb reset, tap_packet_cb packet, tap_draw_cb draw) { tap_listener_t *tl; int tap_id; @@ -391,7 +392,8 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, t tl=g_malloc(sizeof(tap_listener_t)); tl->code=NULL; - tl->needs_redraw=1; + tl->needs_redraw=TRUE; + tl->flags=flags; if(fstring){ if(!dfilter_compile(fstring, &tl->code)){ error_string = g_string_new(""); @@ -400,8 +402,6 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, t fstring, dfilter_error_msg); g_free(tl); return error_string; - } else { - num_tap_filters++; } } @@ -444,10 +444,9 @@ set_tap_dfilter(void *tapdata, const char *fstring) if(tl){ if(tl->code){ dfilter_free(tl->code); - num_tap_filters--; tl->code=NULL; } - tl->needs_redraw=1; + tl->needs_redraw=TRUE; if(fstring){ if(!dfilter_compile(fstring, &tl->code)){ error_string = g_string_new(""); @@ -455,8 +454,6 @@ set_tap_dfilter(void *tapdata, const char *fstring) "Filter \"%s\" is invalid - %s", fstring, dfilter_error_msg); return error_string; - } else { - num_tap_filters++; } } } @@ -492,7 +489,6 @@ remove_tap_listener(void *tapdata) if(tl){ if(tl->code){ dfilter_free(tl->code); - num_tap_filters--; } g_free(tl); } @@ -502,11 +498,6 @@ remove_tap_listener(void *tapdata) /* * Return TRUE if we have tap listeners, FALSE otherwise. - * Checking "num_tap_filters" isn't the right way to check whether we need - * to do any dissection in order to run taps, as not all taps necessarily - * have filters, and "num_tap_filters" is the number of tap filters, not - * the number of tap listeners; it's only the right way to check whether - * we need to build a protocol tree when doing dissection. */ gboolean have_tap_listeners(void) @@ -529,3 +520,35 @@ have_tap_listener(int tap_id) return FALSE; } + +/* + * Return TRUE if we have any tap listeners with filters, FALSE otherwise. + */ +gboolean +have_filtering_tap_listeners(void) +{ + tap_listener_t *tl; + + for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){ + if(tl->code) + return TRUE; + } + return FALSE; +} + +/* + * Get the union of all the flags for all the tap listeners; that gives + * an indication of whether the protocol tree, or the columns, are + * required by any taps. + */ +guint +union_of_tap_listener_flags(void) +{ + tap_listener_t *tl; + guint flags = 0; + + for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){ + flags|=tl->flags; + } + return flags; +} diff --git a/epan/tap.h b/epan/tap.h index 4f4855deff..9bc66949e4 100644 --- a/epan/tap.h +++ b/epan/tap.h @@ -27,15 +27,15 @@ #include "epan/epan.h" -/* With MSVC and a libwireshark.dll, we need a - * special declaration of num_tap_filters. - */ -WS_VAR_IMPORT int num_tap_filters; - typedef void (*tap_reset_cb)(void *tapdata); -typedef int (*tap_packet_cb)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *data); +typedef gboolean (*tap_packet_cb)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *data); typedef void (*tap_draw_cb)(void *tapdata); +/* + * Flags to indicate what a tap listener's packet routine requires. + */ +#define TL_REQUIRES_PROTO_TREE 0x00000001 /* full protocol tree */ +#define TL_REQUIRES_COLUMNS 0x00000002 /* columns */ extern void tap_init(void); extern int register_tap(const char *name); @@ -46,12 +46,14 @@ extern void tap_push_tapped_queue(epan_dissect_t *edt); extern void reset_tap_listeners(void); extern void draw_tap_listeners(gboolean draw_all); extern GString *register_tap_listener(const char *tapname, void *tapdata, - const char *fstring, tap_reset_cb tap_reset, tap_packet_cb tap_packet, - tap_draw_cb tap_draw); + const char *fstring, guint flags, tap_reset_cb tap_reset, + tap_packet_cb tap_packet, tap_draw_cb tap_draw); extern GString *set_tap_dfilter(void *tapdata, const char *fstring); extern void remove_tap_listener(void *tapdata); extern gboolean have_tap_listeners(void); extern gboolean have_tap_listener(int tap_id); +extern gboolean have_filtering_tap_listeners(void); +extern guint union_of_tap_listener_flags(void); extern const void *fetch_tapped_data(int tap_id, int idx); #endif diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c index c95a07b698..84ba0a01a1 100644 --- a/epan/wslua/wslua_field.c +++ b/epan/wslua/wslua_field.c @@ -369,9 +369,10 @@ void lua_prime_all_fields(proto_tree* tree _U_) { if (fake_tap) { /* a boring tap :-) */ GString* error = register_tap_listener("frame", - &fake_tap, - fake_tap_filter->str, - NULL, NULL, NULL); + &fake_tap, + fake_tap_filter->str, + 0, /* XXX - do we need the protocol tree or columns? */ + NULL, NULL, NULL); if (error) { report_failure("while registering lua_fake_tap:\n%s",error->str); diff --git a/epan/wslua/wslua_listener.c b/epan/wslua/wslua_listener.c index 22548849b4..f281f42204 100644 --- a/epan/wslua/wslua_listener.c +++ b/epan/wslua/wslua_listener.c @@ -44,10 +44,11 @@ int tap_packet_cb_error_handler(lua_State* L) { static gchar* last_error = NULL; static int repeated = 0; static int next = 2; - const gchar* where = (lua_pinfo) ? - ep_strdup_printf("Lua: on packet %i Error During execution of Listener Packet Callback",lua_pinfo->fd->num) : - ep_strdup_printf("Lua: Error During execution of Listener Packet Callback") ; - + const gchar* where = (lua_pinfo) ? + + ep_strdup_printf("Lua: on packet %i Error During execution of Listener Packet Callback",lua_pinfo->fd->num) : + ep_strdup_printf("Lua: Error During execution of Listener Packet Callback") ; + /* show the error the 1st, 3rd, 5th, 9th, 17th, 33th... time it appears to avoid window flooding */ /* XXX the last series of identical errors won't be shown (the user however gets at least one message) */ @@ -81,7 +82,7 @@ int tap_packet_cb_error_handler(lua_State* L) { int lua_tap_packet(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *data) { Listener tap = tapdata; int retval = 0; - + if (tap->packet_ref == LUA_NOREF) return 0; lua_settop(tap->L,0); @@ -92,22 +93,22 @@ int lua_tap_packet(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const push_Pinfo(tap->L, pinfo); push_Tvb(tap->L, edt->tvb); - if (tap->extractor) { - tap->extractor(tap->L,data); - } else { - lua_pushnil(tap->L); - } - + if (tap->extractor) { + tap->extractor(tap->L,data); + } else { + lua_pushnil(tap->L); + } + lua_pinfo = pinfo; lua_tvb = edt->tvb; lua_tree = g_malloc(sizeof(struct _wslua_treeitem)); - lua_tree->tree = edt->tree; - lua_tree->item = NULL; - lua_tree->expired = FALSE; + lua_tree->tree = edt->tree; + lua_tree->item = NULL; + lua_tree->expired = FALSE; switch ( lua_pcall(tap->L,3,1,1) ) { case 0: - retval = luaL_optint(tap->L,-1,1); + retval = luaL_optint(tap->L,-1,1); break; case LUA_ERRRUN: break; @@ -190,18 +191,18 @@ void lua_tap_draw(void *tapdata) { } WSLUA_CONSTRUCTOR Listener_new(lua_State* L) { - /* Creates a new Listener listener */ + /* Creates a new Listener listener */ #define WSLUA_OPTARG_Listener_new_TAP 1 /* The name of this tap */ #define WSLUA_OPTARG_Listener_new_FILTER 2 /* A filter that when matches the tap.packet function gets called (use nil to be called for every packet) */ const gchar* tap_type = luaL_optstring(L,WSLUA_OPTARG_Listener_new_TAP,"frame"); const gchar* filter = luaL_optstring(L,WSLUA_OPTARG_Listener_new_FILTER,NULL); - Listener tap; + Listener tap; GString* error; tap = g_malloc(sizeof(struct _wslua_tap)); - tap->name = g_strdup(tap_type); + tap->name = g_strdup(tap_type); tap->filter = filter ? g_strdup(filter) : NULL; tap->extractor = wslua_get_tap_extractor(tap_type); tap->L = L; @@ -209,13 +210,20 @@ WSLUA_CONSTRUCTOR Listener_new(lua_State* L) { tap->draw_ref = LUA_NOREF; tap->init_ref = LUA_NOREF; - error = register_tap_listener(tap_type, tap, tap->filter, lua_tap_reset, lua_tap_packet, lua_tap_draw); + /* + * XXX - do all Lua taps require the protocol tree? If not, it might + * be useful to have a way to indicate whether any do. + * + * XXX - do any Lua taps require the columns? If so, we either need + * to request them for this tap, or do so if any Lua taps require them. + */ + error = register_tap_listener(tap_type, tap, tap->filter, TL_REQUIRES_PROTO_TREE, lua_tap_reset, lua_tap_packet, lua_tap_draw); if (error) { g_free(tap->filter); g_free(tap->name); g_free(tap); - /* WSLUA_ERROR(new_tap,"tap registration error"); */ + /* WSLUA_ERROR(new_tap,"tap registration error"); */ luaL_error(L,"Error while registering tap:\n%s",error->str); g_string_free(error,TRUE); /* XXX LEAK? */ } @@ -225,7 +233,7 @@ WSLUA_CONSTRUCTOR Listener_new(lua_State* L) { } WSLUA_METHOD Listener_remove(lua_State* L) { - /* Removes a tap listener */ + /* Removes a tap listener */ Listener tap = checkListener(L,1); if (!tap) return 0; @@ -250,19 +258,19 @@ WSLUA_METAMETHOD Listener_tostring(lua_State* L) { static int Listener_newindex(lua_State* L) { - /* WSLUA_ATTRIBUTE Listener_packet WO A function that will be called once every packet matches the Listener listener filter. - - function tap.packet(pinfo,tvb,userdata) ... end - */ - /* WSLUA_ATTRIBUTE Listener_draw WO A function that will be called once every few seconds to redraw the gui objects - in tshark this funtion is called oly at the very end of the capture file. - - function tap.draw(userdata) ... end - */ - /* WSLUA_ATTRIBUTE Listener_reset WO A function that will be called at the end of the capture run. - - function tap.reset(userdata) ... end - */ + /* WSLUA_ATTRIBUTE Listener_packet WO A function that will be called once every packet matches the Listener listener filter. + + function tap.packet(pinfo,tvb,userdata) ... end + */ + /* WSLUA_ATTRIBUTE Listener_draw WO A function that will be called once every few seconds to redraw the gui objects + in tshark this funtion is called oly at the very end of the capture file. + + function tap.draw(userdata) ... end + */ + /* WSLUA_ATTRIBUTE Listener_reset WO A function that will be called at the end of the capture run. + + function tap.reset(userdata) ... end + */ Listener tap = shiftListener(L,1); const gchar* index = lua_shiftstring(L,1); int* refp = NULL; @@ -305,8 +313,8 @@ static const luaL_reg Listener_meta[] = { }; int Listener_register(lua_State* L) { - wslua_set_tap_enums(L); + wslua_set_tap_enums(L); WSLUA_REGISTER_CLASS(Listener); - return 1; + return 1; } @@ -83,7 +83,8 @@ static guint32 cum_bytes = 0; static void cf_reset_state(capture_file *cf); -static int read_packet(capture_file *cf, dfilter_t *dfcode, gint64 offset); +static int read_packet(capture_file *cf, dfilter_t *dfcode, + gboolean filtering_tap_listeners, guint tap_flags, gint64 offset); static void rescan_packets(capture_file *cf, const char *action, const char *action_item, gboolean refilter, gboolean redissect); @@ -415,6 +416,8 @@ cf_read(capture_file *cf) volatile gint64 progbar_nextstep; volatile gint64 progbar_quantum; dfilter_t *dfcode; + gboolean filtering_tap_listeners; + guint tap_flags; #ifdef HAVE_LIBPCAP volatile int displayed_once = 0; #endif @@ -428,6 +431,12 @@ cf_read(capture_file *cf) dfilter_compile(cf->dfilter, &dfcode); } + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + /* Get the union of the flags for all tap listeners. */ + tap_flags = union_of_tap_listener_flags(); + cum_bytes=0; reset_tap_listeners(); @@ -522,7 +531,7 @@ cf_read(capture_file *cf) break; } TRY { - read_packet(cf, dfcode, data_offset); + read_packet(cf, dfcode, filtering_tap_listeners, tap_flags, data_offset); } CATCH(OutOfMemoryError) { gpointer dialog; @@ -658,6 +667,8 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) gchar *err_info; volatile int newly_displayed_packets = 0; dfilter_t *dfcode; + gboolean filtering_tap_listeners; + guint tap_flags; /* Compile the current display filter. * We assume this will not fail since cf->dfilter is only set in @@ -668,6 +679,12 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) dfilter_compile(cf->dfilter, &dfcode); } + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + /* Get the union of the flags for all tap listeners. */ + tap_flags = union_of_tap_listener_flags(); + *err = 0; packet_list_check_end(); @@ -683,7 +700,8 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) break; } TRY{ - if (read_packet(cf, dfcode, data_offset) != -1) { + if (read_packet(cf, dfcode, filtering_tap_listeners, tap_flags, + data_offset) != -1) { newly_displayed_packets++; } } @@ -759,6 +777,8 @@ cf_finish_tail(capture_file *cf, int *err) gchar *err_info; gint64 data_offset; dfilter_t *dfcode; + gboolean filtering_tap_listeners; + guint tap_flags; /* Compile the current display filter. * We assume this will not fail since cf->dfilter is only set in @@ -769,6 +789,12 @@ cf_finish_tail(capture_file *cf, int *err) dfilter_compile(cf->dfilter, &dfcode); } + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + /* Get the union of the flags for all tap listeners. */ + tap_flags = union_of_tap_listener_flags(); + if(cf->wth == NULL) { cf_close(cf); return CF_READ_ERROR; @@ -784,7 +810,7 @@ cf_finish_tail(capture_file *cf, int *err) aren't any packets left to read) exit. */ break; } - read_packet(cf, dfcode, data_offset); + read_packet(cf, dfcode, filtering_tap_listeners, tap_flags, data_offset); } /* Cleanup and release all dfilter resources */ @@ -915,7 +941,8 @@ void cf_set_rfcode(capture_file *cf, dfilter_t *rfcode) static int add_packet_to_packet_list(frame_data *fdata, capture_file *cf, - dfilter_t *dfcode, + dfilter_t *dfcode, gboolean filtering_tap_listeners, + guint tap_flags, union wtap_pseudo_header *pseudo_header, const guchar *buf, gboolean refilter) { @@ -967,15 +994,18 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf, we have a list of color filters; - we have tap listeners; + we have tap listeners with filters; + + we have tap listeners that require a protocol tree; we have custom columns; allocate a protocol tree root node, so that we'll construct a protocol tree against which a filter expression can be evaluated. */ - if ((dfcode != NULL && refilter) || color_filters_used() - || num_tap_filters != 0 || have_custom_cols(&cf->cinfo)) + if ((dfcode != NULL && refilter) || color_filters_used() || + filtering_tap_listeners || (tap_flags & TL_REQUIRES_PROTO_TREE) || + have_custom_cols(&cf->cinfo)) create_proto_tree = TRUE; /* Dissect the frame. */ @@ -1088,7 +1118,8 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf, /* read in a new packet */ /* returns the row of the new packet in the packet list or -1 if not displayed */ static int -read_packet(capture_file *cf, dfilter_t *dfcode, gint64 offset) +read_packet(capture_file *cf, dfilter_t *dfcode, + gboolean filtering_tap_listeners, guint tap_flags, gint64 offset) { const struct wtap_pkthdr *phdr = wtap_phdr(cf->wth); union wtap_pseudo_header *pseudo_header = wtap_pseudoheader(cf->wth); @@ -1147,7 +1178,9 @@ read_packet(capture_file *cf, dfilter_t *dfcode, gint64 offset) cf->f_datalen = offset + phdr->caplen; fdata->num = cf->count; if (!cf->redissecting) { - row = add_packet_to_packet_list(fdata, cf, dfcode, pseudo_header, buf, TRUE); + row = add_packet_to_packet_list(fdata, cf, dfcode, + filtering_tap_listeners, tap_flags, + pseudo_header, buf, TRUE); } } else { /* XXX - if we didn't have read filters, or if we could avoid @@ -1512,6 +1545,8 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item, int progbar_nextstep; int progbar_quantum; dfilter_t *dfcode; + gboolean filtering_tap_listeners; + guint tap_flags; /* Compile the current display filter. * We assume this will not fail since cf->dfilter is only set in @@ -1522,6 +1557,12 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item, dfilter_compile(cf->dfilter, &dfcode); } + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + /* Get the union of the flags for all tap listeners. */ + tap_flags = union_of_tap_listener_flags(); + cum_bytes=0; reset_tap_listeners(); /* Which frame, if any, is the currently selected frame? @@ -1668,8 +1709,9 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item, preceding_row = prev_row; preceding_frame = prev_frame; } - row = add_packet_to_packet_list(fdata, cf, dfcode, &cf->pseudo_header, cf->pd, - refilter); + row = add_packet_to_packet_list(fdata, cf, dfcode, filtering_tap_listeners, + tap_flags, &cf->pseudo_header, cf->pd, + refilter); /* If this frame is displayed, and this is the first frame we've seen displayed after the selected frame, remember this frame - @@ -1902,20 +1944,22 @@ process_specified_packets(capture_file *cf, packet_range_t *range, return ret; } +typedef struct { + gboolean construct_protocol_tree; + column_info *cinfo; +} retap_callback_args_t; + static gboolean retap_packet(capture_file *cf _U_, frame_data *fdata, union wtap_pseudo_header *pseudo_header, const guint8 *pd, void *argsp) { - column_info *cinfo = argsp; + retap_callback_args_t *args = argsp; epan_dissect_t *edt; - /* If we have tap listeners, allocate a protocol tree root node, so that - we'll construct a protocol tree against which a filter expression can - be evaluated. */ - edt = epan_dissect_new(num_tap_filters != 0, FALSE); + edt = epan_dissect_new(args->construct_protocol_tree, FALSE); tap_queue_init(edt); - epan_dissect_run(edt, pseudo_header, pd, fdata, cinfo); + epan_dissect_run(edt, pseudo_header, pd, fdata, args->cinfo); tap_push_tapped_queue(edt); epan_dissect_free(edt); @@ -1923,9 +1967,25 @@ retap_packet(capture_file *cf _U_, frame_data *fdata, } cf_read_status_t -cf_retap_packets(capture_file *cf, gboolean do_columns) +cf_retap_packets(capture_file *cf) { packet_range_t range; + retap_callback_args_t callback_args; + gboolean filtering_tap_listeners; + guint tap_flags; + + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + tap_flags = union_of_tap_listener_flags(); + + /* If any tap listeners have filters, or require the protocol tree, + construct the protocol tree. */ + callback_args.construct_protocol_tree = filtering_tap_listeners || + (tap_flags & TL_REQUIRES_PROTO_TREE); + + /* If any tap listeners require the columns, construct them. */ + callback_args.cinfo = (tap_flags & TL_REQUIRES_COLUMNS) ? &cf->cinfo : NULL; /* Reset the tap listeners. */ reset_tap_listeners(); @@ -1934,9 +1994,9 @@ cf_retap_packets(capture_file *cf, gboolean do_columns) re-running the taps. */ packet_range_init(&range); packet_range_process_init(&range); - switch (process_specified_packets(cf, &range, "Refiltering statistics on", + switch (process_specified_packets(cf, &range, "Recalculating statistics on", "all packets", TRUE, retap_packet, - do_columns ? &cf->cinfo : NULL)) { + &callback_args)) { case PSP_FINISHED: /* Completed successfully. */ return CF_READ_OK; @@ -274,10 +274,9 @@ void cf_redissect_packets(capture_file *cf); * Rescan all packets and just run taps - don't reconstruct the display. * * @param cf the capture file - * @param do_columns TRUE if columns are to be generated, FALSE otherwise * @return one of cf_read_status_t */ -cf_read_status_t cf_retap_packets(capture_file *cf, gboolean do_columns); +cf_read_status_t cf_retap_packets(capture_file *cf); /** * The time format has changed, rescan all packets. diff --git a/gtk/afp_stat.c b/gtk/afp_stat.c index e857a8e048..35d8bb34d1 100644 --- a/gtk/afp_stat.c +++ b/gtk/afp_stat.c @@ -173,7 +173,7 @@ gtk_afpstat_init(const char *optarg, void *userdata _U_) } - error_string=register_tap_listener("afp", ss, filter, afpstat_reset, afpstat_packet, afpstat_draw); + error_string=register_tap_listener("afp", ss, filter, 0, afpstat_reset, afpstat_packet, afpstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -194,7 +194,7 @@ gtk_afpstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(ss->win); window_present(ss->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(ss->win->window); } diff --git a/gtk/ansi_a_stat.c b/gtk/ansi_a_stat.c index 075042637e..d3fb09bc53 100644 --- a/gtk/ansi_a_stat.c +++ b/gtk/ansi_a_stat.c @@ -391,7 +391,7 @@ register_tap_listener_gtkansi_a_stat(void) memset((void *) &ansi_a_stat, 0, sizeof(ansi_a_stat_t)); err_p = - register_tap_listener("ansi_a", &ansi_a_stat, NULL, + register_tap_listener("ansi_a", &ansi_a_stat, NULL, 0, ansi_a_stat_reset, ansi_a_stat_packet, ansi_a_stat_draw); diff --git a/gtk/ansi_map_stat.c b/gtk/ansi_map_stat.c index 127fce25f7..7cc52ae712 100644 --- a/gtk/ansi_map_stat.c +++ b/gtk/ansi_map_stat.c @@ -367,7 +367,7 @@ register_tap_listener_gtkansi_map_stat(void) memset((void *) &ansi_a_stat, 0, sizeof(ansi_map_stat_t)); err_p = - register_tap_listener("ansi_map", &ansi_a_stat, NULL, + register_tap_listener("ansi_map", &ansi_a_stat, NULL, 0, ansi_map_stat_reset, ansi_map_stat_packet, ansi_map_stat_draw); diff --git a/gtk/bootp_stat.c b/gtk/bootp_stat.c index ffd35bcede..24799dd85f 100644 --- a/gtk/bootp_stat.c +++ b/gtk/bootp_stat.c @@ -241,6 +241,7 @@ dhcpstat_init(const char *optarg, void *userdata _U_) "bootp", sp, filter, + 0, dhcpstat_reset, dhcpstat_packet, dhcpstat_draw); @@ -267,7 +268,7 @@ dhcpstat_init(const char *optarg, void *userdata _U_) window_present(sp->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(sp->win->window); } diff --git a/gtk/camel_counter.c b/gtk/camel_counter.c index 40193d2126..9f52d75e5b 100644 --- a/gtk/camel_counter.c +++ b/gtk/camel_counter.c @@ -153,7 +153,6 @@ static void gtk_camelcounter_init(const char *optarg, void *userdata _U_) { struct camelcounter_t *p_camelcounter; const char *filter=NULL; - const char *emptyfilter=""; GString *error_string; GtkWidget *bbox; GtkWidget *close_bt; @@ -182,17 +181,10 @@ static void gtk_camelcounter_init(const char *optarg, void *userdata _U_) p_camelcounter->table = create_stat_table(p_camelcounter->scrolled_window, p_camelcounter->vbox, 2, titles); - if (filter) { - error_string=register_tap_listener("CAMEL", p_camelcounter, filter, + error_string=register_tap_listener("CAMEL", p_camelcounter, filter, 0, gtk_camelcounter_reset, gtk_camelcounter_packet, gtk_camelcounter_draw); - } else { - error_string=register_tap_listener("CAMEL", p_camelcounter, emptyfilter, - gtk_camelcounter_reset, - gtk_camelcounter_packet, - gtk_camelcounter_draw); - } if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); @@ -214,7 +206,7 @@ static void gtk_camelcounter_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(p_camelcounter->win); window_present(p_camelcounter->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(p_camelcounter->win->window); } diff --git a/gtk/camel_srt.c b/gtk/camel_srt.c index 7a721d61e4..5d81dd7c4a 100644 --- a/gtk/camel_srt.c +++ b/gtk/camel_srt.c @@ -147,7 +147,6 @@ static void gtk_camelsrt_init(const char *optarg, void *userdata _U_) { struct camelsrt_t * p_camelsrt; const char *filter=NULL; - const char *emptyfilter=""; GtkWidget *cmd_label; GtkWidget *main_label; @@ -199,25 +198,17 @@ static void gtk_camelsrt_init(const char *optarg, void *userdata _U_) val_to_str(i,camelSRTtype_naming,"Unknown")); } - if (filter) { - error_string=register_tap_listener("CAMEL", - p_camelsrt, - filter, - camelsrt_reset, - camelsrt_packet, - camelsrt_draw); - } else { - error_string=register_tap_listener("CAMEL", - p_camelsrt, - emptyfilter, - camelsrt_reset, - camelsrt_packet, - camelsrt_draw); - } + error_string=register_tap_listener("CAMEL", + p_camelsrt, + filter, + 0, + camelsrt_reset, + camelsrt_packet, + camelsrt_draw); - if(error_string){ - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); - g_string_free(error_string, TRUE); + if(error_string){ + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); + g_string_free(error_string, TRUE); g_free(p_camelsrt); return; } @@ -234,7 +225,7 @@ static void gtk_camelsrt_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(p_camelsrt->win); window_present(p_camelsrt->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(p_camelsrt->win->window); } diff --git a/gtk/compare_stat.c b/gtk/compare_stat.c index e50a94fd2e..785e1d743c 100644 --- a/gtk/compare_stat.c +++ b/gtk/compare_stat.c @@ -798,7 +798,7 @@ gtk_comparestat_init(const char *optarg, void* userdata _U_) /* create a Hash to count the packets with the same ip.id */ cs->packet_tree=se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "Packet_info_tree"); - error_string=register_tap_listener("ip", cs, filter, comparestat_reset, comparestat_packet, comparestat_draw); + error_string=register_tap_listener("ip", cs, filter, 0, comparestat_reset, comparestat_packet, comparestat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -823,7 +823,7 @@ gtk_comparestat_init(const char *optarg, void* userdata _U_) gtk_widget_show_all(cs->win); window_present(cs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } static GtkWidget *dlg=NULL; diff --git a/gtk/conversations_table.c b/gtk/conversations_table.c index ba7ba99bdb..7a3e73f9c6 100644 --- a/gtk/conversations_table.c +++ b/gtk/conversations_table.c @@ -1289,7 +1289,7 @@ init_ct_table_page(conversations_table *conversations, GtkWidget *vbox, gboolean ct_create_popup_menu(conversations); /* register the tap and rerun the taps on the packet list */ - error_string=register_tap_listener(tap_name, conversations, filter, reset_ct_table_data_cb, packet_func, draw_ct_table_data_cb); + error_string=register_tap_listener(tap_name, conversations, filter, 0, reset_ct_table_data_cb, packet_func, draw_ct_table_data_cb); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -1356,7 +1356,7 @@ init_conversation_table(gboolean hide_ports, const char *table_name, const char gtk_widget_show_all(conversations->win); window_present(conversations->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(conversations->win->window); /* Keep clist frozen to cause modifications to the clist (inserts, appends, others that are extremely slow @@ -1490,7 +1490,7 @@ ct_filter_toggle_dest(GtkWidget *widget, gpointer data) reset_ct_table_data(conversations); } - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); if (conversations) { gdk_window_raise(conversations->win->window); } @@ -1601,7 +1601,7 @@ init_conversation_notebook_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show_all(win); window_present(win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(win->window); /* after retapping, redraw table */ diff --git a/gtk/dcerpc_stat.c b/gtk/dcerpc_stat.c index ad77538a88..da745f296a 100644 --- a/gtk/dcerpc_stat.c +++ b/gtk/dcerpc_stat.c @@ -313,7 +313,7 @@ gtk_dcerpcstat_init(const char *optarg, void* userdata _U_) } - error_string=register_tap_listener("dcerpc", rs, filter, dcerpcstat_reset, dcerpcstat_packet, dcerpcstat_draw); + error_string=register_tap_listener("dcerpc", rs, filter, 0, dcerpcstat_reset, dcerpcstat_packet, dcerpcstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); @@ -336,7 +336,7 @@ gtk_dcerpcstat_init(const char *optarg, void* userdata _U_) gtk_widget_show_all(rs->win); window_present(rs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(rs->win->window); } diff --git a/gtk/diameter_stat.c b/gtk/diameter_stat.c index 50e51f9e6f..1f37b04eee 100644 --- a/gtk/diameter_stat.c +++ b/gtk/diameter_stat.c @@ -184,7 +184,7 @@ gtk_diameterstat_init(const char *optarg, void *userdata _U_) init_srt_table(&diameter->diameter_srt_table, 1, vbox, NULL); init_srt_table_row(&diameter->diameter_srt_table, 0, "Unknown"); - error_string=register_tap_listener("diameter", diameter, filter, diameterstat_reset, diameterstat_packet, diameterstat_draw); + error_string=register_tap_listener("diameter", diameter, filter, 0, diameterstat_reset, diameterstat_packet, diameterstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -205,7 +205,7 @@ gtk_diameterstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(diameter->win); window_present(diameter->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(diameter->win->window); } diff --git a/gtk/expert_comp_dlg.c b/gtk/expert_comp_dlg.c index da351944aa..2fc8c1e7b8 100644 --- a/gtk/expert_comp_dlg.c +++ b/gtk/expert_comp_dlg.c @@ -309,6 +309,7 @@ expert_comp_init(const char *optarg _U_, void* userdata _U_) /* Add tap listener functions for expert details, From expert_dlg.c*/ error_string=register_tap_listener("expert", etd, NULL /* fstring */, + 0, expert_dlg_reset, expert_dlg_packet, expert_dlg_draw); @@ -324,7 +325,7 @@ expert_comp_init(const char *optarg _U_, void* userdata _U_) /* Register the tap listener */ - error_string=register_tap_listener("expert", ss, filter, error_reset, error_packet, NULL); + error_string=register_tap_listener("expert", ss, filter, 0, error_reset, error_packet, NULL); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -361,7 +362,7 @@ expert_comp_init(const char *optarg _U_, void* userdata _U_) * assumes we didn't change anything that would cause any packets to * dissect differently, and thus doesn't redo the packet display. */ - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); /* This will bring up the progress bar * Put our window back in front diff --git a/gtk/expert_dlg.c b/gtk/expert_dlg.c index 074ab1bb84..c6d9889674 100644 --- a/gtk/expert_dlg.c +++ b/gtk/expert_dlg.c @@ -542,6 +542,7 @@ expert_dlg_init(const char *optarg, void* userdata _U_) }*/ error_string=register_tap_listener("expert", etd, NULL /* fstring */, + 0, expert_dlg_reset, expert_dlg_packet, expert_dlg_draw); @@ -569,7 +570,7 @@ expert_dlg_init(const char *optarg, void* userdata _U_) gtk_widget_show_all(etd->win); window_present(etd->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); /* This will bring up the progress bar * Put our window back in front diff --git a/gtk/export_object.c b/gtk/export_object.c index 08d9015c2b..cde07a8ac8 100644 --- a/gtk/export_object.c +++ b/gtk/export_object.c @@ -283,7 +283,7 @@ export_object_window(const gchar *tapname, const gchar *name, tap_packet_cb tap_ object_list = g_malloc0(sizeof(export_object_list_t)); /* Data will be gathered via a tap callback */ - error_msg = register_tap_listener(tapname, object_list, NULL, + error_msg = register_tap_listener(tapname, object_list, NULL, 0, eo_reset, tap_packet, eo_draw); @@ -421,5 +421,5 @@ export_object_window(const gchar *tapname, const gchar *name, tap_packet_cb tap_ gtk_widget_show_all(object_list->dlg); window_present(object_list->dlg); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } diff --git a/gtk/fc_stat.c b/gtk/fc_stat.c index b9502d6c57..bad8b78712 100644 --- a/gtk/fc_stat.c +++ b/gtk/fc_stat.c @@ -179,7 +179,7 @@ gtk_fcstat_init(const char *optarg, void *userdata _U_) } - error_string=register_tap_listener("fc", fc, filter, fcstat_reset, fcstat_packet, fcstat_draw); + error_string=register_tap_listener("fc", fc, filter, 0, fcstat_reset, fcstat_packet, fcstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -200,7 +200,7 @@ gtk_fcstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(fc->win); window_present(fc->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(fc->win->window); } diff --git a/gtk/flow_graph.c b/gtk/flow_graph.c index c23fa6030a..4465d530c1 100644 --- a/gtk/flow_graph.c +++ b/gtk/flow_graph.c @@ -420,6 +420,7 @@ flow_graph_on_ok (GtkButton *button _U_, { /* don't register tap listener, if we have it already */ register_tap_listener("frame", &tap_identifier, NULL, + TL_REQUIRES_COLUMNS, flow_graph_reset, flow_graph_frame_packet, flow_graph_packet_draw @@ -427,7 +428,7 @@ flow_graph_on_ok (GtkButton *button _U_, have_frame_tap_listener=TRUE; } - cf_retap_packets(&cfile, TRUE); + cf_retap_packets(&cfile); } else if (type_of_flow == TCP){ /* Register the tap listener */ @@ -436,6 +437,7 @@ flow_graph_on_ok (GtkButton *button _U_, { /* don't register tap listener, if we have it already */ register_tap_listener("tcp", &tap_identifier, NULL, + 0, flow_graph_reset, flow_graph_tcp_packet, flow_graph_packet_draw @@ -443,7 +445,7 @@ flow_graph_on_ok (GtkButton *button _U_, have_tcp_tap_listener=TRUE; } - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } if (graph_analysis_data->dlg.window != NULL){ /* if we still have a window */ diff --git a/gtk/follow_ssl.c b/gtk/follow_ssl.c index f9daa2f125..f128c4d735 100644 --- a/gtk/follow_ssl.c +++ b/gtk/follow_ssl.c @@ -203,7 +203,7 @@ follow_ssl_stream_cb(GtkWidget * w, gpointer data _U_) } /* data will be passed via tap callback*/ - msg = register_tap_listener("ssl", follow_info, follow_filter, + msg = register_tap_listener("ssl", follow_info, follow_filter, 0, NULL, ssl_queue_packet_data, NULL); if (msg) { diff --git a/gtk/follow_udp.c b/gtk/follow_udp.c index 10ac3d5705..d95c580e2a 100644 --- a/gtk/follow_udp.c +++ b/gtk/follow_udp.c @@ -151,7 +151,7 @@ follow_udp_stream_cb(GtkWidget *w, gpointer data _U_) /* data will be passed via tap callback*/ msg = register_tap_listener("udp_follow", follow_info, follow_filter, - NULL, udp_queue_packet_data, NULL); + 0, NULL, udp_queue_packet_data, NULL); if (msg) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Can't register udp_follow tap: %s\n", diff --git a/gtk/funnel_stat.c b/gtk/funnel_stat.c index e79d405ef1..f632c67bb2 100644 --- a/gtk/funnel_stat.c +++ b/gtk/funnel_stat.c @@ -476,7 +476,7 @@ static void funnel_logger(const gchar *log_domain _U_, } static void funnel_retap_packets(void) { - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } static gboolean funnel_open_file(const char* fname, const char* filter, const char** err_str) { @@ -578,7 +578,7 @@ typedef struct _menu_cb_t { static void our_menu_callback(void* unused _U_, gpointer data) { menu_cb_t* mcb = data; mcb->callback(mcb->callback_data); - if (mcb->retap) cf_retap_packets(&cfile, FALSE); + if (mcb->retap) cf_retap_packets(&cfile); } static void register_menu_cb(const char *name, diff --git a/gtk/gsm_a_stat.c b/gtk/gsm_a_stat.c index 649870c55d..5b9b04b1e5 100644 --- a/gtk/gsm_a_stat.c +++ b/gtk/gsm_a_stat.c @@ -666,7 +666,7 @@ register_tap_listener_gtkgsm_a_stat(void) memset((void *) &gsm_a_stat, 0, sizeof(gsm_a_stat_t)); err_p = - register_tap_listener("gsm_a", &gsm_a_stat, NULL, + register_tap_listener("gsm_a", &gsm_a_stat, NULL, 0, gsm_a_stat_reset, gsm_a_stat_packet, gsm_a_stat_draw); diff --git a/gtk/gsm_map_stat.c b/gtk/gsm_map_stat.c index 0735aa42bb..af13c20fe6 100644 --- a/gtk/gsm_map_stat.c +++ b/gtk/gsm_map_stat.c @@ -472,7 +472,7 @@ register_tap_listener_gtkgsm_map_stat(void) memset((void *) &gsm_map_stat, 0, sizeof(gsm_map_stat_t)); err_p = - register_tap_listener("gsm_map", &gsm_map_stat, NULL, + register_tap_listener("gsm_map", &gsm_map_stat, NULL, 0, gsm_map_stat_reset, gsm_map_stat_packet, gsm_map_stat_draw); diff --git a/gtk/gtp_stat.c b/gtk/gtp_stat.c index 5dd635f5b3..768f7bd533 100644 --- a/gtk/gtp_stat.c +++ b/gtk/gtp_stat.c @@ -196,7 +196,7 @@ gtk_gtpstat_init(const char *optarg, void *userdata _U_) init_srt_table_row(>p->gtp_srt_table, 2, "Update PDP context"); init_srt_table_row(>p->gtp_srt_table, 3, "Delete PDP context"); - error_string=register_tap_listener("gtp", gtp, filter, gtpstat_reset, gtpstat_packet, gtpstat_draw); + error_string=register_tap_listener("gtp", gtp, filter, 0, gtpstat_reset, gtpstat_packet, gtpstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -217,7 +217,7 @@ gtk_gtpstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(gtp->win); window_present(gtp->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(gtp->win->window); } diff --git a/gtk/h225_counter.c b/gtk/h225_counter.c index 3100ef97e5..eef76c0f24 100644 --- a/gtk/h225_counter.c +++ b/gtk/h225_counter.c @@ -503,20 +503,18 @@ static void gtk_h225counter_init(const char *optarg, void *userdata _U_) { h225counter_t *hs; - const char *filter=NULL; GString *error_string; GtkWidget *bbox; GtkWidget *close_bt; + hs=g_malloc(sizeof(h225counter_t)); + if(strncmp(optarg,"h225,counter,",13) == 0){ - filter=optarg+13; + hs->filter=g_strdup(optarg+13); } else { - filter=""; + hs->filter=NULL; } - hs=g_malloc(sizeof(h225counter_t)); - hs->filter=g_strdup(filter); - h225counter_reset(hs); hs->win=window_new(GTK_WINDOW_TOPLEVEL, "Wireshark: H.225 counters"); @@ -525,14 +523,14 @@ gtk_h225counter_init(const char *optarg, void *userdata _U_) hs->vbox=gtk_vbox_new(FALSE, 3); gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12); - init_main_stat_window(hs->win, hs->vbox, "H.225 Message and Message Reason Counter", filter); + init_main_stat_window(hs->win, hs->vbox, "H.225 Message and Message Reason Counter", hs->filter); /* init a scrolled window*/ hs->scrolled_window = scrolled_window_new(NULL, NULL); hs->table = create_stat_table(hs->scrolled_window, hs->vbox, 2, titles); - error_string=register_tap_listener("h225", hs, filter, h225counter_reset, h225counter_packet, h225counter_draw); + error_string=register_tap_listener("h225", hs, hs->filter, 0, h225counter_reset, h225counter_packet, h225counter_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -554,7 +552,7 @@ gtk_h225counter_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(hs->win); window_present(hs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(hs->win->window); } diff --git a/gtk/h225_ras_srt.c b/gtk/h225_ras_srt.c index 712ae83a0b..e28cc6d727 100644 --- a/gtk/h225_ras_srt.c +++ b/gtk/h225_ras_srt.c @@ -283,20 +283,18 @@ static void gtk_h225rassrt_init(const char *optarg, void *userdata _U_) { h225rassrt_t *hs; - const char *filter=NULL; GString *error_string; GtkWidget *bbox; GtkWidget *close_bt; + hs=g_malloc(sizeof(h225rassrt_t)); + if(strncmp(optarg,"h225,srt,",9) == 0){ - filter=optarg+9; + hs->filter=g_strdup(optarg+9); } else { - filter=""; + hs->filter=NULL; } - hs=g_malloc(sizeof(h225rassrt_t)); - hs->filter=g_strdup(filter); - h225rassrt_reset(hs); hs->win=window_new(GTK_WINDOW_TOPLEVEL, "h225-ras-srt"); @@ -305,14 +303,14 @@ gtk_h225rassrt_init(const char *optarg, void *userdata _U_) hs->vbox=gtk_vbox_new(FALSE, 3); gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12); - init_main_stat_window(hs->win, hs->vbox, "H.225 RAS Service Response Time", filter); + init_main_stat_window(hs->win, hs->vbox, "H.225 RAS Service Response Time", hs->filter); /* init a scrolled window*/ hs->scrolled_window = scrolled_window_new(NULL, NULL); hs->table = create_stat_table(hs->scrolled_window, hs->vbox, 11, titles); - error_string=register_tap_listener("h225", hs, filter, h225rassrt_reset, h225rassrt_packet, h225rassrt_draw); + error_string=register_tap_listener("h225", hs, hs->filter, 0, h225rassrt_reset, h225rassrt_packet, h225rassrt_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -334,7 +332,7 @@ gtk_h225rassrt_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(hs->win); window_present(hs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(hs->win->window); } diff --git a/gtk/hostlist_table.c b/gtk/hostlist_table.c index ed4f420538..0082994b74 100644 --- a/gtk/hostlist_table.c +++ b/gtk/hostlist_table.c @@ -845,7 +845,7 @@ init_hostlist_table_page(hostlist_table *hosttable, GtkWidget *vbox, gboolean hi hostlist_create_popup_menu(hosttable); /* register the tap and rerun the taps on the packet list */ - error_string=register_tap_listener(tap_name, hosttable, filter, reset_hostlist_table_data_cb, packet_func, draw_hostlist_table_data_cb); + error_string=register_tap_listener(tap_name, hosttable, filter, 0, reset_hostlist_table_data_cb, packet_func, draw_hostlist_table_data_cb); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -936,7 +936,7 @@ init_hostlist_table(gboolean hide_ports, const char *table_name, const char *tap gtk_widget_show_all(hosttable->win); window_present(hosttable->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(hosttable->win->window); /* Keep clist frozen to cause modifications to the clist (inserts, appends, others that are extremely slow @@ -1093,7 +1093,7 @@ hostlist_filter_toggle_dest(GtkWidget *widget, gpointer data) reset_hostlist_table_data(hosttable); } - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); if (hosttable) { gdk_window_raise(hosttable->win->window); } @@ -1221,7 +1221,7 @@ init_hostlist_notebook_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show_all(win); window_present(win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(win->window); /* after retapping, redraw table */ diff --git a/gtk/iax2_analysis.c b/gtk/iax2_analysis.c index 4562440d18..7094c87094 100644 --- a/gtk/iax2_analysis.c +++ b/gtk/iax2_analysis.c @@ -1504,7 +1504,7 @@ static gint filter_callback(GtkWidget *widget _U_, dialog_graph_graph_t *dgg) } enable_graph(dgg); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); dialog_graph_redraw(dgg->ud); return 0; @@ -1606,7 +1606,7 @@ static void tick_interval_select(GtkWidget *item, gpointer key) val=(long)g_object_get_data(G_OBJECT(item), "tick_interval"); user_data->dlg.dialog_graph.interval=val; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); dialog_graph_redraw(user_data); } @@ -1837,7 +1837,7 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data) unprotect_thread_critical_region(); /* register tap listener */ - error_string = register_tap_listener("IAX2", user_data, NULL, + error_string = register_tap_listener("IAX2", user_data, NULL, 0, iax2_reset, iax2_packet, iax2_draw); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); @@ -1846,7 +1846,7 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data) } /* retap all packets */ - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); /* draw statistics info */ draw_stat(user_data); diff --git a/gtk/io_stat.c b/gtk/io_stat.c index c4ba37026b..59e844dda1 100644 --- a/gtk/io_stat.c +++ b/gtk/io_stat.c @@ -1211,6 +1211,7 @@ enable_graph(io_stat_graph_t *gio, const char *filter, const char *field) } } return register_tap_listener("frame", gio, real_filter[0]?real_filter:NULL, + TL_REQUIRES_PROTO_TREE, gtk_iostat_reset, gtk_iostat_packet, gtk_iostat_draw); } @@ -1300,7 +1301,7 @@ gtk_iostat_init(const char *optarg _U_, void* userdata _U_) /* build the GUI */ init_io_stat_window(io); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(io->window->window); io_stat_redraw(io); } @@ -1502,7 +1503,7 @@ tick_interval_select(GtkWidget *item, gpointer key) val=(long)g_object_get_data(G_OBJECT(item), "tick_interval"); io->interval=val; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(io->window->window); io_stat_redraw(io); } @@ -1892,7 +1893,7 @@ filter_callback(GtkWidget *widget _U_, io_stat_graph_t *gio) io_stat_reset(gio->io); enable_graph(gio, filter, field); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(gio->io->window->window); io_stat_redraw(gio->io); diff --git a/gtk/ldap_stat.c b/gtk/ldap_stat.c index a2eb6c2384..3c107aec31 100644 --- a/gtk/ldap_stat.c +++ b/gtk/ldap_stat.c @@ -212,7 +212,7 @@ gtk_ldapstat_init(const char *optarg, void *userdata _U_) init_srt_table_row(&ldap->ldap_srt_table, 23, "Extended"); - error_string=register_tap_listener("ldap", ldap, filter, ldapstat_reset, ldapstat_packet, ldapstat_draw); + error_string=register_tap_listener("ldap", ldap, filter, 0, ldapstat_reset, ldapstat_packet, ldapstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -233,7 +233,7 @@ gtk_ldapstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(ldap->win); window_present(ldap->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(ldap->win->window); } diff --git a/gtk/mac_lte_stat_dlg.c b/gtk/mac_lte_stat_dlg.c index 121e94d632..7180dcd40a 100644 --- a/gtk/mac_lte_stat_dlg.c +++ b/gtk/mac_lte_stat_dlg.c @@ -800,7 +800,7 @@ static void mac_lte_stat_dlg_create(void) /* Register the tap listener */ /**********************************************/ - error_string = register_tap_listener("mac-lte", hs, NULL, + error_string = register_tap_listener("mac-lte", hs, NULL, 0, mac_lte_stat_reset, mac_lte_stat_packet, mac_lte_stat_draw); @@ -835,7 +835,7 @@ static void mac_lte_stat_dlg_create(void) window_present(mac_lte_stat_dlg_w); /* Retap */ - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(mac_lte_stat_dlg_w->window); } diff --git a/gtk/mcast_stream.c b/gtk/mcast_stream.c index b8f7920116..152314fa85 100644 --- a/gtk/mcast_stream.c +++ b/gtk/mcast_stream.c @@ -301,7 +301,7 @@ void mcaststream_scan(void) if (!the_tapinfo_struct.is_registered) register_tap_listener_mcast_stream(); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); if (!was_registered) remove_tap_listener_mcast_stream(); @@ -340,7 +340,7 @@ register_tap_listener_mcast_stream(void) GString *error_string; if (!the_tapinfo_struct.is_registered) { error_string = register_tap_listener("udp", &the_tapinfo_struct, - NULL, mcaststream_reset_cb, mcaststream_packet, + NULL, 0, mcaststream_reset_cb, mcaststream_packet, mcaststream_draw); if (error_string != NULL) { diff --git a/gtk/mcast_stream_dlg.c b/gtk/mcast_stream_dlg.c index 0ddf779ca1..b0d026f283 100644 --- a/gtk/mcast_stream_dlg.c +++ b/gtk/mcast_stream_dlg.c @@ -385,7 +385,7 @@ mcast_params_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) /* Clean up memory used by stream tap */ mcaststream_reset((mcaststream_tapinfo_t*) mcaststream_get_info()); /* retap all packets */ - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } diff --git a/gtk/megaco_stat.c b/gtk/megaco_stat.c index a2aa9de9b1..622ca08b76 100644 --- a/gtk/megaco_stat.c +++ b/gtk/megaco_stat.c @@ -150,7 +150,6 @@ static void gtk_megacostat_init(const char *optarg, void *userdata _U_) { megacostat_t *ms; - const char *filter=NULL; GString *error_string; GtkWidget *bt_close; GtkWidget *bbox; @@ -164,15 +163,14 @@ gtk_megacostat_init(const char *optarg, void *userdata _U_) return; } + ms=g_malloc(sizeof(megacostat_t)); + if(strncmp(optarg,"megaco,srt,",11) == 0){ - filter=optarg+11; + ms->filter=g_strdup(optarg+11); } else { - filter=""; + ms->filter=NULL; } - ms=g_malloc(sizeof(megacostat_t)); - ms->filter=g_strdup(filter); - megacostat_reset(ms); ms->win=window_new(GTK_WINDOW_TOPLEVEL, "MEGACO SRT"); @@ -180,14 +178,14 @@ gtk_megacostat_init(const char *optarg, void *userdata _U_) ms->vbox=gtk_vbox_new(FALSE, 3); - init_main_stat_window(ms->win, ms->vbox, "MEGACO Service Response Time (SRT) Statistics", filter); + init_main_stat_window(ms->win, ms->vbox, "MEGACO Service Response Time (SRT) Statistics", ms->filter); /* init a scrolled window*/ ms->scrolled_window = scrolled_window_new(NULL, NULL); ms->table = create_stat_table(ms->scrolled_window, ms->vbox, 7, titles); - error_string=register_tap_listener("megaco", ms, filter, megacostat_reset, megacostat_packet, megacostat_draw); + error_string=register_tap_listener("megaco", ms, ms->filter, 0, megacostat_reset, megacostat_packet, megacostat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -209,7 +207,7 @@ gtk_megacostat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(ms->win); window_present(ms->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(ms->win->window); } diff --git a/gtk/mgcp_stat.c b/gtk/mgcp_stat.c index 02183d9d5f..0ca343d2ca 100644 --- a/gtk/mgcp_stat.c +++ b/gtk/mgcp_stat.c @@ -250,20 +250,18 @@ static void gtk_mgcpstat_init(const char *optarg, void *userdata _U_) { mgcpstat_t *ms; - const char *filter=NULL; GString *error_string; GtkWidget *bt_close; GtkWidget *bbox; + ms=g_malloc(sizeof(mgcpstat_t)); + if(strncmp(optarg,"mgcp,srt,",9) == 0){ - filter=optarg+9; + ms->filter=g_strdup(optarg+9); } else { - filter=""; + ms->filter=NULL; } - ms=g_malloc(sizeof(mgcpstat_t)); - ms->filter=g_strdup(filter); - mgcpstat_reset(ms); ms->win=window_new(GTK_WINDOW_TOPLEVEL, "MGCP SRT"); @@ -271,14 +269,14 @@ gtk_mgcpstat_init(const char *optarg, void *userdata _U_) ms->vbox=gtk_vbox_new(FALSE, 3); - init_main_stat_window(ms->win, ms->vbox, "MGCP Service Response Time (SRT) Statistics", filter); + init_main_stat_window(ms->win, ms->vbox, "MGCP Service Response Time (SRT) Statistics", ms->filter); /* init a scrolled window*/ ms->scrolled_window = scrolled_window_new(NULL, NULL); ms->table = create_stat_table(ms->scrolled_window, ms->vbox, 7, titles); - error_string=register_tap_listener("mgcp", ms, filter, mgcpstat_reset, mgcpstat_packet, mgcpstat_draw); + error_string=register_tap_listener("mgcp", ms, ms->filter, 0, mgcpstat_reset, mgcpstat_packet, mgcpstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -300,7 +298,7 @@ gtk_mgcpstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(ms->win); window_present(ms->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(ms->win->window); } diff --git a/gtk/mtp3_stat.c b/gtk/mtp3_stat.c index e656683ee0..f9b4d6603a 100644 --- a/gtk/mtp3_stat.c +++ b/gtk/mtp3_stat.c @@ -435,7 +435,7 @@ register_tap_listener_gtkmtp3_stat(void) memset((void *) &mtp3_stat, 0, sizeof(mtp3_stat_t)); err_p = - register_tap_listener("mtp3", &mtp3_stat, NULL, + register_tap_listener("mtp3", &mtp3_stat, NULL, 0, mtp3_stat_reset, mtp3_stat_packet, mtp3_stat_draw); diff --git a/gtk/ncp_stat.c b/gtk/ncp_stat.c index 838b205abb..033a95d567 100644 --- a/gtk/ncp_stat.c +++ b/gtk/ncp_stat.c @@ -698,7 +698,7 @@ gtk_ncpstat_init(const char *optarg, void *userdata _U_) init_srt_table(&ss->nmas_srt_table, 256, temp_page, "nmas.subverb"); /* Register the tap listener */ - error_string=register_tap_listener("ncp_srt", ss, filter, ncpstat_reset, ncpstat_packet, ncpstat_draw); + error_string=register_tap_listener("ncp_srt", ss, filter, 0, ncpstat_reset, ncpstat_packet, ncpstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); diff --git a/gtk/radius_stat.c b/gtk/radius_stat.c index d5b718390a..1f0da9d7ba 100644 --- a/gtk/radius_stat.c +++ b/gtk/radius_stat.c @@ -301,20 +301,18 @@ static void gtk_radiusstat_init(const char *optarg, void *userdata _U_) { radiusstat_t *rs; - const char *filter=NULL; GString *error_string; GtkWidget *bt_close; GtkWidget *bbox; + rs=g_malloc(sizeof(radiusstat_t)); + if(strncmp(optarg,"radius,srt,",11) == 0){ - filter=optarg+11; + rs->filter=g_strdup(optarg+11); } else { - filter=""; + rs->filter=NULL; } - rs=g_malloc(sizeof(radiusstat_t)); - rs->filter=g_strdup(filter); - radiusstat_reset(rs); rs->win=window_new(GTK_WINDOW_TOPLEVEL, "RADIUS SRT"); @@ -322,14 +320,14 @@ gtk_radiusstat_init(const char *optarg, void *userdata _U_) rs->vbox=gtk_vbox_new(FALSE, 3); - init_main_stat_window(rs->win, rs->vbox, "RADIUS Service Response Time (SRT) Statistics", filter); + init_main_stat_window(rs->win, rs->vbox, "RADIUS Service Response Time (SRT) Statistics", rs->filter); /* init a scrolled window*/ rs->scrolled_window = scrolled_window_new(NULL, NULL); rs->table = create_stat_table(rs->scrolled_window, rs->vbox, NUM_COLUMNS, titles); - error_string=register_tap_listener("radius", rs, filter, radiusstat_reset, radiusstat_packet, radiusstat_draw); + error_string=register_tap_listener("radius", rs, rs->filter, 0, radiusstat_reset, radiusstat_packet, radiusstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -351,7 +349,7 @@ gtk_radiusstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(rs->win); window_present(rs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(rs->win->window); } diff --git a/gtk/rpc_progs.c b/gtk/rpc_progs.c index fa77546941..e51c64bdd0 100644 --- a/gtk/rpc_progs.c +++ b/gtk/rpc_progs.c @@ -382,7 +382,7 @@ gtk_rpcprogs_init(const char *optarg _U_, void* userdata _U_) gtk_table_attach_defaults(GTK_TABLE(table), tmp, 5,6,0,1); gtk_label_set_justify(GTK_LABEL(tmp), GTK_JUSTIFY_RIGHT); - error_string=register_tap_listener("rpc", win, NULL, rpcprogs_reset, rpcprogs_packet, rpcprogs_draw); + error_string=register_tap_listener("rpc", win, NULL, 0, rpcprogs_reset, rpcprogs_packet, rpcprogs_draw); if(error_string){ fprintf(stderr, "wireshark: Couldn't register rpc,programs tap: %s\n", error_string->str); @@ -403,7 +403,7 @@ gtk_rpcprogs_init(const char *optarg _U_, void* userdata _U_) gtk_widget_show_all(win); window_present(win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(win->window); } diff --git a/gtk/rpc_stat.c b/gtk/rpc_stat.c index 7f5aaaee30..08384278a2 100644 --- a/gtk/rpc_stat.c +++ b/gtk/rpc_stat.c @@ -290,7 +290,7 @@ gtk_rpcstat_init(const char *optarg, void* userdata _U_) } - error_string=register_tap_listener("rpc", rs, filter, rpcstat_reset, rpcstat_packet, rpcstat_draw); + error_string=register_tap_listener("rpc", rs, filter, 0, rpcstat_reset, rpcstat_packet, rpcstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -312,7 +312,7 @@ gtk_rpcstat_init(const char *optarg, void* userdata _U_) gtk_widget_show_all(rs->win); window_present(rs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(rs->win->window); } diff --git a/gtk/rtp_analysis.c b/gtk/rtp_analysis.c index 7a19105a2e..e0f974ec9b 100644 --- a/gtk/rtp_analysis.c +++ b/gtk/rtp_analysis.c @@ -1474,8 +1474,8 @@ static gint filter_callback(GtkWidget *widget _U_, dialog_graph_graph_t *dgg) return 0; } - enable_graph(dgg); - cf_retap_packets(&cfile, FALSE); + enable_graph(dgg); + cf_retap_packets(&cfile); dialog_graph_redraw(dgg->ud); return 0; @@ -1577,7 +1577,7 @@ static void tick_interval_select(GtkWidget *item, gpointer key) val=(long)g_object_get_data(G_OBJECT(item), "tick_interval"); user_data->dlg.dialog_graph.interval=val; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); dialog_graph_redraw(user_data); } @@ -1809,7 +1809,7 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data) unprotect_thread_critical_region(); /* register tap listener */ - error_string = register_tap_listener("rtp", user_data, NULL, + error_string = register_tap_listener("rtp", user_data, NULL, 0, rtp_reset, rtp_packet, rtp_draw); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); @@ -1818,7 +1818,7 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data) } /* retap all packets */ - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); /* draw statistics info */ draw_stat(user_data); diff --git a/gtk/rtp_stream.c b/gtk/rtp_stream.c index ecc543853a..8256590d4d 100644 --- a/gtk/rtp_stream.c +++ b/gtk/rtp_stream.c @@ -83,7 +83,7 @@ void rtpstream_scan(void) register_tap_listener_rtp_stream(); the_tapinfo_struct.mode = TAP_ANALYSE; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); if (!was_registered) remove_tap_listener_rtp_stream(); @@ -114,7 +114,7 @@ gboolean rtpstream_save(rtp_stream_info_t* stream, const gchar *filename) the_tapinfo_struct.mode = TAP_SAVE; the_tapinfo_struct.filter_stream_fwd = stream; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); the_tapinfo_struct.mode = TAP_ANALYSE; if (!was_registered) @@ -145,7 +145,7 @@ void rtpstream_mark(rtp_stream_info_t* stream_fwd, rtp_stream_info_t* stream_rev the_tapinfo_struct.mode = TAP_MARK; the_tapinfo_struct.filter_stream_fwd = stream_fwd; the_tapinfo_struct.filter_stream_rev = stream_rev; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); the_tapinfo_struct.mode = TAP_ANALYSE; if (!was_registered) @@ -186,7 +186,7 @@ register_tap_listener_rtp_stream(void) if (!the_tapinfo_struct.is_registered) { error_string = register_tap_listener("rtp", &the_tapinfo_struct, - NULL, rtpstream_reset_cb, rtpstream_packet, + NULL, 0, rtpstream_reset_cb, rtpstream_packet, rtpstream_draw); if (error_string != NULL) { diff --git a/gtk/scsi_stat.c b/gtk/scsi_stat.c index 73ecc52761..4ce4a78821 100644 --- a/gtk/scsi_stat.c +++ b/gtk/scsi_stat.c @@ -264,7 +264,7 @@ gtk_scsistat_init(const char *optarg, void* userdata _U_) } - error_string=register_tap_listener("scsi", rs, filter, scsistat_reset, scsistat_packet, scsistat_draw); + error_string=register_tap_listener("scsi", rs, filter, 0, scsistat_reset, scsistat_packet, scsistat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -286,7 +286,7 @@ gtk_scsistat_init(const char *optarg, void* userdata _U_) gtk_widget_show_all(rs->win); window_present(rs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(rs->win->window); } diff --git a/gtk/sctp_assoc_analyse.c b/gtk/sctp_assoc_analyse.c index fce1b3fded..e94b2eac19 100644 --- a/gtk/sctp_assoc_analyse.c +++ b/gtk/sctp_assoc_analyse.c @@ -931,7 +931,7 @@ struct sctp_analyse * u_data; u_data->analyse_nb = NULL; u_data->window = NULL; u_data->num_children = 0; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); sctp_analyse_cb(u_data, TRUE); sctp_set_filter(NULL, u_data); } @@ -954,7 +954,7 @@ void sctp_analyse_start(GtkWidget *w _U_, gpointer data _U_) u_data->window = NULL; u_data->num_children = 0; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); sctp_analyse_cb(u_data, FALSE); } diff --git a/gtk/sctp_chunk_stat.c b/gtk/sctp_chunk_stat.c index fc89dcdae2..addd2a1a7f 100644 --- a/gtk/sctp_chunk_stat.c +++ b/gtk/sctp_chunk_stat.c @@ -284,19 +284,16 @@ static void sctpstat_init(const char *optarg, void *userdata _U_) { sctpstat_t *hs; - const char *filter=NULL; GString *error_string; GtkWidget *bbox; GtkWidget *close_bt; + hs=g_malloc(sizeof(sctpstat_t)); if(strncmp(optarg,"sctp,stat,",10) == 0){ - filter=optarg+10; + hs->filter=g_strdup(optarg+10); } else { - filter=""; + hs->filter=NULL; } - - hs=g_malloc(sizeof(sctpstat_t)); - hs->filter=g_strdup(filter); hs->ep_list = NULL; hs->number_of_packets = 0; sctpstat_reset(hs); @@ -307,14 +304,14 @@ sctpstat_init(const char *optarg, void *userdata _U_) hs->vbox=gtk_vbox_new(FALSE, 3); gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12); - init_main_stat_window(hs->win, hs->vbox, "SCTP Chunk Counter", filter); + init_main_stat_window(hs->win, hs->vbox, "SCTP Chunk Counter", hs->filter); /* init a scrolled window*/ hs->scrolled_window = scrolled_window_new(NULL, NULL); hs->table = create_stat_table(hs->scrolled_window, hs->vbox, 15, titles); - error_string=register_tap_listener("sctp", hs, filter, + error_string=register_tap_listener("sctp", hs, hs->filter, 0, sctpstat_reset, sctpstat_packet, sctpstat_draw); @@ -339,7 +336,7 @@ sctpstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(hs->win); window_present(hs->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } void diff --git a/gtk/sctp_chunk_stat_dlg.c b/gtk/sctp_chunk_stat_dlg.c index acc0aef68c..e019d4a612 100644 --- a/gtk/sctp_chunk_stat_dlg.c +++ b/gtk/sctp_chunk_stat_dlg.c @@ -579,7 +579,7 @@ gtk_sctpstat_dlg(struct sctp_udata *u_data, unsigned int direction) g_signal_connect(bt_close, "clicked", G_CALLBACK(sctp_chunk_stat_on_close), u_data); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); } diff --git a/gtk/sctp_stat.c b/gtk/sctp_stat.c index 04f534e082..2672ca886c 100644 --- a/gtk/sctp_stat.c +++ b/gtk/sctp_stat.c @@ -1277,7 +1277,7 @@ register_tap_listener_sctp_stat(void) if (!sctp_tapinfo_struct.is_registered) { - if ((error_string = register_tap_listener("sctp", &sctp_tapinfo_struct, NULL, reset, packet, sctp_update))) { + if ((error_string = register_tap_listener("sctp", &sctp_tapinfo_struct, NULL, 0, reset, packet, sctp_update))) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); return; diff --git a/gtk/sctp_stat_dlg.c b/gtk/sctp_stat_dlg.c index d1d1ff0a14..086926dfd7 100644 --- a/gtk/sctp_stat_dlg.c +++ b/gtk/sctp_stat_dlg.c @@ -603,7 +603,7 @@ gtk_sctpstat_dlg(void) g_signal_connect(bt_analyse, "clicked", G_CALLBACK(sctp_stat_on_analyse), NULL); sctp_stat_dlg = sctp_stat_dlg_w; - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(sctp_stat_dlg_w->window); } diff --git a/gtk/sip_stat.c b/gtk/sip_stat.c index 4fb7b4da51..34289221a5 100644 --- a/gtk/sip_stat.c +++ b/gtk/sip_stat.c @@ -668,6 +668,7 @@ gtk_sipstat_init(const char *optarg, void *userdata _U_) error_string = register_tap_listener("sip", sp, filter, + 0, sipstat_reset, sipstat_packet, sipstat_draw); @@ -696,7 +697,7 @@ gtk_sipstat_init(const char *optarg, void *userdata _U_) window_present(sp->win); sip_init_hash(sp); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(sp->win->window); } diff --git a/gtk/smb2_stat.c b/gtk/smb2_stat.c index e590237807..03ffbff3f3 100644 --- a/gtk/smb2_stat.c +++ b/gtk/smb2_stat.c @@ -176,7 +176,7 @@ gtk_smb2stat_init(const char *optarg, void *userdata _U_) } - error_string=register_tap_listener("smb2", ss, filter, smb2stat_reset, smb2stat_packet, smb2stat_draw); + error_string=register_tap_listener("smb2", ss, filter, 0, smb2stat_reset, smb2stat_packet, smb2stat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -197,7 +197,7 @@ gtk_smb2stat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(ss->win); window_present(ss->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(ss->win->window); } diff --git a/gtk/smb_stat.c b/gtk/smb_stat.c index 5be5e2d57e..6b4079a4fe 100644 --- a/gtk/smb_stat.c +++ b/gtk/smb_stat.c @@ -214,7 +214,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_) } - error_string=register_tap_listener("smb", ss, filter, smbstat_reset, smbstat_packet, smbstat_draw); + error_string=register_tap_listener("smb", ss, filter, 0, smbstat_reset, smbstat_packet, smbstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free(error_string, TRUE); @@ -235,7 +235,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(ss->win); window_present(ss->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(ss->win->window); } diff --git a/gtk/stats_tree_stat.c b/gtk/stats_tree_stat.c index c5ce5f26f1..0309c4d90d 100644 --- a/gtk/stats_tree_stat.c +++ b/gtk/stats_tree_stat.c @@ -301,6 +301,7 @@ init_gtk_tree(const char* optarg, void *userdata _U_) error_string = register_tap_listener( cfg->tapname, st, st->filter, + cfg->flags, reset_tap, stats_tree_packet, draw_gtk_tree); @@ -326,7 +327,7 @@ init_gtk_tree(const char* optarg, void *userdata _U_) gtk_widget_show_all(st->pr->win); window_present(st->pr->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(st->pr->win->window); } diff --git a/gtk/tcp_graph.c b/gtk/tcp_graph.c index e664cbf632..c93cf04cbb 100644 --- a/gtk/tcp_graph.c +++ b/gtk/tcp_graph.c @@ -1756,14 +1756,14 @@ static void graph_segment_list_get (struct graph *g) ts.current=¤t; ts.g=g; ts.last=NULL; - error_string=register_tap_listener("tcp", &ts, "tcp", NULL, tapall_tcpip_packet, NULL); + error_string=register_tap_listener("tcp", &ts, "tcp", 0, NULL, tapall_tcpip_packet, NULL); if(error_string){ fprintf(stderr, "wireshark: Couldn't register tcp_graph tap: %s\n", error_string->str); g_string_free(error_string, TRUE); exit(1); } - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); remove_tap_listener(&ts); } @@ -1817,7 +1817,7 @@ static struct tcpheader *select_tcpip_session (capture_file *cf, struct segment } - error_string=register_tap_listener("tcp", &th, NULL, NULL, tap_tcpip_packet, NULL); + error_string=register_tap_listener("tcp", &th, NULL, 0, NULL, tap_tcpip_packet, NULL); if(error_string){ fprintf(stderr, "wireshark: Couldn't register tcp_graph tap: %s\n", error_string->str); diff --git a/gtk/voip_calls.c b/gtk/voip_calls.c index f687d1cc2f..96417afd6c 100644 --- a/gtk/voip_calls.c +++ b/gtk/voip_calls.c @@ -425,6 +425,7 @@ rtp_event_init_tap(void) { error_string = register_tap_listener("rtpevent", &(the_tapinfo_rtp_struct.rtp_event_dummy), NULL, + 0, NULL, rtp_event_packet, NULL @@ -659,6 +660,7 @@ rtp_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("rtp", &(the_tapinfo_rtp_struct.rtp_dummy), NULL, + 0, voip_rtp_reset, RTP_packet, RTP_packet_draw @@ -823,6 +825,7 @@ t38_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("t38", &(the_tapinfo_struct.t38_dummy), NULL, + 0, voip_calls_dlg_reset, T38_packet, voip_calls_dlg_draw @@ -1030,6 +1033,7 @@ sip_calls_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("sip", &(the_tapinfo_struct.sip_dummy), NULL, + 0, voip_calls_dlg_reset, SIPcalls_packet, voip_calls_dlg_draw @@ -1255,6 +1259,7 @@ isup_calls_init_tap(void) { error_string = register_tap_listener("isup", &(the_tapinfo_struct.isup_dummy), NULL, + 0, voip_calls_dlg_reset, isup_calls_packet, voip_calls_dlg_draw @@ -1320,6 +1325,7 @@ mtp3_calls_init_tap(void) { error_string = register_tap_listener("mtp3", &(the_tapinfo_struct.mtp3_dummy), NULL, + 0, voip_calls_dlg_reset, mtp3_calls_packet, voip_calls_dlg_draw @@ -1337,11 +1343,12 @@ mtp3_calls_init_tap(void) if(have_m3ua_tap_listener==FALSE) { error_string = register_tap_listener("m3ua", &(the_tapinfo_struct.mtp3_dummy), - NULL, - voip_calls_dlg_reset, - mtp3_calls_packet, - voip_calls_dlg_draw - ); + NULL, + 0, + voip_calls_dlg_reset, + mtp3_calls_packet, + voip_calls_dlg_draw + ); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, @@ -1662,6 +1669,7 @@ q931_calls_init_tap(void) { error_string = register_tap_listener("q931", &(the_tapinfo_struct.q931_dummy), NULL, + 0, voip_calls_dlg_reset, q931_calls_packet, voip_calls_dlg_draw @@ -1957,6 +1965,7 @@ h225_calls_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("h225", &(the_tapinfo_struct.h225_dummy), NULL, + 0, voip_calls_dlg_reset, H225calls_packet, voip_calls_dlg_draw @@ -2114,6 +2123,7 @@ h245dg_calls_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("h245dg", &(the_tapinfo_struct.h245dg_dummy), NULL, + 0, voip_calls_dlg_reset, H245dgcalls_packet, voip_calls_dlg_draw @@ -2180,6 +2190,7 @@ sdp_calls_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("sdp", &(the_tapinfo_struct.sdp_dummy), NULL, + 0, voip_calls_dlg_reset, SDPcalls_packet, voip_calls_dlg_draw @@ -2551,6 +2562,7 @@ mgcp_calls_init_tap(void) /* don't register tap listener, if we have it already */ /* we send an empty filter, to force a non null "tree" in the mgcp dissector */ error_string = register_tap_listener("mgcp", &(the_tapinfo_struct.mgcp_dummy), g_strdup(""), + 0, voip_calls_dlg_reset, MGCPcalls_packet, voip_calls_dlg_draw @@ -2680,6 +2692,7 @@ actrace_calls_init_tap(void) { /* don't register tap listener, if we have it already */ error_string = register_tap_listener("actrace", &(the_tapinfo_struct.actrace_dummy), NULL, + 0, voip_calls_dlg_reset, ACTRACEcalls_packet, voip_calls_dlg_draw @@ -2828,10 +2841,11 @@ void h248_calls_init_tap(void) if(have_megaco_tap_listener==FALSE) { error_string = register_tap_listener("megaco", &(the_tapinfo_struct.megaco_dummy), - NULL, - voip_calls_dlg_reset, - h248_calls_packet, - voip_calls_dlg_draw); + NULL, + 0, + voip_calls_dlg_reset, + h248_calls_packet, + voip_calls_dlg_draw); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, @@ -2846,10 +2860,11 @@ void h248_calls_init_tap(void) if(have_h248_tap_listener==FALSE) { error_string = register_tap_listener("h248", &(the_tapinfo_struct.h248_dummy), - NULL, - voip_calls_dlg_reset, - h248_calls_packet, - voip_calls_dlg_draw); + NULL, + 0, + voip_calls_dlg_reset, + h248_calls_packet, + voip_calls_dlg_draw); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, @@ -3013,10 +3028,11 @@ void sccp_calls_init_tap(void) if(have_sccp_tap_listener==FALSE) { error_string = register_tap_listener("sccp", &(the_tapinfo_struct.sccp_dummy), - NULL, - voip_calls_dlg_reset, - sccp_calls_packet, - voip_calls_dlg_draw); + NULL, + 0, + voip_calls_dlg_reset, + sccp_calls_packet, + voip_calls_dlg_draw); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, @@ -3031,10 +3047,11 @@ void sccp_calls_init_tap(void) if(have_sua_tap_listener==FALSE) { error_string = register_tap_listener("sua", &(the_tapinfo_struct.sua_dummy), - NULL, - voip_calls_dlg_reset, - sua_calls_packet, - voip_calls_dlg_draw); + NULL, + 0, + voip_calls_dlg_reset, + sua_calls_packet, + voip_calls_dlg_draw); if (error_string != NULL) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, @@ -3538,6 +3555,7 @@ unistim_calls_init_tap(void){ error_string = register_tap_listener("unistim", &(the_tapinfo_struct.unistim_dummy), NULL, + 0, voip_calls_dlg_reset, unistim_calls_packet, voip_calls_dlg_draw @@ -3701,6 +3719,7 @@ skinny_calls_init_tap(void) /* don't register tap listener, if we have it already */ /* we send an empty filter, to force a non null "tree" in the SKINNY dissector */ error_string = register_tap_listener("skinny", &(the_tapinfo_struct.skinny_dummy), g_strdup(""), + 0, voip_calls_dlg_reset, skinny_calls_packet, voip_calls_dlg_draw @@ -3880,6 +3899,7 @@ iax2_calls_init_tap(void) /* don't register tap listener, if we have it already */ /* we send an empty filter, to force a non null "tree" in the IAX2 dissector */ error_string = register_tap_listener("IAX2", &(the_tapinfo_struct.iax2_dummy), g_strdup(""), + 0, voip_calls_dlg_reset, iax2_calls_packet, voip_calls_dlg_draw @@ -3991,6 +4011,7 @@ VoIPcalls_init_tap(void) { error_string = register_tap_listener("voip", &(the_tapinfo_struct.voip_dummy), NULL, + 0, voip_calls_dlg_reset, VoIPcalls_packet, voip_calls_dlg_draw @@ -4054,6 +4075,7 @@ prot_calls_init_tap(void) { error_string = register_tap_listener("prot_", &(the_tapinfo_struct.prot__dummy), NULL, + 0, voip_calls_dlg_reset, prot__calls_packet, voip_calls_dlg_draw diff --git a/gtk/voip_calls_dlg.c b/gtk/voip_calls_dlg.c index f5d91bbc97..75ed4c5fdc 100644 --- a/gtk/voip_calls_dlg.c +++ b/gtk/voip_calls_dlg.c @@ -950,7 +950,7 @@ voip_calls_init_tap(const char *dummy _U_, void* userdata _U_) gtk_clist_append(GTK_CLIST(clist), data); /* Scan for VoIP calls calls (redissect all packets) */ - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(voip_calls_dlg->window); /* Tap listener will be removed and cleaned up in voip_calls_on_destroy */ } diff --git a/gtk/wlan_stat_dlg.c b/gtk/wlan_stat_dlg.c index 38e3feee58..fc1c43c82b 100644 --- a/gtk/wlan_stat_dlg.c +++ b/gtk/wlan_stat_dlg.c @@ -646,7 +646,7 @@ wlan_filter_toggle_dest(GtkWidget *widget, gpointer data) hs->use_dfilter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget)); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(wlanstat_dlg_w->window); } @@ -1257,8 +1257,9 @@ wlanstat_dlg_create (void) wlan_create_popup_menu(hs); wlan_details_create_popup_menu(hs); - error_string=register_tap_listener ("wlan", hs, NULL, wlanstat_reset, - wlanstat_packet, wlanstat_draw); + error_string=register_tap_listener ("wlan", hs, NULL, 0, + wlanstat_reset, wlanstat_packet, + wlanstat_draw); if (error_string) { simple_dialog (ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_string->str); g_string_free (error_string, TRUE); @@ -1313,7 +1314,7 @@ wlanstat_dlg_create (void) gtk_widget_show_all (wlanstat_dlg_w); window_present (wlanstat_dlg_w); - cf_retap_packets (&cfile, FALSE); + cf_retap_packets (&cfile); gdk_window_raise(wlanstat_dlg_w->window); } diff --git a/gtk/wsp_stat.c b/gtk/wsp_stat.c index 53db5b2cac..4c3f1a01f5 100644 --- a/gtk/wsp_stat.c +++ b/gtk/wsp_stat.c @@ -385,6 +385,7 @@ gtk_wspstat_init(const char *optarg, void *userdata _U_) "wsp", sp, filter, + 0, wspstat_reset, wspstat_packet, wspstat_draw); @@ -411,7 +412,7 @@ gtk_wspstat_init(const char *optarg, void *userdata _U_) gtk_widget_show_all(sp->win); window_present(sp->win); - cf_retap_packets(&cfile, FALSE); + cf_retap_packets(&cfile); gdk_window_raise(sp->win->window); } diff --git a/plugins/mate/packet-mate.c b/plugins/mate/packet-mate.c index d4132cace1..d533a235f1 100644 --- a/plugins/mate/packet-mate.c +++ b/plugins/mate/packet-mate.c @@ -341,10 +341,11 @@ proto_reg_handoff_mate(void) register_init_routine(initialize_mate_runtime); tap_error = register_tap_listener("frame", &mate_tap_data, - (char*) mc->tap_filter, - (tap_reset_cb) NULL, - mate_packet, - (tap_draw_cb) NULL); + (char*) mc->tap_filter, + 0, + (tap_reset_cb) NULL, + mate_packet, + (tap_draw_cb) NULL); if ( tap_error ) { g_warning("mate: couldn't (re)register tap: %s",tap_error->str); diff --git a/plugins/stats_tree/pinfo_stats_tree.c b/plugins/stats_tree/pinfo_stats_tree.c index 58db355f6a..b41583d531 100644 --- a/plugins/stats_tree/pinfo_stats_tree.c +++ b/plugins/stats_tree/pinfo_stats_tree.c @@ -130,9 +130,9 @@ static int dsts_stats_tree_packet(stats_tree* st, packet_info* pinfo, epan_disse /* register all pinfo trees */ void register_pinfo_stat_trees(void) { - stats_tree_register("ip","ip_hosts",st_str_ip, ip_hosts_stats_tree_packet, ip_hosts_stats_tree_init, NULL ); - stats_tree_register("ip","ptype",st_str_ptype, ptype_stats_tree_packet, ptype_stats_tree_init, NULL ); - stats_tree_register_with_group("frame","plen",st_str_plen, plen_stats_tree_packet, plen_stats_tree_init, NULL, REGISTER_STAT_GROUP_GENERIC ); - stats_tree_register("ip","dests",st_str_dsts, dsts_stats_tree_packet, dsts_stats_tree_init, NULL ); + stats_tree_register("ip","ip_hosts",st_str_ip, 0, ip_hosts_stats_tree_packet, ip_hosts_stats_tree_init, NULL ); + stats_tree_register("ip","ptype",st_str_ptype, 0, ptype_stats_tree_packet, ptype_stats_tree_init, NULL ); + stats_tree_register_with_group("frame","plen",st_str_plen, 0, plen_stats_tree_packet, plen_stats_tree_init, NULL, REGISTER_STAT_GROUP_GENERIC ); + stats_tree_register("ip","dests",st_str_dsts, 0, dsts_stats_tree_packet, dsts_stats_tree_init, NULL ); } diff --git a/rawshark.c b/rawshark.c index f3b2bad12d..cad73de744 100644 --- a/rawshark.c +++ b/rawshark.c @@ -1470,7 +1470,7 @@ protocolinfo_init(char *field) rs->filter=field; rs->cmd_line_index = g_cmd_line_index++; - error_string=register_tap_listener("frame", rs, rs->filter, NULL, protocolinfo_packet, NULL); + error_string=register_tap_listener("frame", rs, rs->filter, TL_REQUIRES_PROTO_TREE, NULL, protocolinfo_packet, NULL); if(error_string){ /* error, we failed to attach to the tap. complain and clean up */ fprintf(stderr, "rawshark: Couldn't register field extraction tap: %s\n", diff --git a/tap-afpstat.c b/tap-afpstat.c index 16dff8118d..54974c0a6e 100644 --- a/tap-afpstat.c +++ b/tap-afpstat.c @@ -145,7 +145,7 @@ afpstat_init(const char *optarg, void* userdata _U_) ss->proc[i].tot.nsecs=0; } - error_string=register_tap_listener("afp", ss, filter, NULL, afpstat_packet, afpstat_draw); + error_string=register_tap_listener("afp", ss, filter, 0, NULL, afpstat_packet, afpstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(ss->filter); diff --git a/tap-ansi_astat.c b/tap-ansi_astat.c index b5a3c42537..0d23895674 100644 --- a/tap-ansi_astat.c +++ b/tap-ansi_astat.c @@ -145,7 +145,7 @@ ansi_a_stat_init(const char *optarg _U_, void* userdata _U_) memset(stat_p, 0, sizeof(ansi_a_stat_t)); err_p = - register_tap_listener("ansi_a", stat_p, NULL, + register_tap_listener("ansi_a", stat_p, NULL, 0, NULL, ansi_a_stat_packet, ansi_a_stat_draw); diff --git a/tap-bootpstat.c b/tap-bootpstat.c index 1f23e44101..60f044edd9 100644 --- a/tap-bootpstat.c +++ b/tap-bootpstat.c @@ -162,6 +162,7 @@ dhcpstat_init(const char *optarg, void* userdata _U_) "bootp", sp, filter, + 0, dhcpstat_reset, dhcpstat_packet, dhcpstat_draw); diff --git a/tap-camelcounter.c b/tap-camelcounter.c index 1989deeb42..18df797130 100644 --- a/tap-camelcounter.c +++ b/tap-camelcounter.c @@ -95,40 +95,24 @@ static void camelcounter_draw(void *phs) static void camelcounter_init(const char *optarg, void* userdata _U_) { struct camelcounter_t *p_camelcounter; - const char *filter=NULL; - const char *emptyfilter=""; GString *error_string; - if(!strncmp(optarg,"camel,counter,",13)){ - filter=optarg+13; - } else { - filter=NULL; - } - p_camelcounter = g_malloc(sizeof(struct camelcounter_t)); - if(filter){ - p_camelcounter->filter=g_strdup(filter); + if(!strncmp(optarg,"camel,counter,",13)){ + p_camelcounter->filter=g_strdup(optarg+13); } else { p_camelcounter->filter=NULL; } camelcounter_reset(p_camelcounter); - if (filter) { - error_string=register_tap_listener("CAMEL", - p_camelcounter, - filter, - NULL, - camelcounter_packet, - camelcounter_draw); - } else { - error_string=register_tap_listener("CAMEL", - p_camelcounter, - emptyfilter, - NULL, - camelcounter_packet, - camelcounter_draw); - } + error_string=register_tap_listener("CAMEL", + p_camelcounter, + p_camelcounter->filter, + 0, + NULL, + camelcounter_packet, + camelcounter_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ diff --git a/tap-camelsrt.c b/tap-camelsrt.c index 94e88a77b2..ec575f4a15 100644 --- a/tap-camelsrt.c +++ b/tap-camelsrt.c @@ -211,40 +211,23 @@ static void camelsrt_draw(void *phs) static void camelsrt_init(const char *optarg, void* userdata _U_) { struct camelsrt_t *p_camelsrt; - const char *filter=NULL; - const char *emptyfilter=""; - GString *error_string; - if(!strncmp(optarg,"camel,srt,",9)){ - filter=optarg+9; - } else { - filter=NULL; - } - p_camelsrt = g_malloc(sizeof(struct camelsrt_t)); - if(filter){ - p_camelsrt->filter=g_strdup(filter); + if(!strncmp(optarg,"camel,srt,",9)){ + p_camelsrt->filter=g_strdup(optarg+9); } else { p_camelsrt->filter=NULL; } camelsrt_reset(p_camelsrt); - if (filter) { - error_string=register_tap_listener("CAMEL", - p_camelsrt, - filter, - NULL, - camelsrt_packet, - camelsrt_draw); - } else { - error_string=register_tap_listener("CAMEL", - p_camelsrt, - emptyfilter, - NULL, - camelsrt_packet, - camelsrt_draw); - } + error_string=register_tap_listener("CAMEL", + p_camelsrt, + p_camelsrt->filter, + 0, + NULL, + camelsrt_packet, + camelsrt_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ diff --git a/tap-comparestat.c b/tap-comparestat.c index 1634db7551..43b7f5b25c 100644 --- a/tap-comparestat.c +++ b/tap-comparestat.c @@ -560,7 +560,7 @@ comparestat_init(const char *optarg, void* userdata _U_) /* create a Hash to count the packets with the same ip.id */ cs->packet_tree=se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "Packet_info_tree"); - error_string=register_tap_listener("ip", cs, filter, comparestat_reset, comparestat_packet, comparestat_draw); + error_string=register_tap_listener("ip", cs, filter, 0, comparestat_reset, comparestat_packet, comparestat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(cs->filter); diff --git a/tap-dcerpcstat.c b/tap-dcerpcstat.c index 7bee236b7c..7c3cd16931 100644 --- a/tap-dcerpcstat.c +++ b/tap-dcerpcstat.c @@ -278,7 +278,7 @@ dcerpcstat_init(const char *optarg, void* userdata _U_) rs->procedures[i].tot.nsecs=0; } - error_string=register_tap_listener("dcerpc", rs, filter, NULL, dcerpcstat_packet, dcerpcstat_draw); + error_string=register_tap_listener("dcerpc", rs, filter, 0, NULL, dcerpcstat_packet, dcerpcstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(rs->procedures); diff --git a/tap-gsm_astat.c b/tap-gsm_astat.c index 2c7f26431c..0185790fde 100644 --- a/tap-gsm_astat.c +++ b/tap-gsm_astat.c @@ -332,7 +332,7 @@ gsm_a_stat_init(const char *optarg _U_,void* userdata _U_) memset(stat_p, 0, sizeof(gsm_a_stat_t)); err_p = - register_tap_listener("gsm_a", stat_p, NULL, + register_tap_listener("gsm_a", stat_p, NULL, 0, NULL, gsm_a_stat_packet, gsm_a_stat_draw); diff --git a/tap-h225counter.c b/tap-h225counter.c index 2f4b6e3af8..16e89b5b75 100644 --- a/tap-h225counter.c +++ b/tap-h225counter.c @@ -352,21 +352,18 @@ static void h225counter_init(const char *optarg, void* userdata _U_) { h225counter_t *hs; - const char *filter=NULL; GString *error_string; + hs = g_malloc(sizeof(h225counter_t)); if(!strncmp(optarg,"h225,counter,",13)){ - filter=optarg+13; + hs->filter=g_strdup(optarg+13); } else { - filter=""; + hs->filter=NULL; } - hs = g_malloc(sizeof(h225counter_t)); - hs->filter=g_strdup(filter); - h225counter_reset(hs); - error_string=register_tap_listener("h225", hs, filter, NULL, h225counter_packet, h225counter_draw); + error_string=register_tap_listener("h225", hs, hs->filter, 0, NULL, h225counter_packet, h225counter_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(hs->filter); diff --git a/tap-h225rassrt.c b/tap-h225rassrt.c index 67a688794c..59b32d6792 100644 --- a/tap-h225rassrt.c +++ b/tap-h225rassrt.c @@ -215,21 +215,18 @@ static void h225rassrt_init(const char *optarg, void* userdata _U_) { h225rassrt_t *hs; - const char *filter=NULL; GString *error_string; + hs = g_malloc(sizeof(h225rassrt_t)); if(!strncmp(optarg,"h225,srt,",9)){ - filter=optarg+9; + hs->filter=g_strdup(optarg+9); } else { - filter=""; + hs->filter=NULL; } - hs = g_malloc(sizeof(h225rassrt_t)); - hs->filter=g_strdup(filter); - h225rassrt_reset(hs); - error_string=register_tap_listener("h225", hs, filter, NULL, h225rassrt_packet, h225rassrt_draw); + error_string=register_tap_listener("h225", hs, hs->filter, 0, NULL, h225rassrt_packet, h225rassrt_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(hs->filter); diff --git a/tap-httpstat.c b/tap-httpstat.c index 7a611a9587..b2f5a1676c 100644 --- a/tap-httpstat.c +++ b/tap-httpstat.c @@ -306,6 +306,7 @@ gtk_httpstat_init(const char *optarg,void* userdata _U_) "http", sp, filter, + 0, httpstat_reset, httpstat_packet, httpstat_draw); diff --git a/tap-iostat.c b/tap-iostat.c index df4a1a1490..bb1180479b 100644 --- a/tap-iostat.c +++ b/tap-iostat.c @@ -69,7 +69,7 @@ typedef struct _io_stat_item_t { static int -iostat_packet(void *arg, packet_info *pinfo, epan_dissect_t *edt _U_, const void *dummy _U_) +iostat_packet(void *arg, packet_info *pinfo, epan_dissect_t *edt, const void *dummy _U_) { io_stat_item_t *mit = arg; io_stat_item_t *it; @@ -488,14 +488,12 @@ register_io_tap(io_stat_t *io, int i, const char *filter) io->filters[i]=filter; flt=filter; - if(!filter){ - filter=""; - } field=NULL; hfi=NULL; for(j=0; calc_type_table[j].func_name; j++){ namelen=strlen(calc_type_table[j].func_name); - if(strncmp(filter, calc_type_table[j].func_name, namelen) == 0 + if(filter + && strncmp(filter, calc_type_table[j].func_name, namelen) == 0 && *(filter+namelen)=='('){ io->items[i].calc_type=calc_type_table[j].calc_type; @@ -600,7 +598,7 @@ CALC_TYPE_MAX 4 CALC_TYPE_AVG 5 */ - error_string=register_tap_listener("frame", &io->items[i], flt, NULL, iostat_packet, i?NULL:iostat_draw); + error_string=register_tap_listener("frame", &io->items[i], flt, TL_REQUIRES_PROTO_TREE, NULL, iostat_packet, i?NULL:iostat_draw); if(error_string){ g_free(io->items); g_free(io); diff --git a/tap-iousers.c b/tap-iousers.c index 21d5af761a..13361c872a 100644 --- a/tap-iousers.c +++ b/tap-iousers.c @@ -580,7 +580,7 @@ iousers_draw(void *arg) printf("================================================================================\n"); } -void +static void iousers_init(const char *optarg, void* userdata _U_) { const char *filter=NULL; @@ -695,7 +695,7 @@ iousers_init(const char *optarg, void* userdata _U_) iu->filter=NULL; } - error_string=register_tap_listener(tap_type, iu, filter, NULL, packet_func, iousers_draw); + error_string=register_tap_listener(tap_type, iu, filter, 0, NULL, packet_func, iousers_draw); if(error_string){ if(iu->items){ g_free(iu->items); diff --git a/tap-megacostat.c b/tap-megacostat.c index d2999815c7..5e2b3c5d36 100644 --- a/tap-megacostat.c +++ b/tap-megacostat.c @@ -83,7 +83,6 @@ megacostat_init(const char *optarg, void* userdata _U_) { megacostat_t *ms; int i; - const char *filter=NULL; GString *error_string; pref_t *megaco_ctx_track,*h248_ctx_track; @@ -95,15 +94,13 @@ megacostat_init(const char *optarg, void* userdata _U_) exit(1); } + ms=g_malloc(sizeof(megacostat_t)); if(!strncmp(optarg,"megaco,rtd,",11)){ - filter=optarg+11; + ms->filter=g_strdup(optarg+11); } else { - filter=""; + ms->filter=NULL; } - ms=g_malloc(sizeof(megacostat_t)); - ms->filter=g_strdup(filter); - for(i=0;i<NUM_TIMESTATS;i++) { ms->rtd[i].num=0; ms->rtd[i].min_num=0; @@ -121,7 +118,7 @@ megacostat_init(const char *optarg, void* userdata _U_) ms->req_dup_num=0; ms->rsp_dup_num=0; - error_string=register_tap_listener("megaco", ms, filter, NULL, megacostat_packet, megacostat_draw); + error_string=register_tap_listener("megaco", ms, ms->filter, 0, NULL, megacostat_packet, megacostat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(ms->filter); diff --git a/tap-mgcpstat.c b/tap-mgcpstat.c index 1c6b850bbc..f4a71d181c 100644 --- a/tap-mgcpstat.c +++ b/tap-mgcpstat.c @@ -180,18 +180,15 @@ mgcpstat_init(const char *optarg, void* userdata _U_) { mgcpstat_t *ms; int i; - const char *filter=NULL; GString *error_string; + ms=g_malloc(sizeof(mgcpstat_t)); if(!strncmp(optarg,"mgcp,rtd,",9)){ - filter=optarg+9; + ms->filter=g_strdup(optarg+9); } else { - filter=""; + ms->filter=NULL; } - ms=g_malloc(sizeof(mgcpstat_t)); - ms->filter=g_strdup(filter); - for(i=0;i<NUM_TIMESTATS;i++) { ms->rtd[i].num=0; ms->rtd[i].min_num=0; @@ -209,7 +206,7 @@ mgcpstat_init(const char *optarg, void* userdata _U_) ms->req_dup_num=0; ms->rsp_dup_num=0; - error_string=register_tap_listener("mgcp", ms, filter, NULL, mgcpstat_packet, mgcpstat_draw); + error_string=register_tap_listener("mgcp", ms, ms->filter, 0, NULL, mgcpstat_packet, mgcpstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(ms->filter); diff --git a/tap-protocolinfo.c b/tap-protocolinfo.c index 632949692e..588f8fb775 100644 --- a/tap-protocolinfo.c +++ b/tap-protocolinfo.c @@ -123,7 +123,7 @@ protocolinfo_init(const char *optarg, void* userdata _U_) rs->filter=NULL; } - error_string=register_tap_listener("frame", rs, rs->filter, NULL, protocolinfo_packet, NULL); + error_string=register_tap_listener("frame", rs, rs->filter, TL_REQUIRES_PROTO_TREE, NULL, protocolinfo_packet, NULL); if(error_string){ /* error, we failed to attach to the tap. complain and clean up */ fprintf(stderr, "tshark: Couldn't register proto,colinfo tap: %s\n", diff --git a/tap-protohierstat.c b/tap-protohierstat.c index 29ef508218..b413f5035e 100644 --- a/tap-protohierstat.c +++ b/tap-protohierstat.c @@ -180,17 +180,11 @@ protohierstat_init(const char *optarg, void* userdata _U_) const char *filter=NULL; GString *error_string; - if(!strcmp("io,phs",optarg)){ - filter="frame"; + if(strcmp("io,phs",optarg)==0){ + /* No arguments */ } else if(sscanf(optarg,"io,phs,%n",&pos)==0){ if(pos){ filter=optarg+pos; - } else { - /* We must use a filter to guarantee that edt->tree - will be populated. "frame" matches everything so - that one is used instead of no filter. - */ - filter="frame"; } } else { fprintf(stderr, "tshark: invalid \"-z io,phs[,<filter>]\" argument\n"); @@ -205,7 +199,7 @@ protohierstat_init(const char *optarg, void* userdata _U_) rs->filter=NULL; } - error_string=register_tap_listener("frame", rs, filter, NULL, protohierstat_packet, protohierstat_draw); + error_string=register_tap_listener("frame", rs, filter, TL_REQUIRES_PROTO_TREE, NULL, protohierstat_packet, protohierstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(rs->filter); diff --git a/tap-radiusstat.c b/tap-radiusstat.c index f98b9594b3..278e62a05f 100644 --- a/tap-radiusstat.c +++ b/tap-radiusstat.c @@ -170,18 +170,15 @@ radiusstat_init(const char *optarg, void* userdata _U_) { radiusstat_t *rs; int i; - const char *filter=NULL; GString *error_string; + rs=g_malloc(sizeof(radiusstat_t)); if(!strncmp(optarg,"radius,rtd,",11)){ - filter=optarg+11; + rs->filter=g_strdup(optarg+11); } else { - filter=""; + rs->filter=NULL; } - rs=g_malloc(sizeof(radiusstat_t)); - rs->filter=g_strdup(filter); - for(i=0;i<NUM_TIMESTATS;i++) { rs->rtd[i].num=0; rs->rtd[i].min_num=0; @@ -199,7 +196,7 @@ radiusstat_init(const char *optarg, void* userdata _U_) rs->req_dup_num=0; rs->rsp_dup_num=0; - error_string=register_tap_listener("radius", rs, filter, NULL, radiusstat_packet, radiusstat_draw); + error_string=register_tap_listener("radius", rs, rs->filter, 0, NULL, radiusstat_packet, radiusstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(rs->filter); diff --git a/tap-rpcprogs.c b/tap-rpcprogs.c index 10c6c2f7bb..06e35587f5 100644 --- a/tap-rpcprogs.c +++ b/tap-rpcprogs.c @@ -220,7 +220,7 @@ rpcprogs_init(const char *optarg _U_, void* userdata _U_) } already_enabled=1; - error_string=register_tap_listener("rpc", NULL, NULL, NULL, rpcprogs_packet, rpcprogs_draw); + error_string=register_tap_listener("rpc", NULL, NULL, 0, NULL, rpcprogs_packet, rpcprogs_draw); if(error_string){ fprintf(stderr,"tshark: Couldn't register rpc,programs tap: %s\n", error_string->str); diff --git a/tap-rpcstat.c b/tap-rpcstat.c index 617ad77fa3..1f43ad74a7 100644 --- a/tap-rpcstat.c +++ b/tap-rpcstat.c @@ -332,7 +332,7 @@ rpcstat_init(const char *optarg, void* userdata _U_) * */ - error_string=register_tap_listener("rpc", rs, filter, rpcstat_reset, rpcstat_packet, rpcstat_draw); + error_string=register_tap_listener("rpc", rs, filter, 0, rpcstat_reset, rpcstat_packet, rpcstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(rs->procedures); @@ -142,7 +142,7 @@ rtp_streams_stat_init(const char *optarg _U_, void* userdata _U_) GString *err_p; err_p = - register_tap_listener("rtp", &the_tapinfo_struct, NULL, + register_tap_listener("rtp", &the_tapinfo_struct, NULL, 0, rtpstream_reset_cb, rtpstream_packet, rtp_streams_stat_draw); diff --git a/tap-sctpchunkstat.c b/tap-sctpchunkstat.c index 630d4f4c91..695e8f9ca4 100644 --- a/tap-sctpchunkstat.c +++ b/tap-sctpchunkstat.c @@ -223,23 +223,20 @@ static void sctpstat_init(const char *optarg, void* userdata _U_) { sctpstat_t *hs; - const char *filter=NULL; GString *error_string; + hs = g_malloc(sizeof(sctpstat_t)); if(!strncmp(optarg,"sctp,stat,",11)){ - filter=optarg+11; + hs->filter=g_strdup(optarg+11); } else { - filter=""; + hs->filter=NULL; } - - hs = g_malloc(sizeof(sctpstat_t)); - hs->filter=g_strdup(filter); hs->ep_list = NULL; hs->number_of_packets = 0; sctpstat_reset(hs); - error_string=register_tap_listener("sctp", hs, filter, NULL, sctpstat_packet, sctpstat_draw); + error_string=register_tap_listener("sctp", hs, hs->filter, 0, NULL, sctpstat_packet, sctpstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(hs->filter); diff --git a/tap-sipstat.c b/tap-sipstat.c index fecf1312d1..e3b281c938 100644 --- a/tap-sipstat.c +++ b/tap-sipstat.c @@ -408,6 +408,7 @@ sipstat_init(const char *optarg, void* userdata _U_) "sip", sp, filter, + 0, sipstat_reset, sipstat_packet, sipstat_draw); diff --git a/tap-smbsids.c b/tap-smbsids.c index 21eb5f1a67..0a43eed399 100644 --- a/tap-smbsids.c +++ b/tap-smbsids.c @@ -83,7 +83,7 @@ smbsids_init(const char *optarg _U_, void* userdata _U_) } - error_string=register_tap_listener("smb", NULL, NULL, NULL, smbsids_packet, smbsids_draw); + error_string=register_tap_listener("smb", NULL, NULL, 0, NULL, smbsids_packet, smbsids_draw); if(error_string){ fprintf(stderr, "tshark: Couldn't register smb,sids tap:%s\n", error_string->str); diff --git a/tap-smbstat.c b/tap-smbstat.c index f27f43297e..eae8b27a21 100644 --- a/tap-smbstat.c +++ b/tap-smbstat.c @@ -251,7 +251,7 @@ smbstat_init(const char *optarg,void* userdata _U_) ss->nt_trans[i].tot.nsecs=0; } - error_string=register_tap_listener("smb", ss, filter, NULL, smbstat_packet, smbstat_draw); + error_string=register_tap_listener("smb", ss, filter, 0, NULL, smbstat_packet, smbstat_draw); if(error_string){ /* error, we failed to attach to the tap. clean up */ g_free(ss->filter); diff --git a/tap-stats_tree.c b/tap-stats_tree.c index ed60fba11d..350d4ace49 100644 --- a/tap-stats_tree.c +++ b/tap-stats_tree.c @@ -104,6 +104,7 @@ init_stats_tree(const char *optarg, void *userdata _U_) error_string = register_tap_listener(st->cfg->tapname, st, st->filter, + st->cfg->flags, stats_tree_reset, stats_tree_packet, draw_stats_tree); diff --git a/tap-wspstat.c b/tap-wspstat.c index 782ac82d34..1f9eae0b8b 100644 --- a/tap-wspstat.c +++ b/tap-wspstat.c @@ -261,6 +261,7 @@ wspstat_init(const char *optarg, void* userdata _U_) "wsp", sp, filter, + 0, wspstat_reset, wspstat_packet, wspstat_draw); @@ -166,7 +166,7 @@ static void report_counts_siginfo(int); static int load_cap_file(capture_file *, char *, int, int, gint64); static gboolean process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr, union wtap_pseudo_header *pseudo_header, - const guchar *pd); + const guchar *pd, gboolean filtering_tap_listeners, guint tap_flags); static void show_capture_file_io_error(const char *, int, gboolean); static void show_print_file_io_error(int err); static gboolean write_preamble(capture_file *cf); @@ -1990,7 +1990,8 @@ capture_input_new_packets(capture_options *capture_opts, int to_read) gchar *err_info; gint64 data_offset; capture_file *cf = capture_opts->cf; - + gboolean filtering_tap_listeners; + guint tap_flags; #ifdef SIGINFO /* @@ -2001,6 +2002,12 @@ capture_input_new_packets(capture_options *capture_opts, int to_read) infodelay = TRUE; #endif /* SIGINFO */ + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + /* Get the union of the flags for all tap listeners. */ + tap_flags = union_of_tap_listener_flags(); + if(do_dissection) { while (to_read-- && cf->wth) { ret = wtap_read(cf->wth, &err, &err_info, &data_offset); @@ -2011,7 +2018,8 @@ capture_input_new_packets(capture_options *capture_opts, int to_read) cf->wth = NULL; } else { ret = process_packet(cf, data_offset, wtap_phdr(cf->wth), - wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth)); + wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth), + filtering_tap_listeners, tap_flags); } if (ret != FALSE) { /* packet sucessfully read and gone through the "Read Filter" */ @@ -2175,6 +2183,8 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type, gchar *err_info; gint64 data_offset; char *save_file_string = NULL; + gboolean filtering_tap_listeners; + guint tap_flags; linktype = wtap_file_encap(cf->wth); if (save_file != NULL) { @@ -2231,9 +2241,17 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type, } pdh = NULL; } + + /* Do we have any tap listeners with filters? */ + filtering_tap_listeners = have_filtering_tap_listeners(); + + /* Get the union of the flags for all tap listeners. */ + tap_flags = union_of_tap_listener_flags(); + while (wtap_read(cf->wth, &err, &err_info, &data_offset)) { if (process_packet(cf, data_offset, wtap_phdr(cf->wth), - wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth))) { + wtap_pseudoheader(cf->wth), wtap_buf_ptr(cf->wth), + filtering_tap_listeners, tap_flags)) { /* Either there's no read filtering or this packet passed the filter, so, if we're writing to a capture file, write this packet out. */ @@ -2394,10 +2412,12 @@ clear_fdata(frame_data *fdata) static gboolean process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr, - union wtap_pseudo_header *pseudo_header, const guchar *pd) + union wtap_pseudo_header *pseudo_header, const guchar *pd, + gboolean filtering_tap_listeners, guint tap_flags) { frame_data fdata; gboolean create_proto_tree; + column_info *cinfo; epan_dissect_t *edt; gboolean passed; @@ -2419,7 +2439,8 @@ process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr, } passed = TRUE; - if (cf->rfcode || verbose || num_tap_filters!=0 || have_custom_cols(&cf->cinfo)) + if (cf->rfcode || verbose || filtering_tap_listeners || + (tap_flags & TL_REQUIRES_PROTO_TREE) || have_custom_cols(&cf->cinfo)) create_proto_tree = TRUE; else create_proto_tree = FALSE; @@ -2438,11 +2459,19 @@ process_packet(capture_file *cf, gint64 offset, const struct wtap_pkthdr *whdr, tap_queue_init(edt); - /* We only need the columns if we're printing packet info but we're - *not* verbose; in verbose mode, we print the protocol tree, not - the protocol summary. */ - epan_dissect_run(edt, pseudo_header, pd, &fdata, - (print_packet_info && !verbose) ? &cf->cinfo : NULL); + /* We only need the columns if either + + 1) some tap needs the columns + + or + + 2) we're printing packet info but we're *not* verbose; in verbose + mode, we print the protocol tree, not the protocol summary. */ + if ((tap_flags & TL_REQUIRES_COLUMNS) || (print_packet_info && !verbose)) + cinfo = &cf->cinfo; + else + cinfo = NULL; + epan_dissect_run(edt, pseudo_header, pd, &fdata, cinfo); tap_push_tapped_queue(edt); |