aboutsummaryrefslogtreecommitdiffstats
path: root/epan/column-utils.c
diff options
context:
space:
mode:
authorStephen Fisher <steve@stephen-fisher.com>2007-03-23 18:08:17 +0000
committerStephen Fisher <steve@stephen-fisher.com>2007-03-23 18:08:17 +0000
commit6d8d2854c8cf998605e041987610986d09375c6a (patch)
tree49c7db39b4c44d02429daa16149f2ba63678af4e /epan/column-utils.c
parent62f88a4a04d8e300ff108f6164e9016e8cdcc9c3 (diff)
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.c68
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);