aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/README.tapping38
-rw-r--r--epan/dissectors/packet-http.c6
-rw-r--r--epan/dissectors/packet-isup.c2
-rw-r--r--epan/dissectors/packet-smb-sidsnooping.c10
-rw-r--r--epan/dissectors/packet-smb.c3
-rw-r--r--epan/dissectors/packet-smb2.c3
-rw-r--r--epan/dissectors/packet-smpp.c2
-rw-r--r--epan/dissectors/packet-ucp.c2
-rw-r--r--epan/libwireshark.def3
-rw-r--r--epan/stats_tree.c9
-rw-r--r--epan/stats_tree.h6
-rw-r--r--epan/stats_tree_priv.h5
-rw-r--r--epan/tap.c61
-rw-r--r--epan/tap.h18
-rw-r--r--epan/wslua/wslua_field.c7
-rw-r--r--epan/wslua/wslua_listener.c80
-rw-r--r--file.c102
-rw-r--r--file.h3
-rw-r--r--gtk/afp_stat.c4
-rw-r--r--gtk/ansi_a_stat.c2
-rw-r--r--gtk/ansi_map_stat.c2
-rw-r--r--gtk/bootp_stat.c3
-rw-r--r--gtk/camel_counter.c12
-rw-r--r--gtk/camel_srt.c31
-rw-r--r--gtk/compare_stat.c4
-rw-r--r--gtk/conversations_table.c8
-rw-r--r--gtk/dcerpc_stat.c4
-rw-r--r--gtk/diameter_stat.c4
-rw-r--r--gtk/expert_comp_dlg.c5
-rw-r--r--gtk/expert_dlg.c3
-rw-r--r--gtk/export_object.c4
-rw-r--r--gtk/fc_stat.c4
-rw-r--r--gtk/flow_graph.c6
-rw-r--r--gtk/follow_ssl.c2
-rw-r--r--gtk/follow_udp.c2
-rw-r--r--gtk/funnel_stat.c4
-rw-r--r--gtk/gsm_a_stat.c2
-rw-r--r--gtk/gsm_map_stat.c2
-rw-r--r--gtk/gtp_stat.c4
-rw-r--r--gtk/h225_counter.c16
-rw-r--r--gtk/h225_ras_srt.c16
-rw-r--r--gtk/hostlist_table.c8
-rw-r--r--gtk/iax2_analysis.c8
-rw-r--r--gtk/io_stat.c7
-rw-r--r--gtk/ldap_stat.c4
-rw-r--r--gtk/mac_lte_stat_dlg.c4
-rw-r--r--gtk/mcast_stream.c4
-rw-r--r--gtk/mcast_stream_dlg.c2
-rw-r--r--gtk/megaco_stat.c16
-rw-r--r--gtk/mgcp_stat.c16
-rw-r--r--gtk/mtp3_stat.c2
-rw-r--r--gtk/ncp_stat.c2
-rw-r--r--gtk/radius_stat.c16
-rw-r--r--gtk/rpc_progs.c4
-rw-r--r--gtk/rpc_stat.c4
-rw-r--r--gtk/rtp_analysis.c10
-rw-r--r--gtk/rtp_stream.c8
-rw-r--r--gtk/scsi_stat.c4
-rw-r--r--gtk/sctp_assoc_analyse.c4
-rw-r--r--gtk/sctp_chunk_stat.c15
-rw-r--r--gtk/sctp_chunk_stat_dlg.c2
-rw-r--r--gtk/sctp_stat.c2
-rw-r--r--gtk/sctp_stat_dlg.c2
-rw-r--r--gtk/sip_stat.c3
-rw-r--r--gtk/smb2_stat.c4
-rw-r--r--gtk/smb_stat.c4
-rw-r--r--gtk/stats_tree_stat.c3
-rw-r--r--gtk/tcp_graph.c6
-rw-r--r--gtk/voip_calls.c64
-rw-r--r--gtk/voip_calls_dlg.c2
-rw-r--r--gtk/wlan_stat_dlg.c9
-rw-r--r--gtk/wsp_stat.c3
-rw-r--r--plugins/mate/packet-mate.c9
-rw-r--r--plugins/stats_tree/pinfo_stats_tree.c8
-rw-r--r--rawshark.c2
-rw-r--r--tap-afpstat.c2
-rw-r--r--tap-ansi_astat.c2
-rw-r--r--tap-bootpstat.c1
-rw-r--r--tap-camelcounter.c34
-rw-r--r--tap-camelsrt.c35
-rw-r--r--tap-comparestat.c2
-rw-r--r--tap-dcerpcstat.c2
-rw-r--r--tap-gsm_astat.c2
-rw-r--r--tap-h225counter.c11
-rw-r--r--tap-h225rassrt.c11
-rw-r--r--tap-httpstat.c1
-rw-r--r--tap-iostat.c10
-rw-r--r--tap-iousers.c4
-rw-r--r--tap-megacostat.c11
-rw-r--r--tap-mgcpstat.c11
-rw-r--r--tap-protocolinfo.c2
-rw-r--r--tap-protohierstat.c12
-rw-r--r--tap-radiusstat.c11
-rw-r--r--tap-rpcprogs.c2
-rw-r--r--tap-rpcstat.c2
-rw-r--r--tap-rtp.c2
-rw-r--r--tap-sctpchunkstat.c11
-rw-r--r--tap-sipstat.c1
-rw-r--r--tap-smbsids.c2
-rw-r--r--tap-smbstat.c2
-rw-r--r--tap-stats_tree.c1
-rw-r--r--tap-wspstat.c1
-rw-r--r--tshark.c51
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;
}
diff --git a/file.c b/file.c
index 0b7bdab336..a02c53d49c 100644
--- a/file.c
+++ b/file.c
@@ -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;
diff --git a/file.h b/file.h
index fc16299562..82640780de 100644
--- a/file.h
+++ b/file.h
@@ -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(&gtp->gtp_srt_table, 2, "Update PDP context");
init_srt_table_row(&gtp->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=&current;
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);
diff --git a/tap-rtp.c b/tap-rtp.c
index a9b1f6a864..6b29a4a5b8 100644
--- a/tap-rtp.c
+++ b/tap-rtp.c
@@ -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);
diff --git a/tshark.c b/tshark.c
index 5f3e060a95..1dd65fb121 100644
--- a/tshark.c
+++ b/tshark.c
@@ -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);