aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2009-06-05 22:42:47 +0000
committerGuy Harris <guy@alum.mit.edu>2009-06-05 22:42:47 +0000
commitcf91fdf16b2d961024ea062503ce5fb91af28186 (patch)
tree2654abe47f378933a5d325856a7b3f877338dd19 /epan
parentf84499059642f102c7272e72f74d7a986f51b520 (diff)
Have tap listeners specify whether the "packet" routine requires
a protocol tree; the column values. This includes stats-tree listeners. Have the routines to build the packet list, and to retap packets, honor those requirements. This means that cf_retap_packets() no longer needs an argument to specify whether to construct the column values or not, so get rid of that argument. This also means that there's no need for a tap to have a fake filter to ensure that the protocol tree will be built, so don't set up a fake "frame" filter. While we're at it, clean up some cases where "no filter" was represented as a null string rather than a null pointer. Have a routine to return an indication of the number of tap listeners with filters; use that rather than the global num_tap_filters. Clean up some indentation and some gboolean vs. gint items. svn path=/trunk/; revision=28645
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-http.c6
-rw-r--r--epan/dissectors/packet-isup.c2
-rw-r--r--epan/dissectors/packet-smb-sidsnooping.c10
-rw-r--r--epan/dissectors/packet-smb.c3
-rw-r--r--epan/dissectors/packet-smb2.c3
-rw-r--r--epan/dissectors/packet-smpp.c2
-rw-r--r--epan/dissectors/packet-ucp.c2
-rw-r--r--epan/libwireshark.def3
-rw-r--r--epan/stats_tree.c9
-rw-r--r--epan/stats_tree.h6
-rw-r--r--epan/stats_tree_priv.h5
-rw-r--r--epan/tap.c61
-rw-r--r--epan/tap.h18
-rw-r--r--epan/wslua/wslua_field.c7
-rw-r--r--epan/wslua/wslua_listener.c80
15 files changed, 136 insertions, 81 deletions
diff --git a/epan/dissectors/packet-http.c b/epan/dissectors/packet-http.c
index c05230584c..f62b69b3b0 100644
--- a/epan/dissectors/packet-http.c
+++ b/epan/dissectors/packet-http.c
@@ -2569,9 +2569,9 @@ proto_reg_handoff_http(void)
ntlmssp_handle = find_dissector("ntlmssp");
gssapi_handle = find_dissector("gssapi");
- stats_tree_register("http","http","HTTP/Packet Counter", http_stats_tree_packet, http_stats_tree_init, NULL );
- stats_tree_register("http","http_req","HTTP/Requests", http_req_stats_tree_packet, http_req_stats_tree_init, NULL );
- stats_tree_register("http","http_srv","HTTP/Load Distribution",http_reqs_stats_tree_packet,http_reqs_stats_tree_init, NULL );
+ stats_tree_register("http","http","HTTP/Packet Counter", 0, http_stats_tree_packet, http_stats_tree_init, NULL );
+ stats_tree_register("http","http_req","HTTP/Requests", 0, http_req_stats_tree_packet, http_req_stats_tree_init, NULL );
+ stats_tree_register("http","http_srv","HTTP/Load Distribution",0,http_reqs_stats_tree_packet,http_reqs_stats_tree_init, NULL );
}
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c
index 83ca4496ec..1ad7904312 100644
--- a/epan/dissectors/packet-isup.c
+++ b/epan/dissectors/packet-isup.c
@@ -8258,7 +8258,7 @@ proto_register_isup(void)
/* Register the stats_tree */
stats_tree_register_with_group("isup", "isup_msg", "ISUP Messages",
- msg_stats_tree_packet, msg_stats_tree_init,
+ 0, msg_stats_tree_packet, msg_stats_tree_init,
NULL, REGISTER_STAT_GROUP_TELEPHONY);
}
diff --git a/epan/dissectors/packet-smb-sidsnooping.c b/epan/dissectors/packet-smb-sidsnooping.c
index 59e7854c72..80cb7f5670 100644
--- a/epan/dissectors/packet-smb-sidsnooping.c
+++ b/epan/dissectors/packet-smb-sidsnooping.c
@@ -404,7 +404,10 @@ sid_name_snooping=0;
}
- error_string=register_tap_listener("dcerpc", &lsa_policy_information_tap_installed, "lsa.policy_information and ( lsa.info.level or lsa.domain or nt.domain_sid )", NULL, lsa_policy_information, NULL);
+ error_string=register_tap_listener("dcerpc",
+ &lsa_policy_information_tap_installed,
+ "lsa.policy_information and ( lsa.info.level or lsa.domain or nt.domain_sid )",
+ TL_REQUIRES_PROTO_TREE, NULL, lsa_policy_information, NULL);
if(error_string){
/* error, we failed to attach to the tap. clean up */
@@ -415,7 +418,10 @@ sid_name_snooping=0;
}
lsa_policy_information_tap_installed=TRUE;
- error_string=register_tap_listener("dcerpc", &samr_query_dispinfo_tap_installed, "samr and samr.opnum==40 and ( samr.handle or samr.rid or samr.acct_name or samr.level )", NULL, samr_query_dispinfo, NULL);
+ error_string=register_tap_listener("dcerpc",
+ &samr_query_dispinfo_tap_installed,
+ "samr and samr.opnum==40 and ( samr.handle or samr.rid or samr.acct_name or samr.level )",
+ TL_REQUIRES_PROTO_TREE, NULL, samr_query_dispinfo, NULL);
if(error_string){
/* error, we failed to attach to the tap. clean up */
diff --git a/epan/dissectors/packet-smb.c b/epan/dissectors/packet-smb.c
index 46aa05a012..1c84372628 100644
--- a/epan/dissectors/packet-smb.c
+++ b/epan/dissectors/packet-smb.c
@@ -6712,7 +6712,8 @@ dissect_session_setup_andx_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree
* security blob has been fully dissected and before
* we exit from this dissector.
*/
- error_string=register_tap_listener("ntlmssp", NULL, NULL, NULL, NULL, NULL);
+ error_string=register_tap_listener("ntlmssp", NULL, NULL,
+ 0, NULL, NULL, NULL);
if(!error_string){
ntlmssp_tap_id=find_tap_id("ntlmssp");
}
diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c
index 9f66c9c905..b07de7f35c 100644
--- a/epan/dissectors/packet-smb2.c
+++ b/epan/dissectors/packet-smb2.c
@@ -1988,7 +1988,8 @@ dissect_smb2_session_setup_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree
* security blob has been fully dissected and before
* we exit from this dissector.
*/
- error_string=register_tap_listener("ntlmssp", NULL, NULL, NULL, NULL, NULL);
+ error_string=register_tap_listener("ntlmssp", NULL, NULL,
+ 0, NULL, NULL, NULL);
if(!error_string){
ntlmssp_tap_id=find_tap_id("ntlmssp");
}
diff --git a/epan/dissectors/packet-smpp.c b/epan/dissectors/packet-smpp.c
index a21608ac98..cdf5601bd5 100644
--- a/epan/dissectors/packet-smpp.c
+++ b/epan/dissectors/packet-smpp.c
@@ -3544,7 +3544,7 @@ proto_reg_handoff_smpp(void)
DISSECTOR_ASSERT(gsm_sms_handle);
/* Tapping setup */
- stats_tree_register_with_group("smpp","smpp_commands", st_str_smpp,
+ stats_tree_register_with_group("smpp","smpp_commands", st_str_smpp, 0,
smpp_stats_tree_per_packet, smpp_stats_tree_init,
NULL, REGISTER_STAT_GROUP_TELEPHONY);
}
diff --git a/epan/dissectors/packet-ucp.c b/epan/dissectors/packet-ucp.c
index 0c1c966ad7..1e2aadaf19 100644
--- a/epan/dissectors/packet-ucp.c
+++ b/epan/dissectors/packet-ucp.c
@@ -2757,7 +2757,7 @@ proto_reg_handoff_ucp(void)
dissector_add_handle("tcp.port", ucp_handle);
/* Tapping setup */
- stats_tree_register_with_group("ucp", "ucp_messages", st_str_ucp,
+ stats_tree_register_with_group("ucp", "ucp_messages", st_str_ucp, 0,
ucp_stats_tree_per_packet, ucp_stats_tree_init,
NULL, REGISTER_STAT_GROUP_TELEPHONY);
}
diff --git a/epan/libwireshark.def b/epan/libwireshark.def
index 239ca9fa28..c0c3de6ec4 100644
--- a/epan/libwireshark.def
+++ b/epan/libwireshark.def
@@ -539,6 +539,7 @@ h245_set_h223_set_mc_handle
h248_param_ber_integer
h248_register_package
have_custom_cols
+have_filtering_tap_listeners
have_tap_listeners
heur_dissector_add
heur_dissector_delete
@@ -596,7 +597,6 @@ nstime_sum
nstime_to_msec
nstime_to_sec
nt_cmd_vals DATA
-num_tap_filters DATA
num_tree_types DATA
offset_from_real_beginning
oid_add
@@ -1033,6 +1033,7 @@ uat_new
uat_remove_record_idx
uat_save
uat_swap
+union_of_tap_listener_flags
UnregRejectReason_vals DATA
UnregRequestReason_vals DATA
uri_str_to_bytes
diff --git a/epan/stats_tree.c b/epan/stats_tree.c
index 7fbf32362b..554c50eb2a 100644
--- a/epan/stats_tree.c
+++ b/epan/stats_tree.c
@@ -260,6 +260,7 @@ stats_tree_reinit(void *p)
/* register a new stats_tree */
extern void
stats_tree_register_with_group(const char *tapname, const char *abbr, const char *name,
+ guint flags,
stat_tree_packet_cb packet, stat_tree_init_cb init,
stat_tree_cleanup_cb cleanup, register_stat_group_t stat_group)
{
@@ -272,11 +273,13 @@ stats_tree_register_with_group(const char *tapname, const char *abbr, const char
cfg->tapname = g_strdup(tapname);
cfg->abbr = g_strdup(abbr);
cfg->name = name ? g_strdup(name) : g_strdup(abbr);
- cfg->stat_group = stat_group;
+ cfg->stat_group = stat_group;
cfg->packet = packet;
cfg->init = init;
cfg->cleanup = cleanup;
+
+ cfg->flags = flags;
/* these have to be filled in by implementations */
cfg->setup_node_pr = NULL;
@@ -297,10 +300,12 @@ stats_tree_register_with_group(const char *tapname, const char *abbr, const char
/* register a new stats_tree with default group REGISTER_STAT_GROUP_UNSORTED */
extern void
stats_tree_register(const char *tapname, const char *abbr, const char *name,
+ guint flags,
stat_tree_packet_cb packet, stat_tree_init_cb init,
stat_tree_cleanup_cb cleanup)
{
- stats_tree_register_with_group(tapname, abbr, name,
+ stats_tree_register_with_group(tapname, abbr, name,
+ flags,
packet, init,
cleanup, REGISTER_STAT_GROUP_UNSORTED);
}
diff --git a/epan/stats_tree.h b/epan/stats_tree.h
index 66a0c556cd..fcbc9025dd 100644
--- a/epan/stats_tree.h
+++ b/epan/stats_tree.h
@@ -53,6 +53,7 @@ typedef void (*stat_tree_cleanup_cb)(stats_tree*);
/* registers a new stats tree with default group REGISTER_STAT_GROUP_UNSORTED
* abbr: protocol abbr
* name: protocol display name
+ * flags: tap listener flags for per-packet callback
* packet: per packet callback
* init: tree initialization callback
* cleanup: cleanup callback
@@ -60,6 +61,7 @@ typedef void (*stat_tree_cleanup_cb)(stats_tree*);
extern void stats_tree_register(const gchar *tapname,
const gchar *abbr,
const gchar *name,
+ guint flags,
stat_tree_packet_cb packet,
stat_tree_init_cb init,
stat_tree_cleanup_cb cleanup);
@@ -67,6 +69,7 @@ extern void stats_tree_register(const gchar *tapname,
/* registers a new stats tree
* abbr: protocol abbr
* name: protocol display name
+ * flags: tap listener flags for per-packet callback
* packet: per packet callback
* init: tree initialization callback
* cleanup: cleanup callback
@@ -75,10 +78,11 @@ extern void stats_tree_register(const gchar *tapname,
extern void stats_tree_register_with_group(const gchar *tapname,
const gchar *abbr,
const gchar *name,
+ guint flags,
stat_tree_packet_cb packet,
stat_tree_init_cb init,
stat_tree_cleanup_cb cleanup,
- register_stat_group_t stat_group);
+ register_stat_group_t stat_group);
extern int stats_tree_parent_id_by_name(stats_tree *st, const gchar *parent_name);
diff --git a/epan/stats_tree_priv.h b/epan/stats_tree_priv.h
index 7bfd9015bf..24e4f4df6f 100644
--- a/epan/stats_tree_priv.h
+++ b/epan/stats_tree_priv.h
@@ -110,7 +110,7 @@ struct _stats_tree_cfg {
gchar* abbr;
gchar* name;
gchar* tapname;
- register_stat_group_t stat_group;
+ register_stat_group_t stat_group;
gboolean in_use;
@@ -118,6 +118,9 @@ struct _stats_tree_cfg {
stat_tree_packet_cb packet;
stat_tree_init_cb init;
stat_tree_cleanup_cb cleanup;
+
+ /* tap listener flags for the per-packet callback */
+ guint flags;
/*
* node presentation callbacks
diff --git a/epan/tap.c b/epan/tap.c
index d53bdd0432..acab1fd5d3 100644
--- a/epan/tap.c
+++ b/epan/tap.c
@@ -42,7 +42,6 @@
#include <epan/tap.h>
static gboolean tapping_is_active=FALSE;
-int num_tap_filters=0;
typedef struct _tap_dissector_t {
struct _tap_dissector_t *next;
@@ -70,7 +69,8 @@ static guint tap_packet_index;
typedef struct _tap_listener_t {
struct _tap_listener_t *next;
int tap_id;
- int needs_redraw;
+ gboolean needs_redraw;
+ guint flags;
dfilter_t *code;
void *tapdata;
tap_reset_cb reset;
@@ -247,7 +247,7 @@ tap_push_tapped_queue(epan_dissect_t *edt)
for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
tp=&tap_packet_array[i];
if(tp->tap_id==tl->tap_id){
- int passed=TRUE;
+ gboolean passed=TRUE;
if(tl->code){
passed=dfilter_apply_edt(tl->code, edt);
}
@@ -315,7 +315,7 @@ reset_tap_listeners(void)
if(tl->reset){
tl->reset(tl->tapdata);
}
- tl->needs_redraw=1;
+ tl->needs_redraw=TRUE;
}
}
@@ -339,7 +339,7 @@ draw_tap_listeners(gboolean draw_all)
tl->draw(tl->tapdata);
}
}
- tl->needs_redraw=0;
+ tl->needs_redraw=FALSE;
}
}
@@ -376,7 +376,8 @@ find_tap_id(const char *name)
* message.
*/
GString *
-register_tap_listener(const char *tapname, void *tapdata, const char *fstring, tap_reset_cb reset, tap_packet_cb packet, tap_draw_cb draw)
+register_tap_listener(const char *tapname, void *tapdata, const char *fstring,
+ guint flags, tap_reset_cb reset, tap_packet_cb packet, tap_draw_cb draw)
{
tap_listener_t *tl;
int tap_id;
@@ -391,7 +392,8 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, t
tl=g_malloc(sizeof(tap_listener_t));
tl->code=NULL;
- tl->needs_redraw=1;
+ tl->needs_redraw=TRUE;
+ tl->flags=flags;
if(fstring){
if(!dfilter_compile(fstring, &tl->code)){
error_string = g_string_new("");
@@ -400,8 +402,6 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, t
fstring, dfilter_error_msg);
g_free(tl);
return error_string;
- } else {
- num_tap_filters++;
}
}
@@ -444,10 +444,9 @@ set_tap_dfilter(void *tapdata, const char *fstring)
if(tl){
if(tl->code){
dfilter_free(tl->code);
- num_tap_filters--;
tl->code=NULL;
}
- tl->needs_redraw=1;
+ tl->needs_redraw=TRUE;
if(fstring){
if(!dfilter_compile(fstring, &tl->code)){
error_string = g_string_new("");
@@ -455,8 +454,6 @@ set_tap_dfilter(void *tapdata, const char *fstring)
"Filter \"%s\" is invalid - %s",
fstring, dfilter_error_msg);
return error_string;
- } else {
- num_tap_filters++;
}
}
}
@@ -492,7 +489,6 @@ remove_tap_listener(void *tapdata)
if(tl){
if(tl->code){
dfilter_free(tl->code);
- num_tap_filters--;
}
g_free(tl);
}
@@ -502,11 +498,6 @@ remove_tap_listener(void *tapdata)
/*
* Return TRUE if we have tap listeners, FALSE otherwise.
- * Checking "num_tap_filters" isn't the right way to check whether we need
- * to do any dissection in order to run taps, as not all taps necessarily
- * have filters, and "num_tap_filters" is the number of tap filters, not
- * the number of tap listeners; it's only the right way to check whether
- * we need to build a protocol tree when doing dissection.
*/
gboolean
have_tap_listeners(void)
@@ -529,3 +520,35 @@ have_tap_listener(int tap_id)
return FALSE;
}
+
+/*
+ * Return TRUE if we have any tap listeners with filters, FALSE otherwise.
+ */
+gboolean
+have_filtering_tap_listeners(void)
+{
+ tap_listener_t *tl;
+
+ for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+ if(tl->code)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/*
+ * Get the union of all the flags for all the tap listeners; that gives
+ * an indication of whether the protocol tree, or the columns, are
+ * required by any taps.
+ */
+guint
+union_of_tap_listener_flags(void)
+{
+ tap_listener_t *tl;
+ guint flags = 0;
+
+ for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+ flags|=tl->flags;
+ }
+ return flags;
+}
diff --git a/epan/tap.h b/epan/tap.h
index 4f4855deff..9bc66949e4 100644
--- a/epan/tap.h
+++ b/epan/tap.h
@@ -27,15 +27,15 @@
#include "epan/epan.h"
-/* With MSVC and a libwireshark.dll, we need a
- * special declaration of num_tap_filters.
- */
-WS_VAR_IMPORT int num_tap_filters;
-
typedef void (*tap_reset_cb)(void *tapdata);
-typedef int (*tap_packet_cb)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *data);
+typedef gboolean (*tap_packet_cb)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *data);
typedef void (*tap_draw_cb)(void *tapdata);
+/*
+ * Flags to indicate what a tap listener's packet routine requires.
+ */
+#define TL_REQUIRES_PROTO_TREE 0x00000001 /* full protocol tree */
+#define TL_REQUIRES_COLUMNS 0x00000002 /* columns */
extern void tap_init(void);
extern int register_tap(const char *name);
@@ -46,12 +46,14 @@ extern void tap_push_tapped_queue(epan_dissect_t *edt);
extern void reset_tap_listeners(void);
extern void draw_tap_listeners(gboolean draw_all);
extern GString *register_tap_listener(const char *tapname, void *tapdata,
- const char *fstring, tap_reset_cb tap_reset, tap_packet_cb tap_packet,
- tap_draw_cb tap_draw);
+ const char *fstring, guint flags, tap_reset_cb tap_reset,
+ tap_packet_cb tap_packet, tap_draw_cb tap_draw);
extern GString *set_tap_dfilter(void *tapdata, const char *fstring);
extern void remove_tap_listener(void *tapdata);
extern gboolean have_tap_listeners(void);
extern gboolean have_tap_listener(int tap_id);
+extern gboolean have_filtering_tap_listeners(void);
+extern guint union_of_tap_listener_flags(void);
extern const void *fetch_tapped_data(int tap_id, int idx);
#endif
diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c
index c95a07b698..84ba0a01a1 100644
--- a/epan/wslua/wslua_field.c
+++ b/epan/wslua/wslua_field.c
@@ -369,9 +369,10 @@ void lua_prime_all_fields(proto_tree* tree _U_) {
if (fake_tap) {
/* a boring tap :-) */
GString* error = register_tap_listener("frame",
- &fake_tap,
- fake_tap_filter->str,
- NULL, NULL, NULL);
+ &fake_tap,
+ fake_tap_filter->str,
+ 0, /* XXX - do we need the protocol tree or columns? */
+ NULL, NULL, NULL);
if (error) {
report_failure("while registering lua_fake_tap:\n%s",error->str);
diff --git a/epan/wslua/wslua_listener.c b/epan/wslua/wslua_listener.c
index 22548849b4..f281f42204 100644
--- a/epan/wslua/wslua_listener.c
+++ b/epan/wslua/wslua_listener.c
@@ -44,10 +44,11 @@ int tap_packet_cb_error_handler(lua_State* L) {
static gchar* last_error = NULL;
static int repeated = 0;
static int next = 2;
- const gchar* where = (lua_pinfo) ?
- ep_strdup_printf("Lua: on packet %i Error During execution of Listener Packet Callback",lua_pinfo->fd->num) :
- ep_strdup_printf("Lua: Error During execution of Listener Packet Callback") ;
-
+ const gchar* where = (lua_pinfo) ?
+
+ ep_strdup_printf("Lua: on packet %i Error During execution of Listener Packet Callback",lua_pinfo->fd->num) :
+ ep_strdup_printf("Lua: Error During execution of Listener Packet Callback") ;
+
/* show the error the 1st, 3rd, 5th, 9th, 17th, 33th... time it appears to avoid window flooding */
/* XXX the last series of identical errors won't be shown (the user however gets at least one message) */
@@ -81,7 +82,7 @@ int tap_packet_cb_error_handler(lua_State* L) {
int lua_tap_packet(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const void *data) {
Listener tap = tapdata;
int retval = 0;
-
+
if (tap->packet_ref == LUA_NOREF) return 0;
lua_settop(tap->L,0);
@@ -92,22 +93,22 @@ int lua_tap_packet(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, const
push_Pinfo(tap->L, pinfo);
push_Tvb(tap->L, edt->tvb);
- if (tap->extractor) {
- tap->extractor(tap->L,data);
- } else {
- lua_pushnil(tap->L);
- }
-
+ if (tap->extractor) {
+ tap->extractor(tap->L,data);
+ } else {
+ lua_pushnil(tap->L);
+ }
+
lua_pinfo = pinfo;
lua_tvb = edt->tvb;
lua_tree = g_malloc(sizeof(struct _wslua_treeitem));
- lua_tree->tree = edt->tree;
- lua_tree->item = NULL;
- lua_tree->expired = FALSE;
+ lua_tree->tree = edt->tree;
+ lua_tree->item = NULL;
+ lua_tree->expired = FALSE;
switch ( lua_pcall(tap->L,3,1,1) ) {
case 0:
- retval = luaL_optint(tap->L,-1,1);
+ retval = luaL_optint(tap->L,-1,1);
break;
case LUA_ERRRUN:
break;
@@ -190,18 +191,18 @@ void lua_tap_draw(void *tapdata) {
}
WSLUA_CONSTRUCTOR Listener_new(lua_State* L) {
- /* Creates a new Listener listener */
+ /* Creates a new Listener listener */
#define WSLUA_OPTARG_Listener_new_TAP 1 /* The name of this tap */
#define WSLUA_OPTARG_Listener_new_FILTER 2 /* A filter that when matches the tap.packet function gets called (use nil to be called for every packet) */
const gchar* tap_type = luaL_optstring(L,WSLUA_OPTARG_Listener_new_TAP,"frame");
const gchar* filter = luaL_optstring(L,WSLUA_OPTARG_Listener_new_FILTER,NULL);
- Listener tap;
+ Listener tap;
GString* error;
tap = g_malloc(sizeof(struct _wslua_tap));
- tap->name = g_strdup(tap_type);
+ tap->name = g_strdup(tap_type);
tap->filter = filter ? g_strdup(filter) : NULL;
tap->extractor = wslua_get_tap_extractor(tap_type);
tap->L = L;
@@ -209,13 +210,20 @@ WSLUA_CONSTRUCTOR Listener_new(lua_State* L) {
tap->draw_ref = LUA_NOREF;
tap->init_ref = LUA_NOREF;
- error = register_tap_listener(tap_type, tap, tap->filter, lua_tap_reset, lua_tap_packet, lua_tap_draw);
+ /*
+ * XXX - do all Lua taps require the protocol tree? If not, it might
+ * be useful to have a way to indicate whether any do.
+ *
+ * XXX - do any Lua taps require the columns? If so, we either need
+ * to request them for this tap, or do so if any Lua taps require them.
+ */
+ error = register_tap_listener(tap_type, tap, tap->filter, TL_REQUIRES_PROTO_TREE, lua_tap_reset, lua_tap_packet, lua_tap_draw);
if (error) {
g_free(tap->filter);
g_free(tap->name);
g_free(tap);
- /* WSLUA_ERROR(new_tap,"tap registration error"); */
+ /* WSLUA_ERROR(new_tap,"tap registration error"); */
luaL_error(L,"Error while registering tap:\n%s",error->str);
g_string_free(error,TRUE); /* XXX LEAK? */
}
@@ -225,7 +233,7 @@ WSLUA_CONSTRUCTOR Listener_new(lua_State* L) {
}
WSLUA_METHOD Listener_remove(lua_State* L) {
- /* Removes a tap listener */
+ /* Removes a tap listener */
Listener tap = checkListener(L,1);
if (!tap) return 0;
@@ -250,19 +258,19 @@ WSLUA_METAMETHOD Listener_tostring(lua_State* L) {
static int Listener_newindex(lua_State* L) {
- /* WSLUA_ATTRIBUTE Listener_packet WO A function that will be called once every packet matches the Listener listener filter.
-
- function tap.packet(pinfo,tvb,userdata) ... end
- */
- /* WSLUA_ATTRIBUTE Listener_draw WO A function that will be called once every few seconds to redraw the gui objects
- in tshark this funtion is called oly at the very end of the capture file.
-
- function tap.draw(userdata) ... end
- */
- /* WSLUA_ATTRIBUTE Listener_reset WO A function that will be called at the end of the capture run.
-
- function tap.reset(userdata) ... end
- */
+ /* WSLUA_ATTRIBUTE Listener_packet WO A function that will be called once every packet matches the Listener listener filter.
+
+ function tap.packet(pinfo,tvb,userdata) ... end
+ */
+ /* WSLUA_ATTRIBUTE Listener_draw WO A function that will be called once every few seconds to redraw the gui objects
+ in tshark this funtion is called oly at the very end of the capture file.
+
+ function tap.draw(userdata) ... end
+ */
+ /* WSLUA_ATTRIBUTE Listener_reset WO A function that will be called at the end of the capture run.
+
+ function tap.reset(userdata) ... end
+ */
Listener tap = shiftListener(L,1);
const gchar* index = lua_shiftstring(L,1);
int* refp = NULL;
@@ -305,8 +313,8 @@ static const luaL_reg Listener_meta[] = {
};
int Listener_register(lua_State* L) {
- wslua_set_tap_enums(L);
+ wslua_set_tap_enums(L);
WSLUA_REGISTER_CLASS(Listener);
- return 1;
+ return 1;
}