forked from osmocom/wireshark
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
This commit is contained in:
parent
1ad55d8c02
commit
de23d92163
|
@ -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:
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
8
file.c
8
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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue