diff options
author | Anders Broman <anders.broman@ericsson.com> | 2011-07-04 21:43:34 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2011-07-04 21:43:34 +0000 |
commit | 2f05cf4dcfbecb970713c564fdbe8d0fa40d6ffb (patch) | |
tree | 48ae1991be5f20fc1b47e42036a09bc0a79f2717 /epan/column-utils.c | |
parent | 78d22ed8ee61de8e350b6228b07fa43f3384d489 (diff) |
From Michael Mann:
Added ability to display UTC time or UTC time with date. I liked having the
difference between UTC and local time, not just setting local=UTC.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2629
svn path=/trunk/; revision=37898
Diffstat (limited to 'epan/column-utils.c')
-rw-r--r-- | epan/column-utils.c | 80 |
1 files changed, 71 insertions, 9 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c index ddd2ffa7c2..e3397aa9a4 100644 --- a/epan/column-utils.c +++ b/epan/column-utils.c @@ -613,19 +613,24 @@ col_has_time_fmt(column_info *cinfo, const gint col) return ((cinfo->fmt_matx[col][COL_CLS_TIME]) || (cinfo->fmt_matx[col][COL_ABS_TIME]) || (cinfo->fmt_matx[col][COL_ABS_DATE_TIME]) || + (cinfo->fmt_matx[col][COL_UTC_TIME]) || + (cinfo->fmt_matx[col][COL_UTC_DATE_TIME]) || (cinfo->fmt_matx[col][COL_REL_TIME]) || (cinfo->fmt_matx[col][COL_DELTA_TIME]) || (cinfo->fmt_matx[col][COL_DELTA_TIME_DIS])); } static gint -set_abs_date_time(const frame_data *fd, gchar *buf) +set_abs_date_time(const frame_data *fd, gchar *buf, gboolean local) { struct tm *tmp; time_t then; then = fd->abs_ts.secs; - tmp = localtime(&then); + if (local) + tmp = localtime(&then); + else + tmp = gmtime(&then); if (tmp != NULL) { switch(timestamp_get_precision()) { case TS_PREC_FIXED_SEC: @@ -705,7 +710,17 @@ set_abs_date_time(const frame_data *fd, gchar *buf) static void col_set_abs_date_time(const frame_data *fd, column_info *cinfo, const int col) { - if (set_abs_date_time(fd, cinfo->col_buf[col])) { + if (set_abs_date_time(fd, cinfo->col_buf[col], TRUE)) { + cinfo->col_expr.col_expr[col] = "frame.time"; + g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN); + } + cinfo->col_data[col] = cinfo->col_buf[col]; +} + +static void +col_set_utc_date_time(const frame_data *fd, column_info *cinfo, const int col) +{ + if (set_abs_date_time(fd, cinfo->col_buf[col], FALSE)) { cinfo->col_expr.col_expr[col] = "frame.time"; g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN); } @@ -969,13 +984,16 @@ col_set_delta_time_dis(const frame_data *fd, column_info *cinfo, const int col) } static gint -set_abs_time(const frame_data *fd, gchar *buf) +set_abs_time(const frame_data *fd, gchar *buf, gboolean local) { struct tm *tmp; time_t then; then = fd->abs_ts.secs; - tmp = localtime(&then); + if (local) + tmp = localtime(&then); + else + tmp = gmtime(&then); if (tmp != NULL) { switch(timestamp_get_precision()) { case TS_PREC_FIXED_SEC: @@ -1038,7 +1056,17 @@ set_abs_time(const frame_data *fd, gchar *buf) static void col_set_abs_time(const frame_data *fd, column_info *cinfo, const int col) { - if (set_abs_time(fd, cinfo->col_buf[col])) { + if (set_abs_time(fd, cinfo->col_buf[col], TRUE)) { + cinfo->col_expr.col_expr[col] = "frame.time"; + g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN); + } + cinfo->col_data[col] = cinfo->col_buf[col]; +} + +static void +col_set_utc_time(const frame_data *fd, column_info *cinfo, const int col) +{ + if (set_abs_time(fd, cinfo->col_buf[col], FALSE)) { cinfo->col_expr.col_expr[col] = "frame.time"; g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN); } @@ -1169,6 +1197,14 @@ col_set_cls_time(const frame_data *fd, column_info *cinfo, const gint col) col_set_epoch_time(fd, cinfo, col); break; + case TS_UTC: + col_set_utc_time(fd, cinfo, col); + break; + + case TS_UTC_WITH_DATE: + col_set_utc_date_time(fd, cinfo, col); + break; + case TS_NOT_SET: /* code is missing for this case, but I don't know which [jmayer20051219] */ g_assert_not_reached(); @@ -1213,6 +1249,14 @@ col_set_fmt_time(const frame_data *fd, column_info *cinfo, const gint fmt, const col_set_delta_time_dis(fd, cinfo, col); break; + case TS_UTC: + col_set_utc_time(fd, cinfo, col); + break; + + case TS_UTC_WITH_DATE: + col_set_utc_date_time(fd, cinfo, col); + break; + default: g_assert_not_reached(); break; @@ -1456,6 +1500,8 @@ col_based_on_frame_data(column_info *cinfo, const gint col) case COL_CLS_TIME: case COL_ABS_TIME: case COL_ABS_DATE_TIME: + case COL_UTC_TIME: + case COL_UTC_DATE_TIME: case COL_REL_TIME: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: @@ -1481,6 +1527,8 @@ col_fill_in_frame_data(const frame_data *fd, column_info *cinfo, const gint col, case COL_CLS_TIME: case COL_ABS_TIME: case COL_ABS_DATE_TIME: + case COL_UTC_TIME: + case COL_UTC_DATE_TIME: case COL_REL_TIME: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: @@ -1515,6 +1563,8 @@ col_fill_in_frame_data(const frame_data *fd, column_info *cinfo, const gint col, case COL_CLS_TIME: case COL_ABS_TIME: case COL_ABS_DATE_TIME: + case COL_UTC_TIME: + case COL_UTC_DATE_TIME: case COL_REL_TIME: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: @@ -1549,6 +1599,8 @@ col_fill_in(packet_info *pinfo, const gboolean fill_col_exprs, const gboolean fi case COL_CLS_TIME: case COL_ABS_TIME: case COL_ABS_DATE_TIME: + case COL_UTC_TIME: + case COL_UTC_DATE_TIME: case COL_REL_TIME: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: @@ -1671,6 +1723,8 @@ col_fill_in_error(column_info *cinfo, frame_data *fdata, const gboolean fill_col case COL_CLS_TIME: case COL_ABS_TIME: case COL_ABS_DATE_TIME: + case COL_UTC_TIME: + case COL_UTC_DATE_TIME: case COL_REL_TIME: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: @@ -1741,7 +1795,9 @@ col_fill_fdata(packet_info *pinfo) case COL_CUMULATIVE_BYTES: /* fd->cum_bytes */ case COL_CLS_TIME: case COL_ABS_TIME: - case COL_ABS_DATE_TIME: /* from fd structures */ + case COL_ABS_DATE_TIME: + case COL_UTC_TIME: + case COL_UTC_DATE_TIME: /* from fd structures */ case COL_REL_TIME: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: @@ -1879,10 +1935,16 @@ gchar *ptr; set_cls_time(fd, buf); break; case COL_ABS_TIME: - set_abs_time(fd, buf); + set_abs_time(fd, buf, TRUE); + break; + case COL_UTC_TIME: + set_abs_time(fd, buf, FALSE); break; case COL_ABS_DATE_TIME: - set_abs_date_time(fd, buf); + set_abs_date_time(fd, buf, TRUE); + break; + case COL_UTC_DATE_TIME: + set_abs_date_time(fd, buf, FALSE); break; case COL_REL_TIME: set_rel_time(fd, buf); |