Have tap listeners specify whether the "packet" routine requires
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 5 Jun 2009 22:42:47 +0000 (22:42 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 5 Jun 2009 22:42:47 +0000 (22:42 +0000)
a protocol tree;

the column values.

This includes stats-tree listeners.

Have the routines to build the packet list, and to retap packets, honor
those requirements.  This means that cf_retap_packets() no longer needs
an argument to specify whether to construct the column values or not, so
get rid of that argument.

This also means that there's no need for a tap to have a fake filter
to ensure that the protocol tree will be built, so don't set up a fake
"frame" filter.

While we're at it, clean up some cases where "no filter" was represented
as a null string rather than a null pointer.

Have a routine to return an indication of the number of tap listeners
with filters; use that rather than the global num_tap_filters.

Clean up some indentation and some gboolean vs. gint items.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@28645 f5534014-38df-0310-8fa8-9805f1628bb7

103 files changed:
doc/README.tapping
epan/dissectors/packet-http.c
epan/dissectors/packet-isup.c
epan/dissectors/packet-smb-sidsnooping.c
epan/dissectors/packet-smb.c
epan/dissectors/packet-smb2.c
epan/dissectors/packet-smpp.c
epan/dissectors/packet-ucp.c
epan/libwireshark.def
epan/stats_tree.c
epan/stats_tree.h
epan/stats_tree_priv.h
epan/tap.c
epan/tap.h
epan/wslua/wslua_field.c
epan/wslua/wslua_listener.c
file.c
file.h
gtk/afp_stat.c
gtk/ansi_a_stat.c
gtk/ansi_map_stat.c
gtk/bootp_stat.c
gtk/camel_counter.c
gtk/camel_srt.c
gtk/compare_stat.c
gtk/conversations_table.c
gtk/dcerpc_stat.c
gtk/diameter_stat.c
gtk/expert_comp_dlg.c
gtk/expert_dlg.c
gtk/export_object.c
gtk/fc_stat.c
gtk/flow_graph.c
gtk/follow_ssl.c
gtk/follow_udp.c
gtk/funnel_stat.c
gtk/gsm_a_stat.c
gtk/gsm_map_stat.c
gtk/gtp_stat.c
gtk/h225_counter.c
gtk/h225_ras_srt.c
gtk/hostlist_table.c
gtk/iax2_analysis.c
gtk/io_stat.c
gtk/ldap_stat.c
gtk/mac_lte_stat_dlg.c
gtk/mcast_stream.c
gtk/mcast_stream_dlg.c
gtk/megaco_stat.c
gtk/mgcp_stat.c
gtk/mtp3_stat.c
gtk/ncp_stat.c
gtk/radius_stat.c
gtk/rpc_progs.c
gtk/rpc_stat.c
gtk/rtp_analysis.c
gtk/rtp_stream.c
gtk/scsi_stat.c
gtk/sctp_assoc_analyse.c
gtk/sctp_chunk_stat.c
gtk/sctp_chunk_stat_dlg.c
gtk/sctp_stat.c
gtk/sctp_stat_dlg.c
gtk/sip_stat.c
gtk/smb2_stat.c
gtk/smb_stat.c
gtk/stats_tree_stat.c
gtk/tcp_graph.c
gtk/voip_calls.c
gtk/voip_calls_dlg.c
gtk/wlan_stat_dlg.c
gtk/wsp_stat.c
plugins/mate/packet-mate.c
plugins/stats_tree/pinfo_stats_tree.c
rawshark.c
tap-afpstat.c
tap-ansi_astat.c
tap-bootpstat.c
tap-camelcounter.c
tap-camelsrt.c
tap-comparestat.c
tap-dcerpcstat.c
tap-gsm_astat.c
tap-h225counter.c
tap-h225rassrt.c
tap-httpstat.c
tap-iostat.c
tap-iousers.c
tap-megacostat.c
tap-mgcpstat.c
tap-protocolinfo.c
tap-protohierstat.c
tap-radiusstat.c
tap-rpcprogs.c
tap-rpcstat.c
tap-rtp.c
tap-sctpchunkstat.c
tap-sipstat.c
tap-smbsids.c
tap-smbstat.c
tap-stats_tree.c
tap-wspstat.c
tshark.c

index f437ed71e70e6ac707a9f267d74c33f727a0f786..1dc4da078545f48c2ecc8f8bffe6defcfa7e5f9f 100644 (file)
@@ -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.
index c05230584c41671e36eddd59b5d153ba81726410..f62b69b3b006eef8856f29c6bdb0cacf424d9c6b 100644 (file)
@@ -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 );
 
 }
 
index 83ca4496ecae5a2faccc73b62e7ef818b1ccae50..1ad7904312efcef86c37b691d3b008c72abe45bd 100644 (file)
@@ -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);
 }
 
index 59e7854c72ba0b6f135c8401943d74225814ff38..80cb7f56703217018c958d929c624f17fc566431 100644 (file)
@@ -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 */
 
index 46aa05a012b81bbd83fcceb9d37745b2bce94026..1c84372628749933a69c189606257e4f5a89b8c8 100644 (file)
@@ -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");
                }
index 9f66c9c90581ca07e9fd7c7d52e9aec8d6ac0a6a..b07de7f35ce64e456fef0e8b6c4ef39be1cfa3cc 100644 (file)
@@ -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");
                }
index a21608ac98fc1235fc39aadbfbadbb24b3b86af6..cdf5601bd5088088fecc9578971bafccfa5e47d2 100644 (file)
@@ -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);
 }
index 0c1c966ad7f4b41b39edd280a6ad5e75cced0129..1e2aadaf19bc8e05b80e6a51b3decfc89388e427 100644 (file)
@@ -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);
 }
index 239ca9fa28bb8d08dfbfab7a61e842875a1e1ff5..c0c3de6ec4f8300ca967c0f9ec3ddd171be93f41 100644 (file)
@@ -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
index 7fbf32362bd76d18d0dc57d5309426056b4cb685..554c50eb2a316989d01f30597074e8a642ea4a59 100644 (file)
@@ -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);
 }
index 66a0c556cdc5d496a0a24ba09b18c79999e19d9b..fcbc9025ddb6065c5f063c42a2fd6bca292dcba0 100644 (file)
@@ -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);
 
index 7bfd9015bfe0fa1274586e4a872b7b7498dad5ba..24e4f4df6fd2488a03ba962e6797f284a282fb4a 100644 (file)
@@ -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
index d53bdd043297034fa51a050a5fb82f8dd119f701..acab1fd5d38292db79a184078b1a226aa4ebd460 100644 (file)
@@ -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;
+}
index 4f4855deff49a2d9c749e142a3697d286f9dd919..9bc66949e4598ba1f37b2ea47541728913f51193 100644 (file)
 
 #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
index c95a07b698c4e5073163ce80160540596c858776..84ba0a01a1719b0b8ae99f4d8e84d0724d39e9ee 100644 (file)
@@ -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);
index 22548849b4b4e5cf11e1e5d8e1c1ab3df3f91ef4..f281f42204e3de7a8e25e7fb848cc52f52d87944 100644 (file)
@@ -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 0b7bdab3361310f60719863dd04c27924ea82d42..a02c53d49c1714bf4e7f0d3d593d287b8963825a 100644 (file)
--- 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 fc16299562f92dc53e6dba7d6c507947121677f5..82640780debd373bf79eb00da8c2611d4a105483 100644 (file)
--- 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.
index e857a8e048b82474e537609686a086314ba68652..35d8bb34d1c70ed0546050c3618b7095fba20f8b 100644 (file)
@@ -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);
 }
 
index 075042637eccaefd95cd36df1c265f530fa3774a..d3fb09bc532fc578f8048d86821494d39055500c 100644 (file)
@@ -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);
index 127fce25f7c06d90d5eee9efc594ef0a9ae0132c..7cc52ae712c39830525fb2bf05f5cdd8bb674028 100644 (file)
@@ -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);
index ffd35bcede77cc9b61c6d73872250aadd820006b..24799dd85fed05429fb6d124593dc152278141c2 100644 (file)
@@ -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);
 }
 
index 40193d212605dd2fb87b5cc5a7a0eba9e002856c..9f52d75e5b70afc27d1f7d190e298a0d3d043353 100644 (file)
@@ -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);
 }
 
index 7a721d61e499d92fa77e9b424d4b1069b79f4409..5d81dd7c4a3e8104c00dd9af1fea512d58a163cd 100644 (file)
@@ -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);
 
 }
index e50a94fd2ecce7e627926450f41268ed384d5e74..785e1d743c1a61da41a6928a73d5279d4cfd1bf7 100644 (file)
@@ -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;
index ba7ba99bdb3f9ce757da11e18dbd14cddbdc1335..7a3e73f9c63ff5598e92341638e1f670419ffb0b 100644 (file)
@@ -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 */
index ad77538a88ea2bb39d7b643a41332c3d9119ee10..da745f296af736cdb15bd7de2b1182085b2eca9b 100644 (file)
@@ -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);
 }
 
index 50e51f9e6f015846ec0b8f43d2d99423c76b29b8..1f37b04eee35aa4a7bace56d14ceb36dd0b776a2 100644 (file)
@@ -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);
 }
 
index da351944aa0f34985acf45eacb7b7d3c6ba06316..2fc8c1e7b8e9ef95fc5bc55f70926c9b9c4b28e1 100644 (file)
@@ -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
index 074ab1bb8473c8fcb1d2d39383306330fa35ec09..c6d98896747e1cbcb0f93fde23af190d19564c79 100644 (file)
@@ -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
index 08d9015c2b045bda8c3582bb7c88d6a6b90d9fdb..cde07a8ac8b1cd93df48a2b9b12fe18ca5e4a3ad 100644 (file)
@@ -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);
 }
index b9502d6c5790cead15f4a63d5c97f60ed96fcf52..bad8b78712cb255967d451f384cbbb5214eceb75 100644 (file)
@@ -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);
 }
 
index c23fa6030a72209f75e90e1c031b27ac29a10088..4465d530c1e5f597c44762aab983bb06324235c3 100644 (file)
@@ -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 */
index f9daa2f125d4f20082b179707a84821502ba815c..f128c4d735575d2a5687adbfa57741e7001ec9f0 100644 (file)
@@ -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)
     {
index 10ac3d57053a1b42abd615860eb40af66458c5a5..d95c580e2a6d17522705a0e8136c0ce883aa335f 100644 (file)
@@ -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",
index e79d405ef115f5d128255cd1079ba2b91aa4d8d1..f632c67bb278e67f80555847c8e2ddc82c6e6eea 100644 (file)
@@ -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,
index 649870c55d158f24363aa594181368677fd85cd7..5b9b04b1e5d300fb2b3edf8e06c8a321616519e3 100644 (file)
@@ -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);
index 0735aa42bb6dbffbfb1a6375b839c21edb15bcd4..af13c20fe6f4afbe0e1050d5bbee228c35acda5f 100644 (file)
@@ -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);
index 5dd635f5b34cdf979433bc46092d500e99ed3c76..768f7bd5331c624ac497f59ccffeae96be6e7b5a 100644 (file)
@@ -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);
 }
 
index 3100ef97e5a5edb5e43299b7888b4be1ad5ac12b..eef76c0f241014c394c151d290670af57c9695a9 100644 (file)
@@ -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);
 }
 
index 712ae83a0b3ced19f971d3fa3981e856e41c906b..e28cc6d727bb251cd8e9cb8be515e4820edf4ac3 100644 (file)
@@ -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);
 }
 
index ed4f4205380e16a243c316c4282f1f27e3027f36..0082994b74a1aa5f6dd8646de615a11c75c09e59 100644 (file)
@@ -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 */
index 4562440d185d10c7a3935334e638ccd4fabcb2ee..7094c8709406dc570c568bcc2ab7a10ffaabec60 100644 (file)
@@ -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);
index c4ba37026bca73c1ee836b5098daac461d1db815..59e844dda1fefcc224068dedfbdd0b9196e08fb6 100644 (file)
@@ -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);
 
index a2eb6c238482c30fb006b6f1e7d9c8ffe1b57aff..3c107aec312529124db4d564a1a9b9615c396a63 100644 (file)
@@ -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);
 }
 
index 121e94d6321b39f04b8ecd249356614432494c47..7180dcd40acdc5975321d6454246839706c57599 100644 (file)
@@ -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);
 }
 
index b8f792011617500c71927d6cc918fb12a7cc0d3e..152314fa85e1642830b1f251c7a099c0ddc13d5a 100644 (file)
@@ -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) {
index 0ddf779ca1a3a54df1393cab86d8a121e66106cf..b0d026f283fd17eac503bdac507961aa2eebe5bc 100644 (file)
@@ -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);
 
 }
 
index a2aa9de9b1a4c24a10c95861d3a787303a0a9881..622ca08b762d5ca0edb15fc50e3ddb84deff5b50 100644 (file)
@@ -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);
 }
 
index 02183d9d5f1c6356e3cc4cf7fc08eb9a7fb28b4d..0ca343d2ca60010e5b77f82928a271fd2840a8c0 100644 (file)
@@ -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);
 }
 
index e656683ee0c926269f4d3887b66432d2a4ae7ece..f9b4d6603a35e2494cd70a5fdd9f950a2b212907 100644 (file)
@@ -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);
index 838b205abb8f31da6bde90ebcf2a1431cbd50d99..033a95d567a16ef9fb3a6db4708fcadf4e4a23e9 100644 (file)
@@ -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);
index d5b718390a99a045898bf9c3a7f17fcf5eb81846..1f0da9d7ba5c02a6e709f9655060d646b2a80179 100644 (file)
@@ -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);
 }
 
index fa77546941a77ec1b8c4e26a52782f339d7cc867..e51c64bdd02f06219852790c1f5461d5d0441502 100644 (file)
@@ -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);
 }
 
index 7f5aaaee300f711deeac7ed1861744a094a33b9b..08384278a2f191e8921ea18833b66ec672f39b86 100644 (file)
@@ -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);
 }
 
index 7a19105a2edd0b3e28872dca230fec1dbd1e35a2..e0f974ec9b496bc3eedc56f763ddcabb1e0588fb 100644 (file)
@@ -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);
index ecc543853ad80c5d2618af429002355e5fd27f00..8256590d4d53b81a751f97720f5637b37c58672b 100644 (file)
@@ -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) {
index 73ecc52761187f39705e49c4887f7f52612e3521..4ce4a78821e3d5cfa57236b2e3c4ec4845123ec9 100644 (file)
@@ -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);
 }
 
index fce1b3fdedfbecdf366985079cbda2dbd360b132..e94b2eac196e7ff0529fea5df112706d1e8a1d6e 100644 (file)
@@ -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);
 }
 
index fc89dcdae2a641fb926d71689e3e80b1959b5304..addd2a1a7fc9ffc25a193b6d260665c62faa3197 100644 (file)
@@ -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
index acc0aef68c4af4fc9ba80419b09d1db1ff7e2d49..e019d4a612e9d780d2fb61769e8720f87bc159dc 100644 (file)
@@ -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);
 
 }
 
index 04f534e082673e86514b0b130b6133bcf43e95c0..2672ca886cee7292b39ff66db5b9ec24c7e749f7 100644 (file)
@@ -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;
index d1d1ff0a1487aff3e9370471af413ebb652705ac..086926dfd773777766712dc1ebc5c447c4261562 100644 (file)
@@ -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);
 
 }
index 4fb7b4da512b421742bc98b7b6fdbbc292c8c1ee..34289221a5e9f16d0a604f78ec7cb8c24f416e1b 100644 (file)
@@ -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);
 }
 
index e5902378079acc55348597dcbfe3aac5d505b6c3..03ffbff3f39df026cdb3a1dad01bb70906c4e9bf 100644 (file)
@@ -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);
 }
 
index 5be5e2d57e4a28961e0dd561cc34683c033726a7..6b4079a4fe042ce9c272e8a5ab444cbe66f88dda 100644 (file)
@@ -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);
 }
 
index c5ce5f26f1578420e91e4f17b6e8e1b99ba50744..0309c4d90d80a83af7f8cba06ab5f8f870698e44 100644 (file)
@@ -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);
 }
 
index e664cbf6326ed7e61033f5938878def7ec5524d0..c93cf04cbbdf860d96c1618e9805c25a8d34f022 100644 (file)
@@ -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);
index f687d1cc2f94375dae045c5bf53d0295b9c4e023..96417afd6cd91b584c9393ee6bf2c6f99efc80be 100644 (file)
@@ -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
index f5d91bbc976029baae4ff0da5eae989ff8578cf0..75ed4c5fdcf199ba834d36005d27bfd49e058a29 100644 (file)
@@ -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 */
 }
index 38e3feee58570dcf924259a23bb1f33b69adc93a..fc1c43c82b3ef0ed62160267134c26a703aad736 100644 (file)
@@ -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);
 }
 
index 53db5b2cac5f32bd23e53459db7f422ef95e886c..4c3f1a01f518a0fa1e42a3ebabbe8b2e3b1e3ce9 100644 (file)
@@ -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);
 }
 
index d4132cace1ba6f53b351c540f92349df8472a7e4..d533a235f1ea14b1657c42777cf423d9079b4d2c 100644 (file)
@@ -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);
index 58db355f6abf9d1157aba08335c8865b2abf8959..b41583d531c99712f1cb6af40d49cf9c38ce56e1 100644 (file)
@@ -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 );
 }
  
index f3b2bad12d04531b1f1fee2ab421f77d0f573af2..cad73de744364640adf59b24c82a1de398e77d81 100644 (file)
@@ -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",
index 16dff8118d66abaa503ed69dff96263fe7ed0f46..54974c0a6e990c8f10ccad996217c829d032767e 100644 (file)
@@ -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);
index b5a3c425372093f5217280042c0f6b264740b6d6..0d238956742a9b11538e978cc15034804555c946 100644 (file)
@@ -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);
index 1f23e441013dd59a25e5763dd8b9f300fdd61131..60f044edd968fb23adccd7df010609effa4e4498 100644 (file)
@@ -162,6 +162,7 @@ dhcpstat_init(const char *optarg, void* userdata _U_)
                        "bootp",
                        sp,
                        filter,
+                       0,
                        dhcpstat_reset,
                        dhcpstat_packet,
                        dhcpstat_draw);
index 1989deeb421443bc4516dc4b6769b8741ed4f2c5..18df797130c913a1649c112af7b0c63f40f5edae 100644 (file)
@@ -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 */
index 94e88a77b2f23992ec86d2e4607cfbda4d9c60dd..ec575f4a1597062aad015ffe5a81f9dfcced79e2 100644 (file)
@@ -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 */
index 1634db75515f317423aa34eaae43704356d5d78b..43b7f5b25c103cfc7ed84758cfa53a21069dcaed 100644 (file)
@@ -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);
index 7bee236b7c4fba4e094ff13361d50cd71ac04111..7c3cd169318a940b39d6bf022c3104befdd3e0d3 100644 (file)
@@ -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);
index 2c7f26431c9ae1e7c4179a9a4c19da7bc893ada8..0185790fdec6a5e1f4580aff131a92a933a2f87e 100644 (file)
@@ -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);
index 2f4b6e3af872810511b831aa3225637657b75d67..16e89b5b75d84f82fd7af49fbddb1e11cbaea418 100644 (file)
@@ -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);
index 67a688794c45c50a7dd3d396471e1e066cb7bc58..59b32d6792298f1f21fe7825202b30f5a7590eac 100644 (file)
@@ -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);
index 7a611a95872c3b661404a0f6bea3f72e0632e262..b2f5a1676c1a89dc2f9093bb560e68126c8fc982 100644 (file)
@@ -306,6 +306,7 @@ gtk_httpstat_init(const char *optarg,void* userdata _U_)
                        "http",
                        sp,
                        filter,
+                       0,
                        httpstat_reset,
                        httpstat_packet,
                        httpstat_draw);
index df4a1a149089afb5d38d3b209950913c67d6c6ce..bb1180479b9308dc4973eea9737f3734b4968d5c 100644 (file)
@@ -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);
index 21d5af761a3f7f9dd287a845dc72e38741c4c5c3..13361c872a4a10795306ef409735b3d647a4662e 100644 (file)
@@ -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);
index d2999815c7dcc6db479c3f9167a24c5a13755bb2..5e2b3c5d36682527315cb3e583512271b4c42651 100644 (file)
@@ -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);
index 1c6b850bbc6f06ab73c229f44bfb275328ba27dd..f4a71d181c677bb1ee4fc61ca3a535e61f204ab4 100644 (file)
@@ -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);
index 632949692ee3ca91424228d8ee4ce8696722b04e..588f8fb77597c7ea26ff9e2de3b22dbb5239df87 100644 (file)
@@ -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",
index 29ef5082188079c07388f1ed8f515f132daff728..b413f5035ed1dcdd8d6824e608124f670037fb1f 100644 (file)
@@ -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);
index f98b9594b383cbc250eec893626c6b52bfb45ebe..278e62a05fc3c73dd6096d39bc407c68dbffe854 100644 (file)
@@ -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);
index 10c6c2f7bbcfe5bce003a24ddf90e66787e80b42..06e35587f565215fa1c40f4002e6ff57c6968ce9 100644 (file)
@@ -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);
index 617ad77fa3b54470d72c99d648f3bd36686881d1..1f43ad74a7860465493d17d5700757e5823530be 100644 (file)
@@ -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);
index a9b1f6a864946cc98d8cbe4128c30d70b259a423..6b29a4a5b8de482ed5ed7848b01d921a3f73f546 100644 (file)
--- 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);
index 630d4f4c91fe1b134952f5e64b453fec457974d2..695e8f9ca4d2d6958b876f7f173ab8bf30bf3daf 100644 (file)
@@ -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);
index fecf1312d1eec75b61ac53ec030ca33d1d4b9fd9..e3b281c93875ab30633cf377530463f4494a5e5c 100644 (file)
@@ -408,6 +408,7 @@ sipstat_init(const char *optarg, void* userdata _U_)
                        "sip",
                        sp,
                        filter,
+                       0,
                        sipstat_reset,
                        sipstat_packet,
                        sipstat_draw);
index 21eb5f1a678cbb50f68920623222ad9c03e89e8b..0a43eed399e0acf47e4129f6882aed669689427d 100644 (file)
@@ -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);
index f27f43297e8f04261a413a92739b5f17cd042dad..eae8b27a210a74cb419d90f9bef8f1361495d67c 100644 (file)
@@ -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);
index ed60fba11db17704a0693ef9755f9cd0cea5ed8f..350d4ace49d57e0a01a7a1b580521eef08ce63f0 100644 (file)
@@ -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);
index 782ac82d34bf523b32679c08663a27e1e15b6804..1f9eae0b8b34097c52f64a5b8b5b13502776d0dd 100644 (file)
@@ -261,6 +261,7 @@ wspstat_init(const char *optarg, void* userdata _U_)
                        "wsp",
                        sp,
                        filter,
+                       0,
                        wspstat_reset,
                        wspstat_packet,
                        wspstat_draw);
index 5f3e060a95d68781269bbd03e97ece2f084c7594..1dd65fb12138da96c1bc4e68089277c854e5bfd9 100644 (file)
--- 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);