aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>2009-10-02 19:55:43 +0000
committerstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>2009-10-02 19:55:43 +0000
commit177926996c4e2096e12636fb95e471271849969f (patch)
tree781c5862e40fa6d97ca5aff45cff83fa279ca233
parentc22c2a4ea71fb3c3b3f670fa5c020de3aa2321d6 (diff)
Prime interesting fields when selecting a package, so Lua's ProtoField
can extract the field value correctly. This fixes bug 4058. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@30252 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--epan/libwireshark.def1
-rw-r--r--epan/tap.c29
-rw-r--r--epan/tap.h1
-rw-r--r--file.c1
4 files changed, 23 insertions, 9 deletions
diff --git a/epan/libwireshark.def b/epan/libwireshark.def
index 7c766e5236..fa4811e6c3 100644
--- a/epan/libwireshark.def
+++ b/epan/libwireshark.def
@@ -928,6 +928,7 @@ t38_T30_indicator_vals DATA
t38_add_address
T_h323_message_body_vals DATA
tap_push_tapped_queue
+tap_build_interesting
tap_queue_init
tap_queue_packet
tcp_dissect_pdus
diff --git a/epan/tap.c b/epan/tap.c
index efbf9ddbc4..c0a06c8a33 100644
--- a/epan/tap.c
+++ b/epan/tap.c
@@ -192,6 +192,25 @@ tap_queue_packet(int tap_id, packet_info *pinfo, const void *tap_specific_data)
/* **********************************************************************
* Functions used by file.c to drive the tap subsystem
* ********************************************************************** */
+
+void tap_build_interesting (epan_dissect_t *edt)
+{
+ tap_listener_t *tl;
+
+ /* nothing to do, just return */
+ if(!tap_listener_queue){
+ return;
+ }
+
+ /* loop over all tap listeners and build the list of all
+ interesting hf_fields */
+ for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+ if(tl->code){
+ epan_dissect_prime_dfilter(edt, tl->code);
+ }
+ }
+}
+
/* This function is used to delete/initialize the tap queue and prime an
epan_dissect_t with all the filters for tap listeners.
To free the tap queue, we just prepend the used queue to the free queue.
@@ -199,8 +218,6 @@ tap_queue_packet(int tap_id, packet_info *pinfo, const void *tap_specific_data)
void
tap_queue_init(epan_dissect_t *edt)
{
- tap_listener_t *tl;
-
/* nothing to do, just return */
if(!tap_listener_queue){
return;
@@ -210,13 +227,7 @@ tap_queue_init(epan_dissect_t *edt)
tap_packet_index=0;
- /* loop over all tap listeners and build the list of all
- interesting hf_fields */
- for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
- if(tl->code){
- epan_dissect_prime_dfilter(edt, tl->code);
- }
- }
+ tap_build_interesting (edt);
}
/* this function is called after a packet has been fully dissected to push the tapped
diff --git a/epan/tap.h b/epan/tap.h
index 942caed775..aa3e7814f0 100644
--- a/epan/tap.h
+++ b/epan/tap.h
@@ -41,6 +41,7 @@ extern void tap_init(void);
extern int register_tap(const char *name);
extern int find_tap_id(const char *name);
extern void tap_queue_packet(int tap_id, packet_info *pinfo, const void *tap_specific_data);
+extern void tap_build_interesting(epan_dissect_t *edt);
extern void tap_queue_init(epan_dissect_t *edt);
extern void tap_push_tapped_queue(epan_dissect_t *edt);
extern void reset_tap_listeners(void);
diff --git a/file.c b/file.c
index 343fec8d8f..18275993f5 100644
--- a/file.c
+++ b/file.c
@@ -4056,6 +4056,7 @@ cf_select_packet(capture_file *cf, int row)
/* We don't need the columns here. */
cf->edt = epan_dissect_new(TRUE, TRUE);
+ tap_build_interesting(cf->edt);
epan_dissect_run(cf->edt, &cf->pseudo_header, cf->pd, cf->current_frame,
NULL);