diff options
author | Stephen Fisher <steve@stephen-fisher.com> | 2007-03-23 18:08:17 +0000 |
---|---|---|
committer | Stephen Fisher <steve@stephen-fisher.com> | 2007-03-23 18:08:17 +0000 |
commit | 6d8d2854c8cf998605e041987610986d09375c6a (patch) | |
tree | 49c7db39b4c44d02429daa16149f2ba63678af4e /epan/column-utils.c | |
parent | 62f88a4a04d8e300ff108f6164e9016e8cdcc9c3 (diff) | |
download | wireshark-6d8d2854c8cf998605e041987610986d09375c6a.tar.gz wireshark-6d8d2854c8cf998605e041987610986d09375c6a.tar.bz2 wireshark-6d8d2854c8cf998605e041987610986d09375c6a.zip |
From Sake Blok:
Fix for bug #491: Unexpected frame.time_delta behavior
This patch ... fixes bug 491. It does this by changing the
behaviour of the frame.time_delta field so it reflects the delta
time between captured packets (tshark already did this). To keep
the delta time between displayed packets, the field
frame.time_delta_displayed is created.
svn path=/trunk/; revision=21154
Diffstat (limited to 'epan/column-utils.c')
-rw-r--r-- | epan/column-utils.c | 68 |
1 files changed, 61 insertions, 7 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c index 3aa5acd81a..2793119609 100644 --- a/epan/column-utils.c +++ b/epan/column-utils.c @@ -666,32 +666,32 @@ col_set_delta_time(frame_data *fd, column_info *cinfo, int col) case(TS_PREC_FIXED_SEC): case(TS_PREC_AUTO_SEC): display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, - (gint32) fd->del_ts.secs, fd->del_ts.nsecs / 1000000000, SECS); + (gint32) fd->del_cap_ts.secs, fd->del_cap_ts.nsecs / 1000000000, SECS); break; case(TS_PREC_FIXED_DSEC): case(TS_PREC_AUTO_DSEC): display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, - (gint32) fd->del_ts.secs, fd->del_ts.nsecs / 100000000, DSECS); + (gint32) fd->del_cap_ts.secs, fd->del_cap_ts.nsecs / 100000000, DSECS); break; case(TS_PREC_FIXED_CSEC): case(TS_PREC_AUTO_CSEC): display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, - (gint32) fd->del_ts.secs, fd->del_ts.nsecs / 10000000, CSECS); + (gint32) fd->del_cap_ts.secs, fd->del_cap_ts.nsecs / 10000000, CSECS); break; case(TS_PREC_FIXED_MSEC): case(TS_PREC_AUTO_MSEC): display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, - (gint32) fd->del_ts.secs, fd->del_ts.nsecs / 1000000, MSECS); + (gint32) fd->del_cap_ts.secs, fd->del_cap_ts.nsecs / 1000000, MSECS); break; case(TS_PREC_FIXED_USEC): case(TS_PREC_AUTO_USEC): display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, - (gint32) fd->del_ts.secs, fd->del_ts.nsecs / 1000, USECS); + (gint32) fd->del_cap_ts.secs, fd->del_cap_ts.nsecs / 1000, USECS); break; case(TS_PREC_FIXED_NSEC): case(TS_PREC_AUTO_NSEC): display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, - (gint32) fd->del_ts.secs, fd->del_ts.nsecs, NSECS); + (gint32) fd->del_cap_ts.secs, fd->del_cap_ts.nsecs, NSECS); break; default: g_assert_not_reached(); @@ -701,6 +701,50 @@ col_set_delta_time(frame_data *fd, column_info *cinfo, int col) strcpy(cinfo->col_expr_val[col],cinfo->col_buf[col]); } +static void +col_set_delta_time_dis(frame_data *fd, column_info *cinfo, int col) +{ + COL_CHECK_REF_TIME(fd, cinfo, col); + + switch(timestamp_get_precision()) { + case(TS_PREC_FIXED_SEC): + case(TS_PREC_AUTO_SEC): + display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, + fd->del_dis_ts.secs, fd->del_dis_ts.nsecs / 1000000000, SECS); + break; + case(TS_PREC_FIXED_DSEC): + case(TS_PREC_AUTO_DSEC): + display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, + fd->del_dis_ts.secs, fd->del_dis_ts.nsecs / 100000000, DSECS); + break; + case(TS_PREC_FIXED_CSEC): + case(TS_PREC_AUTO_CSEC): + display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, + fd->del_dis_ts.secs, fd->del_dis_ts.nsecs / 10000000, CSECS); + break; + case(TS_PREC_FIXED_MSEC): + case(TS_PREC_AUTO_MSEC): + display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, + fd->del_dis_ts.secs, fd->del_dis_ts.nsecs / 1000000, MSECS); + break; + case(TS_PREC_FIXED_USEC): + case(TS_PREC_AUTO_USEC): + display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, + fd->del_dis_ts.secs, fd->del_dis_ts.nsecs / 1000, USECS); + break; + case(TS_PREC_FIXED_NSEC): + case(TS_PREC_AUTO_NSEC): + display_signed_time(cinfo->col_buf[col], COL_MAX_LEN, + fd->del_dis_ts.secs, fd->del_dis_ts.nsecs, NSECS); + break; + default: + g_assert_not_reached(); + } + cinfo->col_data[col] = cinfo->col_buf[col]; + strcpy(cinfo->col_expr[col],"frame.time_delta_displayed"); + strcpy(cinfo->col_expr_val[col],cinfo->col_buf[col]); +} + /* To do: Add check_col checks to the col_add* routines */ static void @@ -849,10 +893,16 @@ col_set_cls_time(frame_data *fd, column_info *cinfo, gint col) case TS_DELTA: col_set_delta_time(fd, cinfo, col); break; + + case TS_DELTA_DIS: + col_set_delta_time_dis(fd, cinfo, col); + break; + case TS_EPOCH: col_set_epoch_time(fd, cinfo, col); break; - case TS_NOT_SET: + + case TS_NOT_SET: /* code is missing for this case, but I don't know which [jmayer20051219] */ g_assert(FALSE); break; @@ -1151,6 +1201,10 @@ col_fill_in(packet_info *pinfo) col_set_delta_time(pinfo->fd, pinfo->cinfo, i); break; + case COL_DELTA_TIME_DIS: + col_set_delta_time_dis(pinfo->fd, pinfo->cinfo, i); + 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, TRUE); |