aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>2009-09-08 19:00:54 +0000
committerKovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>2009-09-08 19:00:54 +0000
commitde23d92163d8739d69b082f0439cc3222ad7330e (patch)
tree152350763a021e176f3d14346e8b8f81920e0763
parent1ad55d8c02a242fd879492d98e7e3e5acd7dcc0e (diff)
downloadwireshark-de23d92163d8739d69b082f0439cc3222ad7330e.tar.gz
wireshark-de23d92163d8739d69b082f0439cc3222ad7330e.tar.bz2
wireshark-de23d92163d8739d69b082f0439cc3222ad7330e.zip
Add an option to col_fill_in() to allow us to disable column expression processing. This is rarely needed. It's only needed when the user right clicks on the packet list view to generate a display filter.
svn path=/trunk/; revision=29806
-rw-r--r--epan/column-utils.c83
-rw-r--r--epan/column-utils.h14
-rw-r--r--epan/epan.c4
-rw-r--r--epan/epan.h2
-rw-r--r--file.c8
-rw-r--r--gtk/main.c2
-rw-r--r--gtk/new_packet_list.c4
-rw-r--r--gtk/packet_list_store.c4
-rw-r--r--gtk/packet_win.c2
-rw-r--r--tshark.c2
10 files changed, 79 insertions, 46 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c
index 8b6bbe80ac..3a86252e2a 100644
--- a/epan/column-utils.c
+++ b/epan/column-utils.c
@@ -1153,7 +1153,7 @@ col_set_time(column_info *cinfo, gint el, nstime_t *ts, char *fieldname)
}
static void
-col_set_addr(packet_info *pinfo, int col, address *addr, gboolean is_src)
+col_set_addr(packet_info *pinfo, int col, address *addr, gboolean is_src, gboolean fill_col_exprs)
{
struct e_in6_addr ipv6_addr;
@@ -1168,6 +1168,9 @@ col_set_addr(packet_info *pinfo, int col, address *addr, gboolean is_src)
pinfo->cinfo->col_data[col] = pinfo->cinfo->col_buf[col];
#endif
+ if (!fill_col_exprs)
+ return;
+
switch (addr->type) {
case AT_ETHER:
@@ -1226,7 +1229,7 @@ col_set_addr(packet_info *pinfo, int col, address *addr, gboolean is_src)
/* ------------------------ */
static void
-col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
+col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src, gboolean fill_col_exprs _U_)
{
guint32 port;
@@ -1235,6 +1238,8 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
else
port = pinfo->destport;
+ /* TODO: Use fill_col_exprs */
+
switch (pinfo->ptype) {
case PT_SCTP:
if (is_res)
@@ -1334,15 +1339,13 @@ col_based_on_frame_data(column_info *cinfo, gint col)
}
void
-col_fill_in_frame_data(frame_data *fd, column_info *cinfo, gint col)
+col_fill_in_frame_data(frame_data *fd, column_info *cinfo, gint col, gboolean fill_col_exprs)
{
switch (cinfo->col_fmt[col]) {
case COL_NUMBER:
g_snprintf(cinfo->col_buf[col], COL_MAX_LEN, "%u", fd->num);
cinfo->col_data[col] = cinfo->col_buf[col];
- cinfo->col_expr.col_expr[col] = "frame.number";
- g_strlcpy(cinfo->col_expr.col_expr_val[col], cinfo->col_buf[col], COL_MAX_LEN);
break;
case COL_CLS_TIME:
@@ -1351,14 +1354,13 @@ col_fill_in_frame_data(frame_data *fd, column_info *cinfo, gint col)
case COL_REL_TIME:
case COL_DELTA_TIME:
case COL_DELTA_TIME_DIS:
+ /* TODO: Pass on fill_col_exprs */
col_set_fmt_time(fd, cinfo, cinfo->col_fmt[col], col);
break;
case COL_PACKET_LENGTH:
g_snprintf(cinfo->col_buf[col], COL_MAX_LEN, "%u", fd->pkt_len);
cinfo->col_data[col] = cinfo->col_buf[col];
- cinfo->col_expr.col_expr[col] = "frame.len";
- g_strlcpy(cinfo->col_expr.col_expr_val[col], cinfo->col_buf[col], COL_MAX_LEN);
break;
case COL_CUMULATIVE_BYTES:
@@ -1369,10 +1371,41 @@ col_fill_in_frame_data(frame_data *fd, column_info *cinfo, gint col)
default:
break;
}
+
+ if (!fill_col_exprs)
+ return;
+
+ switch (cinfo->col_fmt[col]) {
+
+ case COL_NUMBER:
+ cinfo->col_expr.col_expr[col] = "frame.number";
+ g_strlcpy(cinfo->col_expr.col_expr_val[col], cinfo->col_buf[col], COL_MAX_LEN);
+ break;
+
+ case COL_CLS_TIME:
+ case COL_ABS_TIME:
+ case COL_ABS_DATE_TIME:
+ case COL_REL_TIME:
+ case COL_DELTA_TIME:
+ case COL_DELTA_TIME_DIS:
+ /* Already handled above */
+ break;
+
+ case COL_PACKET_LENGTH:
+ cinfo->col_expr.col_expr[col] = "frame.len";
+ g_strlcpy(cinfo->col_expr.col_expr_val[col], cinfo->col_buf[col], COL_MAX_LEN);
+ break;
+
+ case COL_CUMULATIVE_BYTES:
+ break;
+
+ default:
+ break;
+ }
}
void
-col_fill_in(packet_info *pinfo, gboolean fill_fd_colums)
+col_fill_in(packet_info *pinfo, gboolean fill_col_exprs, gboolean fill_fd_colums)
{
int i;
@@ -1392,79 +1425,79 @@ col_fill_in(packet_info *pinfo, gboolean fill_fd_colums)
case COL_PACKET_LENGTH:
case COL_CUMULATIVE_BYTES:
if (fill_fd_colums)
- col_fill_in_frame_data(pinfo->fd, pinfo->cinfo, i);
+ col_fill_in_frame_data(pinfo->fd, pinfo->cinfo, i, fill_col_exprs);
break;
case COL_DEF_SRC:
case COL_RES_SRC: /* COL_DEF_SRC is currently just like COL_RES_SRC */
- col_set_addr(pinfo, i, &pinfo->src, TRUE);
+ col_set_addr(pinfo, i, &pinfo->src, TRUE, fill_col_exprs);
break;
case COL_UNRES_SRC:
- col_set_addr(pinfo, i, &pinfo->src, TRUE);
+ col_set_addr(pinfo, i, &pinfo->src, TRUE, fill_col_exprs);
break;
case COL_DEF_DL_SRC:
case COL_RES_DL_SRC:
- col_set_addr(pinfo, i, &pinfo->dl_src, TRUE);
+ col_set_addr(pinfo, i, &pinfo->dl_src, TRUE, fill_col_exprs);
break;
case COL_UNRES_DL_SRC:
- col_set_addr(pinfo, i, &pinfo->dl_src, TRUE);
+ col_set_addr(pinfo, i, &pinfo->dl_src, TRUE, fill_col_exprs);
break;
case COL_DEF_NET_SRC:
case COL_RES_NET_SRC:
- col_set_addr(pinfo, i, &pinfo->net_src, TRUE);
+ col_set_addr(pinfo, i, &pinfo->net_src, TRUE, fill_col_exprs);
break;
case COL_UNRES_NET_SRC:
- col_set_addr(pinfo, i, &pinfo->net_src, TRUE);
+ col_set_addr(pinfo, i, &pinfo->net_src, TRUE, fill_col_exprs);
break;
case COL_DEF_DST:
case COL_RES_DST: /* COL_DEF_DST is currently just like COL_RES_DST */
- col_set_addr(pinfo, i, &pinfo->dst, FALSE);
+ col_set_addr(pinfo, i, &pinfo->dst, FALSE, fill_col_exprs);
break;
case COL_UNRES_DST:
- col_set_addr(pinfo, i, &pinfo->dst, FALSE);
+ col_set_addr(pinfo, i, &pinfo->dst, FALSE, fill_col_exprs);
break;
case COL_DEF_DL_DST:
case COL_RES_DL_DST:
- col_set_addr(pinfo, i, &pinfo->dl_dst, FALSE);
+ col_set_addr(pinfo, i, &pinfo->dl_dst, FALSE, fill_col_exprs);
break;
case COL_UNRES_DL_DST:
- col_set_addr(pinfo, i, &pinfo->dl_dst, FALSE);
+ col_set_addr(pinfo, i, &pinfo->dl_dst, FALSE, fill_col_exprs);
break;
case COL_DEF_NET_DST:
case COL_RES_NET_DST:
- col_set_addr(pinfo, i, &pinfo->net_dst, FALSE);
+ col_set_addr(pinfo, i, &pinfo->net_dst, FALSE, fill_col_exprs);
break;
case COL_UNRES_NET_DST:
- col_set_addr(pinfo, i, &pinfo->net_dst, FALSE);
+ col_set_addr(pinfo, i, &pinfo->net_dst, FALSE, fill_col_exprs);
break;
case COL_DEF_SRC_PORT:
case COL_RES_SRC_PORT: /* COL_DEF_SRC_PORT is currently just like COL_RES_SRC_PORT */
- col_set_port(pinfo, i, TRUE, TRUE);
+ col_set_port(pinfo, i, TRUE, TRUE, fill_col_exprs);
break;
case COL_UNRES_SRC_PORT:
- col_set_port(pinfo, i, FALSE, TRUE);
+ col_set_port(pinfo, i, FALSE, TRUE, fill_col_exprs);
break;
case COL_DEF_DST_PORT:
case COL_RES_DST_PORT: /* COL_DEF_DST_PORT is currently just like COL_RES_DST_PORT */
- col_set_port(pinfo, i, TRUE, FALSE);
+ col_set_port(pinfo, i, TRUE, FALSE, fill_col_exprs);
break;
case COL_UNRES_DST_PORT:
- col_set_port(pinfo, i, FALSE, FALSE);
+ col_set_port(pinfo, i, FALSE, FALSE, fill_col_exprs);
break;
case COL_VSAN:
diff --git a/epan/column-utils.h b/epan/column-utils.h
index 50a4cdd268..deb7135720 100644
--- a/epan/column-utils.h
+++ b/epan/column-utils.h
@@ -70,13 +70,13 @@ extern void col_set_fmt_time(frame_data *fd, column_info *cinfo, gint fmt, gint
*
* Internal, don't use this in dissectors!
*/
-extern void col_fill_in_frame_data(frame_data *fd, column_info *cinfo, gint col);
+extern void col_fill_in_frame_data(frame_data *fd, column_info *cinfo, gint col, gboolean fill_col_exprs);
/** Fill in all columns of the given packet.
*
* Internal, don't use this in dissectors!
*/
-extern void col_fill_in(packet_info *pinfo, gboolean fill_fd_colums);
+extern void col_fill_in(packet_info *pinfo, gboolean fill_col_exprs, gboolean fill_fd_colums);
/* Utility routines used by packet*.c */
@@ -87,7 +87,7 @@ extern void col_fill_in(packet_info *pinfo, gboolean fill_fd_colums);
*/
extern gboolean col_get_writable(column_info *cinfo);
-/** Set the columns writable.
+/** Set the columns writable.
*
* @param cinfo the current packet row
* @param writable TRUE if it's writable, FALSE if not
@@ -101,8 +101,8 @@ extern void col_set_writable(column_info *cinfo, gboolean writable);
*/
extern gint check_col(column_info *cinfo, gint col);
-/** Sets a fence for the current column content,
- * so this content won't be affected by further col_... function calls.
+/** Sets a fence for the current column content,
+ * so this content won't be affected by further col_... function calls.
*
* This can be useful if a protocol is more than once in a single packet,
* e.g. multiple HTTP calls in a single TCP packet.
@@ -231,11 +231,11 @@ extern void col_append_sep_fstr(column_info *cinfo, gint col, const gchar *sep,
*
* Used by multiple dissectors to set the time in the column
* COL_DELTA_CONV_TIME
- *
+ *
* @param cinfo the current packet row
* @param col the column to use, e.g. COL_INFO
* @param ts the time to set in the column
- * @param fieldname the fieldname to use for creating a filter (when
+ * @param fieldname the fieldname to use for creating a filter (when
* applying/preparing/copying as filter)
*/
extern void col_set_time(column_info *cinfo, int col,
diff --git a/epan/epan.c b/epan/epan.c
index b4d64a3dd1..5d159852d1 100644
--- a/epan/epan.c
+++ b/epan/epan.c
@@ -239,9 +239,9 @@ epan_custom_set(epan_dissect_t *edt, int field_id,
}
void
-epan_dissect_fill_in_columns(epan_dissect_t *edt, gboolean fill_fd_colums)
+epan_dissect_fill_in_columns(epan_dissect_t *edt, gboolean fill_col_exprs, gboolean fill_fd_colums)
{
col_custom_set_edt(edt, edt->pi.cinfo);
- col_fill_in(&edt->pi, fill_fd_colums);
+ col_fill_in(&edt->pi, fill_col_exprs, fill_fd_colums);
}
diff --git a/epan/epan.h b/epan/epan.h
index 82391b146d..65f3ef8436 100644
--- a/epan/epan.h
+++ b/epan/epan.h
@@ -111,7 +111,7 @@ epan_dissect_prime_dfilter(epan_dissect_t *edt, const dfilter_t *dfcode);
/* fill the dissect run output into the packet list columns */
void
-epan_dissect_fill_in_columns(epan_dissect_t *edt, gboolean fill_fd_colums);
+epan_dissect_fill_in_columns(epan_dissect_t *edt, gboolean fill_col_exprs, gboolean fill_fd_colums);
/* releases resources attached to the packet dissection. DOES NOT free the actual pointer */
void
diff --git a/file.c b/file.c
index f10920e52a..9712da84f3 100644
--- a/file.c
+++ b/file.c
@@ -1190,7 +1190,7 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf,
}
#ifndef NEW_PACKET_LIST
- epan_dissect_fill_in_columns(&edt, TRUE);
+ epan_dissect_fill_in_columns(&edt, FALSE, TRUE);
#endif
/* If we haven't yet seen the first frame, this is it.
@@ -2298,7 +2298,7 @@ print_packet(capture_file *cf, frame_data *fdata,
information. */
if (args->print_args->print_summary) {
epan_dissect_run(&edt, pseudo_header, pd, fdata, &cf->cinfo);
- epan_dissect_fill_in_columns(&edt, TRUE);
+ epan_dissect_fill_in_columns(&edt, FALSE, TRUE);
} else
epan_dissect_run(&edt, pseudo_header, pd, fdata, NULL);
@@ -2630,7 +2630,7 @@ write_psml_packet(capture_file *cf, frame_data *fdata,
proto_tree_needed = have_custom_cols(&cf->cinfo);
epan_dissect_init(&edt, proto_tree_needed, proto_tree_needed);
epan_dissect_run(&edt, pseudo_header, pd, fdata, &cf->cinfo);
- epan_dissect_fill_in_columns(&edt, TRUE);
+ epan_dissect_fill_in_columns(&edt, FALSE, TRUE);
/* Write out the information in that tree. */
proto_tree_write_psml(&edt, fh);
@@ -2704,7 +2704,7 @@ write_csv_packet(capture_file *cf, frame_data *fdata,
proto_tree_needed = have_custom_cols(&cf->cinfo);
epan_dissect_init(&edt, proto_tree_needed, proto_tree_needed);
epan_dissect_run(&edt, pseudo_header, pd, fdata, &cf->cinfo);
- epan_dissect_fill_in_columns(&edt, TRUE);
+ epan_dissect_fill_in_columns(&edt, FALSE, TRUE);
/* Write out the information in that tree. */
proto_tree_write_csv(&edt, fh);
diff --git a/gtk/main.c b/gtk/main.c
index 3cab4f65db..472e7c728c 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -526,7 +526,7 @@ get_filter_from_packet_list_row_and_column(gpointer data)
epan_dissect_run(&edt, &cfile.pseudo_header, cfile.pd, fdata,
&cfile.cinfo);
- epan_dissect_fill_in_columns(&edt, TRUE);
+ epan_dissect_fill_in_columns(&edt, TRUE, TRUE);
if (strlen(cfile.cinfo.col_expr.col_expr[column]) != 0 &&
strlen(cfile.cinfo.col_expr.col_expr_val[column]) != 0) {
diff --git a/gtk/new_packet_list.c b/gtk/new_packet_list.c
index 7e61217f77..c0f22591fb 100644
--- a/gtk/new_packet_list.c
+++ b/gtk/new_packet_list.c
@@ -642,7 +642,7 @@ show_cell_data_func(GtkTreeViewColumn *col _U_, GtkCellRenderer *renderer,
g_assert(fdata->col_text);
if (col_based_on_frame_data(&cfile.cinfo, col_num)) {
- col_fill_in_frame_data(fdata, &cfile.cinfo, col_num);
+ col_fill_in_frame_data(fdata, &cfile.cinfo, col_num, FALSE);
cell_text = cfile.cinfo.col_data[col_num];
}else
cell_text = fdata->col_text[col_num];
@@ -757,7 +757,7 @@ static gboolean
get_col_text_from_record( PacketListRecord *record, gint col_num, gchar** cell_text){
if (col_based_on_frame_data(&cfile.cinfo, col_num)) {
- col_fill_in_frame_data(record->fdata, &cfile.cinfo, col_num);
+ col_fill_in_frame_data(record->fdata, &cfile.cinfo, col_num, FALSE);
*cell_text = g_strdup(cfile.cinfo.col_data[col_num]);
}else
*cell_text = g_strdup(record->fdata->col_text[col_num]);
diff --git a/gtk/packet_list_store.c b/gtk/packet_list_store.c
index 3cf041f3b5..7fe7954830 100644
--- a/gtk/packet_list_store.c
+++ b/gtk/packet_list_store.c
@@ -1085,7 +1085,7 @@ packet_list_dissect_and_cache_record(PacketList *packet_list, PacketListRecord *
if (dissect_columns) {
/* "Stringify" non frame_data vals */
- epan_dissect_fill_in_columns(&edt, FALSE /* fill_fd_colums */);
+ epan_dissect_fill_in_columns(&edt, FALSE, FALSE /* fill_fd_colums */);
for(col = 0; col < cinfo->num_cols; ++col) {
/* Skip columns based om frame_data because we already store those. */
@@ -1216,7 +1216,7 @@ packet_list_get_widest_column_string(PacketList *packet_list, gint col)
}
}
- col_fill_in_frame_data(&fdata, &cfile.cinfo, col);
+ col_fill_in_frame_data(&fdata, &cfile.cinfo, col, FALSE);
return cfile.cinfo.col_buf[col];
}
diff --git a/gtk/packet_win.c b/gtk/packet_win.c
index e2865b7934..7a8a6a8a5b 100644
--- a/gtk/packet_win.c
+++ b/gtk/packet_win.c
@@ -141,7 +141,7 @@ void new_window_cb(GtkWidget *w _U_)
DataPtr->edt = epan_dissect_new(TRUE, TRUE);
epan_dissect_run(DataPtr->edt, &DataPtr->pseudo_header, DataPtr->pd,
DataPtr->frame, &cfile.cinfo);
- epan_dissect_fill_in_columns(DataPtr->edt, TRUE);
+ epan_dissect_fill_in_columns(DataPtr->edt, FALSE, TRUE);
/*
* Build title of window by getting column data constructed when the
diff --git a/tshark.c b/tshark.c
index 01b46b9de7..ee7a53ad05 100644
--- a/tshark.c
+++ b/tshark.c
@@ -2909,7 +2909,7 @@ print_packet(capture_file *cf, epan_dissect_t *edt)
}
} else {
/* Just fill in the columns. */
- epan_dissect_fill_in_columns(edt, TRUE);
+ epan_dissect_fill_in_columns(edt, FALSE, TRUE);
/* Now print them. */
switch (output_action) {