aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
Diffstat (limited to 'epan')
-rw-r--r--epan/column-utils.c295
-rw-r--r--epan/column.c35
-rw-r--r--epan/frame_data.c1
-rw-r--r--epan/frame_data.h1
-rw-r--r--epan/timestamp.c2
-rw-r--r--epan/timestamp.h20
-rw-r--r--epan/wslua/wslua_file.c12
7 files changed, 227 insertions, 139 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c
index f27e4702c4..8721dbfb19 100644
--- a/epan/column-utils.c
+++ b/epan/column-utils.c
@@ -757,6 +757,7 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
{
struct tm *tmp;
time_t then;
+ int tsprecision;
if (fd->flags.has_ts) {
then = fd->abs_ts.secs;
@@ -769,7 +770,31 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
if (tmp != NULL) {
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
+ tsprecision = WTAP_TSPREC_SEC;
+ break;
+ case TS_PREC_FIXED_DSEC:
+ tsprecision = WTAP_TSPREC_DSEC;
+ break;
+ case TS_PREC_FIXED_CSEC:
+ tsprecision = WTAP_TSPREC_CSEC;
+ break;
+ case TS_PREC_FIXED_MSEC:
+ tsprecision = WTAP_TSPREC_MSEC;
+ break;
+ case TS_PREC_FIXED_USEC:
+ tsprecision = WTAP_TSPREC_USEC;
+ break;
+ case TS_PREC_FIXED_NSEC:
+ tsprecision = WTAP_TSPREC_NSEC;
+ break;
+ case TS_PREC_AUTO:
+ tsprecision = fd->tsprec;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ switch (tsprecision) {
+ case WTAP_TSPREC_SEC:
g_snprintf(buf, COL_MAX_LEN,"%04d-%02d-%02d %02d:%02d:%02d",
tmp->tm_year + 1900,
tmp->tm_mon + 1,
@@ -778,8 +803,7 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_min,
tmp->tm_sec);
break;
- case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
+ case WTAP_TSPREC_DSEC:
g_snprintf(buf, COL_MAX_LEN,"%04d-%02d-%02d %02d:%02d:%02d.%01d",
tmp->tm_year + 1900,
tmp->tm_mon + 1,
@@ -789,8 +813,7 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 100000000);
break;
- case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
+ case WTAP_TSPREC_CSEC:
g_snprintf(buf, COL_MAX_LEN,"%04d-%02d-%02d %02d:%02d:%02d.%02d",
tmp->tm_year + 1900,
tmp->tm_mon + 1,
@@ -800,8 +823,7 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 10000000);
break;
- case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
+ case WTAP_TSPREC_MSEC:
g_snprintf(buf, COL_MAX_LEN, "%04d-%02d-%02d %02d:%02d:%02d.%03d",
tmp->tm_year + 1900,
tmp->tm_mon + 1,
@@ -811,8 +833,7 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 1000000);
break;
- case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
+ case WTAP_TSPREC_USEC:
g_snprintf(buf, COL_MAX_LEN, "%04d-%02d-%02d %02d:%02d:%02d.%06d",
tmp->tm_year + 1900,
tmp->tm_mon + 1,
@@ -822,8 +843,7 @@ set_abs_ymd_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 1000);
break;
- case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case WTAP_TSPREC_NSEC:
g_snprintf(buf, COL_MAX_LEN, "%04d-%02d-%02d %02d:%02d:%02d.%09d",
tmp->tm_year + 1900,
tmp->tm_mon + 1,
@@ -866,6 +886,7 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
{
struct tm *tmp;
time_t then;
+ int tsprecision;
if (fd->flags.has_ts) {
then = fd->abs_ts.secs;
@@ -878,7 +899,31 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
if (tmp != NULL) {
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
+ tsprecision = WTAP_TSPREC_SEC;
+ break;
+ case TS_PREC_FIXED_DSEC:
+ tsprecision = WTAP_TSPREC_DSEC;
+ break;
+ case TS_PREC_FIXED_CSEC:
+ tsprecision = WTAP_TSPREC_CSEC;
+ break;
+ case TS_PREC_FIXED_MSEC:
+ tsprecision = WTAP_TSPREC_MSEC;
+ break;
+ case TS_PREC_FIXED_USEC:
+ tsprecision = WTAP_TSPREC_USEC;
+ break;
+ case TS_PREC_FIXED_NSEC:
+ tsprecision = WTAP_TSPREC_NSEC;
+ break;
+ case TS_PREC_AUTO:
+ tsprecision = fd->tsprec;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ switch (tsprecision) {
+ case WTAP_TSPREC_SEC:
g_snprintf(buf, COL_MAX_LEN,"%04d/%03d %02d:%02d:%02d",
tmp->tm_year + 1900,
tmp->tm_yday + 1,
@@ -886,8 +931,7 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_min,
tmp->tm_sec);
break;
- case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
+ case WTAP_TSPREC_DSEC:
g_snprintf(buf, COL_MAX_LEN,"%04d/%03d %02d:%02d:%02d.%01d",
tmp->tm_year + 1900,
tmp->tm_yday + 1,
@@ -896,8 +940,7 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 100000000);
break;
- case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
+ case WTAP_TSPREC_CSEC:
g_snprintf(buf, COL_MAX_LEN,"%04d/%03d %02d:%02d:%02d.%02d",
tmp->tm_year + 1900,
tmp->tm_yday + 1,
@@ -906,8 +949,7 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 10000000);
break;
- case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
+ case WTAP_TSPREC_MSEC:
g_snprintf(buf, COL_MAX_LEN, "%04d/%03d %02d:%02d:%02d.%03d",
tmp->tm_year + 1900,
tmp->tm_yday + 1,
@@ -916,8 +958,7 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 1000000);
break;
- case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
+ case WTAP_TSPREC_USEC:
g_snprintf(buf, COL_MAX_LEN, "%04d/%03d %02d:%02d:%02d.%06d",
tmp->tm_year + 1900,
tmp->tm_yday + 1,
@@ -926,8 +967,7 @@ set_abs_ydoy_time(const frame_data *fd, gchar *buf, gboolean local)
tmp->tm_sec,
fd->abs_ts.nsecs / 1000);
break;
- case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case WTAP_TSPREC_NSEC:
g_snprintf(buf, COL_MAX_LEN, "%04d/%03d %02d:%02d:%02d.%09d",
tmp->tm_year + 1900,
tmp->tm_yday + 1,
@@ -965,36 +1005,57 @@ col_set_utc_ydoy_time(const frame_data *fd, column_info *cinfo, const int col)
}
static void
-set_time_seconds(const nstime_t *ts, gchar *buf)
+set_time_seconds(const frame_data *fd, const nstime_t *ts, gchar *buf)
{
+ int tsprecision;
+
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
+ tsprecision = WTAP_TSPREC_SEC;
+ break;
+ case TS_PREC_FIXED_DSEC:
+ tsprecision = WTAP_TSPREC_DSEC;
+ break;
+ case TS_PREC_FIXED_CSEC:
+ tsprecision = WTAP_TSPREC_CSEC;
+ break;
+ case TS_PREC_FIXED_MSEC:
+ tsprecision = WTAP_TSPREC_MSEC;
+ break;
+ case TS_PREC_FIXED_USEC:
+ tsprecision = WTAP_TSPREC_USEC;
+ break;
+ case TS_PREC_FIXED_NSEC:
+ tsprecision = WTAP_TSPREC_NSEC;
+ break;
+ case TS_PREC_AUTO:
+ tsprecision = fd->tsprec;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ switch (tsprecision) {
+ case WTAP_TSPREC_SEC:
display_signed_time(buf, COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 1000000000, TO_STR_TIME_RES_T_SECS);
break;
- case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
+ case WTAP_TSPREC_DSEC:
display_signed_time(buf, COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 100000000, TO_STR_TIME_RES_T_DSECS);
break;
- case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
+ case WTAP_TSPREC_CSEC:
display_signed_time(buf, COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 10000000, TO_STR_TIME_RES_T_CSECS);
break;
- case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
+ case WTAP_TSPREC_MSEC:
display_signed_time(buf, COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 1000000, TO_STR_TIME_RES_T_MSECS);
break;
- case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
+ case WTAP_TSPREC_USEC:
display_signed_time(buf, COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 1000, TO_STR_TIME_RES_T_USECS);
break;
- case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case WTAP_TSPREC_NSEC:
display_signed_time(buf, COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs, TO_STR_TIME_RES_T_NSECS);
break;
@@ -1004,11 +1065,12 @@ set_time_seconds(const nstime_t *ts, gchar *buf)
}
static void
-set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
+set_time_hour_min_sec(const frame_data *fd, const nstime_t *ts, gchar *buf)
{
time_t secs = ts->secs;
long nsecs = (long) ts->nsecs;
gboolean negative = FALSE;
+ int tsprecision;
if (secs < 0) {
secs = -secs;
@@ -1021,7 +1083,31 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
+ tsprecision = WTAP_TSPREC_SEC;
+ break;
+ case TS_PREC_FIXED_DSEC:
+ tsprecision = WTAP_TSPREC_DSEC;
+ break;
+ case TS_PREC_FIXED_CSEC:
+ tsprecision = WTAP_TSPREC_CSEC;
+ break;
+ case TS_PREC_FIXED_MSEC:
+ tsprecision = WTAP_TSPREC_MSEC;
+ break;
+ case TS_PREC_FIXED_USEC:
+ tsprecision = WTAP_TSPREC_USEC;
+ break;
+ case TS_PREC_FIXED_NSEC:
+ tsprecision = WTAP_TSPREC_NSEC;
+ break;
+ case TS_PREC_AUTO:
+ tsprecision = fd->tsprec;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ switch (tsprecision) {
+ case WTAP_TSPREC_SEC:
if (secs >= (60*60)) {
g_snprintf(buf, COL_MAX_LEN, "%s%dh %2dm %2ds",
negative ? "- " : "",
@@ -1039,8 +1125,7 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
(gint32) secs);
}
break;
- case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
+ case WTAP_TSPREC_DSEC:
if (secs >= (60*60)) {
g_snprintf(buf, COL_MAX_LEN, "%s%dh %2dm %2d.%01lds",
negative ? "- " : "",
@@ -1061,8 +1146,7 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
nsecs / 100000000);
}
break;
- case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
+ case WTAP_TSPREC_CSEC:
if (secs >= (60*60)) {
g_snprintf(buf, COL_MAX_LEN, "%s%dh %2dm %2d.%02lds",
negative ? "- " : "",
@@ -1083,8 +1167,7 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
nsecs / 10000000);
}
break;
- case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
+ case WTAP_TSPREC_MSEC:
if (secs >= (60*60)) {
g_snprintf(buf, COL_MAX_LEN, "%s%dh %2dm %2d.%03lds",
negative ? "- " : "",
@@ -1105,8 +1188,7 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
nsecs / 1000000);
}
break;
- case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
+ case WTAP_TSPREC_USEC:
if (secs >= (60*60)) {
g_snprintf(buf, COL_MAX_LEN, "%s%dh %2dm %2d.%06lds",
negative ? "- " : "",
@@ -1127,8 +1209,7 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
nsecs / 1000);
}
break;
- case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case WTAP_TSPREC_NSEC:
if (secs >= (60*60)) {
g_snprintf(buf, COL_MAX_LEN, "%s%dh %2dm %2d.%09lds",
negative ? "- " : "",
@@ -1168,14 +1249,14 @@ col_set_rel_time(const frame_data *fd, column_info *cinfo, const int col)
switch (timestamp_get_seconds_type()) {
case TS_SECONDS_DEFAULT:
- set_time_seconds(&del_rel_ts, cinfo->col_buf[col]);
+ set_time_seconds(fd, &del_rel_ts, cinfo->col_buf[col]);
cinfo->col_expr.col_expr[col] = "frame.time_relative";
g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN);
break;
case TS_SECONDS_HOUR_MIN_SEC:
- set_time_hour_min_sec(&del_rel_ts, cinfo->col_buf[col]);
+ set_time_hour_min_sec(fd, &del_rel_ts, cinfo->col_buf[col]);
cinfo->col_expr.col_expr[col] = "frame.time_relative";
- set_time_seconds(&del_rel_ts, cinfo->col_expr.col_expr_val[col]);
+ set_time_seconds(fd, &del_rel_ts, cinfo->col_expr.col_expr_val[col]);
break;
default:
g_assert_not_reached();
@@ -1192,14 +1273,14 @@ col_set_delta_time(const frame_data *fd, column_info *cinfo, const int col)
switch (timestamp_get_seconds_type()) {
case TS_SECONDS_DEFAULT:
- set_time_seconds(&del_cap_ts, cinfo->col_buf[col]);
+ set_time_seconds(fd, &del_cap_ts, cinfo->col_buf[col]);
cinfo->col_expr.col_expr[col] = "frame.time_delta";
g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN);
break;
case TS_SECONDS_HOUR_MIN_SEC:
- set_time_hour_min_sec(&del_cap_ts, cinfo->col_buf[col]);
+ set_time_hour_min_sec(fd, &del_cap_ts, cinfo->col_buf[col]);
cinfo->col_expr.col_expr[col] = "frame.time_delta";
- set_time_seconds(&del_cap_ts, cinfo->col_expr.col_expr_val[col]);
+ set_time_seconds(fd, &del_cap_ts, cinfo->col_expr.col_expr_val[col]);
break;
default:
g_assert_not_reached();
@@ -1222,14 +1303,14 @@ col_set_delta_time_dis(const frame_data *fd, column_info *cinfo, const int col)
switch (timestamp_get_seconds_type()) {
case TS_SECONDS_DEFAULT:
- set_time_seconds(&del_dis_ts, cinfo->col_buf[col]);
+ set_time_seconds(fd, &del_dis_ts, cinfo->col_buf[col]);
cinfo->col_expr.col_expr[col] = "frame.time_delta_displayed";
g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN);
break;
case TS_SECONDS_HOUR_MIN_SEC:
- set_time_hour_min_sec(&del_dis_ts, cinfo->col_buf[col]);
+ set_time_hour_min_sec(fd, &del_dis_ts, cinfo->col_buf[col]);
cinfo->col_expr.col_expr[col] = "frame.time_delta_displayed";
- set_time_seconds(&del_dis_ts, cinfo->col_expr.col_expr_val[col]);
+ set_time_seconds(fd, &del_dis_ts, cinfo->col_expr.col_expr_val[col]);
break;
default:
g_assert_not_reached();
@@ -1243,6 +1324,7 @@ set_abs_time(const frame_data *fd, gchar *buf, gboolean local)
{
struct tm *tmp;
time_t then;
+ int tsprecision;
if (fd->flags.has_ts) {
then = fd->abs_ts.secs;
@@ -1255,46 +1337,65 @@ set_abs_time(const frame_data *fd, gchar *buf, gboolean local)
if (tmp != NULL) {
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
+ tsprecision = WTAP_TSPREC_SEC;
+ break;
+ case TS_PREC_FIXED_DSEC:
+ tsprecision = WTAP_TSPREC_DSEC;
+ break;
+ case TS_PREC_FIXED_CSEC:
+ tsprecision = WTAP_TSPREC_CSEC;
+ break;
+ case TS_PREC_FIXED_MSEC:
+ tsprecision = WTAP_TSPREC_MSEC;
+ break;
+ case TS_PREC_FIXED_USEC:
+ tsprecision = WTAP_TSPREC_USEC;
+ break;
+ case TS_PREC_FIXED_NSEC:
+ tsprecision = WTAP_TSPREC_NSEC;
+ break;
+ case TS_PREC_AUTO:
+ tsprecision = fd->tsprec;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ switch (tsprecision) {
+ case WTAP_TSPREC_SEC:
g_snprintf(buf, COL_MAX_LEN,"%02d:%02d:%02d",
tmp->tm_hour,
tmp->tm_min,
tmp->tm_sec);
break;
- case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
+ case WTAP_TSPREC_DSEC:
g_snprintf(buf, COL_MAX_LEN,"%02d:%02d:%02d.%01d",
tmp->tm_hour,
tmp->tm_min,
tmp->tm_sec,
fd->abs_ts.nsecs / 100000000);
break;
- case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
+ case WTAP_TSPREC_CSEC:
g_snprintf(buf, COL_MAX_LEN,"%02d:%02d:%02d.%02d",
tmp->tm_hour,
tmp->tm_min,
tmp->tm_sec,
fd->abs_ts.nsecs / 10000000);
break;
- case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
+ case WTAP_TSPREC_MSEC:
g_snprintf(buf, COL_MAX_LEN,"%02d:%02d:%02d.%03d",
tmp->tm_hour,
tmp->tm_min,
tmp->tm_sec,
fd->abs_ts.nsecs / 1000000);
break;
- case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
+ case WTAP_TSPREC_USEC:
g_snprintf(buf, COL_MAX_LEN,"%02d:%02d:%02d.%06d",
tmp->tm_hour,
tmp->tm_min,
tmp->tm_sec,
fd->abs_ts.nsecs / 1000);
break;
- case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case WTAP_TSPREC_NSEC:
g_snprintf(buf, COL_MAX_LEN, "%02d:%02d:%02d.%09d",
tmp->tm_hour,
tmp->tm_min,
@@ -1333,38 +1434,59 @@ col_set_utc_time(const frame_data *fd, column_info *cinfo, const int col)
static gboolean
set_epoch_time(const frame_data *fd, gchar *buf)
{
+ int tsprecision;
+
if (!fd->flags.has_ts) {
buf[0] = '\0';
return FALSE;
}
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
+ tsprecision = WTAP_TSPREC_SEC;
+ break;
+ case TS_PREC_FIXED_DSEC:
+ tsprecision = WTAP_TSPREC_DSEC;
+ break;
+ case TS_PREC_FIXED_CSEC:
+ tsprecision = WTAP_TSPREC_CSEC;
+ break;
+ case TS_PREC_FIXED_MSEC:
+ tsprecision = WTAP_TSPREC_MSEC;
+ break;
+ case TS_PREC_FIXED_USEC:
+ tsprecision = WTAP_TSPREC_USEC;
+ break;
+ case TS_PREC_FIXED_NSEC:
+ tsprecision = WTAP_TSPREC_NSEC;
+ break;
+ case TS_PREC_AUTO:
+ tsprecision = fd->tsprec;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ switch (tsprecision) {
+ case WTAP_TSPREC_SEC:
display_epoch_time(buf, COL_MAX_LEN,
fd->abs_ts.secs, fd->abs_ts.nsecs / 1000000000, TO_STR_TIME_RES_T_SECS);
break;
- case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
+ case WTAP_TSPREC_DSEC:
display_epoch_time(buf, COL_MAX_LEN,
fd->abs_ts.secs, fd->abs_ts.nsecs / 100000000, TO_STR_TIME_RES_T_DSECS);
break;
- case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
+ case WTAP_TSPREC_CSEC:
display_epoch_time(buf, COL_MAX_LEN,
fd->abs_ts.secs, fd->abs_ts.nsecs / 10000000, TO_STR_TIME_RES_T_CSECS);
break;
- case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
+ case WTAP_TSPREC_MSEC:
display_epoch_time(buf, COL_MAX_LEN,
fd->abs_ts.secs, fd->abs_ts.nsecs / 1000000, TO_STR_TIME_RES_T_MSECS);
break;
- case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
+ case WTAP_TSPREC_USEC:
display_epoch_time(buf, COL_MAX_LEN,
fd->abs_ts.secs, fd->abs_ts.nsecs / 1000, TO_STR_TIME_RES_T_USECS);
break;
- case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case WTAP_TSPREC_NSEC:
display_epoch_time(buf, COL_MAX_LEN,
fd->abs_ts.secs, fd->abs_ts.nsecs, TO_STR_TIME_RES_T_NSECS);
break;
@@ -1409,10 +1531,10 @@ set_fd_time(const epan_t *epan, frame_data *fd, gchar *buf)
switch (timestamp_get_seconds_type()) {
case TS_SECONDS_DEFAULT:
- set_time_seconds(&del_rel_ts, buf);
+ set_time_seconds(fd, &del_rel_ts, buf);
break;
case TS_SECONDS_HOUR_MIN_SEC:
- set_time_seconds(&del_rel_ts, buf);
+ set_time_seconds(fd, &del_rel_ts, buf);
break;
default:
g_assert_not_reached();
@@ -1430,10 +1552,10 @@ set_fd_time(const epan_t *epan, frame_data *fd, gchar *buf)
switch (timestamp_get_seconds_type()) {
case TS_SECONDS_DEFAULT:
- set_time_seconds(&del_cap_ts, buf);
+ set_time_seconds(fd, &del_cap_ts, buf);
break;
case TS_SECONDS_HOUR_MIN_SEC:
- set_time_hour_min_sec(&del_cap_ts, buf);
+ set_time_hour_min_sec(fd, &del_cap_ts, buf);
break;
default:
g_assert_not_reached();
@@ -1451,10 +1573,10 @@ set_fd_time(const epan_t *epan, frame_data *fd, gchar *buf)
switch (timestamp_get_seconds_type()) {
case TS_SECONDS_DEFAULT:
- set_time_seconds(&del_dis_ts, buf);
+ set_time_seconds(fd, &del_dis_ts, buf);
break;
case TS_SECONDS_HOUR_MIN_SEC:
- set_time_hour_min_sec(&del_dis_ts, buf);
+ set_time_hour_min_sec(fd, &del_dis_ts, buf);
break;
default:
g_assert_not_reached();
@@ -1619,32 +1741,27 @@ col_set_time(column_info *cinfo, const gint el, const nstime_t *ts, const char *
if (cinfo->fmt_matx[col][el]) {
switch (timestamp_get_precision()) {
case TS_PREC_FIXED_SEC:
- case TS_PREC_AUTO_SEC:
display_signed_time(cinfo->col_buf[col], COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 1000000000, TO_STR_TIME_RES_T_SECS);
break;
case TS_PREC_FIXED_DSEC:
- case TS_PREC_AUTO_DSEC:
display_signed_time(cinfo->col_buf[col], COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 100000000, TO_STR_TIME_RES_T_DSECS);
break;
case TS_PREC_FIXED_CSEC:
- case TS_PREC_AUTO_CSEC:
display_signed_time(cinfo->col_buf[col], COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 10000000, TO_STR_TIME_RES_T_CSECS);
break;
case TS_PREC_FIXED_MSEC:
- case TS_PREC_AUTO_MSEC:
display_signed_time(cinfo->col_buf[col], COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 1000000, TO_STR_TIME_RES_T_MSECS);
break;
case TS_PREC_FIXED_USEC:
- case TS_PREC_AUTO_USEC:
display_signed_time(cinfo->col_buf[col], COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs / 1000, TO_STR_TIME_RES_T_USECS);
break;
case TS_PREC_FIXED_NSEC:
- case TS_PREC_AUTO_NSEC:
+ case TS_PREC_AUTO: /* default to maximum */
display_signed_time(cinfo->col_buf[col], COL_MAX_LEN,
(gint32) ts->secs, ts->nsecs, TO_STR_TIME_RES_T_NSECS);
break;
diff --git a/epan/column.c b/epan/column.c
index 4d23d9e5bc..8544f84b21 100644
--- a/epan/column.c
+++ b/epan/column.c
@@ -286,28 +286,23 @@ get_timestamp_column_longest_string(const gint type, const gint precision)
case(TS_ABSOLUTE_WITH_YMD):
case(TS_UTC_WITH_YMD):
switch(precision) {
- case(TS_PREC_AUTO_SEC):
case(TS_PREC_FIXED_SEC):
return "0000-00-00 00:00:00";
break;
- case(TS_PREC_AUTO_DSEC):
case(TS_PREC_FIXED_DSEC):
return "0000-00-00 00:00:00.0";
break;
- case(TS_PREC_AUTO_CSEC):
case(TS_PREC_FIXED_CSEC):
return "0000-00-00 00:00:00.00";
break;
- case(TS_PREC_AUTO_MSEC):
case(TS_PREC_FIXED_MSEC):
return "0000-00-00 00:00:00.000";
break;
- case(TS_PREC_AUTO_USEC):
case(TS_PREC_FIXED_USEC):
return "0000-00-00 00:00:00.000000";
break;
- case(TS_PREC_AUTO_NSEC):
case(TS_PREC_FIXED_NSEC):
+ case(TS_PREC_AUTO): /* Leave enough room for the maximum */
return "0000-00-00 00:00:00.000000000";
break;
default:
@@ -317,28 +312,23 @@ get_timestamp_column_longest_string(const gint type, const gint precision)
case(TS_ABSOLUTE_WITH_YDOY):
case(TS_UTC_WITH_YDOY):
switch(precision) {
- case(TS_PREC_AUTO_SEC):
case(TS_PREC_FIXED_SEC):
return "0000/000 00:00:00";
break;
- case(TS_PREC_AUTO_DSEC):
case(TS_PREC_FIXED_DSEC):
return "0000/000 00:00:00.0";
break;
- case(TS_PREC_AUTO_CSEC):
case(TS_PREC_FIXED_CSEC):
return "0000/000 00:00:00.00";
break;
- case(TS_PREC_AUTO_MSEC):
case(TS_PREC_FIXED_MSEC):
return "0000/000 00:00:00.000";
break;
- case(TS_PREC_AUTO_USEC):
case(TS_PREC_FIXED_USEC):
return "0000/000 00:00:00.000000";
break;
- case(TS_PREC_AUTO_NSEC):
case(TS_PREC_FIXED_NSEC):
+ case(TS_PREC_AUTO): /* Leave enough room for the maximum */
return "0000/000 00:00:00.000000000";
break;
default:
@@ -348,28 +338,23 @@ get_timestamp_column_longest_string(const gint type, const gint precision)
case(TS_ABSOLUTE):
case(TS_UTC):
switch(precision) {
- case(TS_PREC_AUTO_SEC):
case(TS_PREC_FIXED_SEC):
return "00:00:00";
break;
- case(TS_PREC_AUTO_DSEC):
case(TS_PREC_FIXED_DSEC):
return "00:00:00.0";
break;
- case(TS_PREC_AUTO_CSEC):
case(TS_PREC_FIXED_CSEC):
return "00:00:00.00";
break;
- case(TS_PREC_AUTO_MSEC):
case(TS_PREC_FIXED_MSEC):
return "00:00:00.000";
break;
- case(TS_PREC_AUTO_USEC):
case(TS_PREC_FIXED_USEC):
return "00:00:00.000000";
break;
- case(TS_PREC_AUTO_NSEC):
case(TS_PREC_FIXED_NSEC):
+ case(TS_PREC_AUTO): /* Leave enough room for the maximum */
return "00:00:00.000000000";
break;
default:
@@ -380,28 +365,23 @@ get_timestamp_column_longest_string(const gint type, const gint precision)
case(TS_DELTA):
case(TS_DELTA_DIS):
switch(precision) {
- case(TS_PREC_AUTO_SEC):
case(TS_PREC_FIXED_SEC):
return "0000";
break;
- case(TS_PREC_AUTO_DSEC):
case(TS_PREC_FIXED_DSEC):
return "0000.0";
break;
- case(TS_PREC_AUTO_CSEC):
case(TS_PREC_FIXED_CSEC):
return "0000.00";
break;
- case(TS_PREC_AUTO_MSEC):
case(TS_PREC_FIXED_MSEC):
return "0000.000";
break;
- case(TS_PREC_AUTO_USEC):
case(TS_PREC_FIXED_USEC):
return "0000.000000";
break;
- case(TS_PREC_AUTO_NSEC):
case(TS_PREC_FIXED_NSEC):
+ case(TS_PREC_AUTO): /* Leave enough room for the maximum */
return "0000.000000000";
break;
default:
@@ -411,28 +391,23 @@ get_timestamp_column_longest_string(const gint type, const gint precision)
case(TS_EPOCH):
/* This is enough to represent 2^63 (signed 64-bit integer) + fractions */
switch(precision) {
- case(TS_PREC_AUTO_SEC):
case(TS_PREC_FIXED_SEC):
return "0000000000000000000";
break;
- case(TS_PREC_AUTO_DSEC):
case(TS_PREC_FIXED_DSEC):
return "0000000000000000000.0";
break;
- case(TS_PREC_AUTO_CSEC):
case(TS_PREC_FIXED_CSEC):
return "0000000000000000000.00";
break;
- case(TS_PREC_AUTO_MSEC):
case(TS_PREC_FIXED_MSEC):
return "0000000000000000000.000";
break;
- case(TS_PREC_AUTO_USEC):
case(TS_PREC_FIXED_USEC):
return "0000000000000000000.000000";
break;
- case(TS_PREC_AUTO_NSEC):
case(TS_PREC_FIXED_NSEC):
+ case(TS_PREC_AUTO): /* Leave enough room for the maximum */
return "0000000000000000000.000000000";
break;
default:
diff --git a/epan/frame_data.c b/epan/frame_data.c
index bf403684f1..bfce771779 100644
--- a/epan/frame_data.c
+++ b/epan/frame_data.c
@@ -311,6 +311,7 @@ frame_data_init(frame_data *fdata, guint32 num,
fdata->flags.has_ts = (phdr->presence_flags & WTAP_HAS_TS) ? 1 : 0;
fdata->flags.has_phdr_comment = (phdr->opt_comment != NULL);
fdata->flags.has_user_comment = 0;
+ fdata->tsprec = (gint16)phdr->pkt_tsprec;
fdata->color_filter = NULL;
fdata->abs_ts.secs = phdr->ts.secs;
fdata->abs_ts.nsecs = phdr->ts.nsecs;
diff --git a/epan/frame_data.h b/epan/frame_data.h
index 58256357f4..996f4e1321 100644
--- a/epan/frame_data.h
+++ b/epan/frame_data.h
@@ -77,6 +77,7 @@ typedef struct _frame_data {
unsigned int has_phdr_comment : 1; /** 1 = there's comment for this packet */
unsigned int has_user_comment : 1; /** 1 = user set (also deleted) comment for this packet */
} flags;
+ gint16 tsprec; /**< Time stamp precision */
const void *color_filter; /**< Per-packet matching color_filter_t object */
diff --git a/epan/timestamp.c b/epan/timestamp.c
index bf0feabb0a..1feda0d8e1 100644
--- a/epan/timestamp.c
+++ b/epan/timestamp.c
@@ -28,7 +28,7 @@
* and distinguish it from a command line value */
static ts_type timestamp_type = TS_NOT_SET;
-static int timestamp_precision = TS_PREC_AUTO_USEC;
+static int timestamp_precision = TS_PREC_AUTO;
static ts_seconds_type timestamp_seconds_type = TS_SECONDS_NOT_SET;
diff --git a/epan/timestamp.h b/epan/timestamp.h
index bbda35e64c..25a048ab90 100644
--- a/epan/timestamp.h
+++ b/epan/timestamp.h
@@ -52,19 +52,13 @@ typedef enum {
} ts_type;
typedef enum {
- TS_PREC_AUTO, /* recent */
- TS_PREC_FIXED_SEC, /* recent and internal */
- TS_PREC_FIXED_DSEC, /* recent and internal */
- TS_PREC_FIXED_CSEC, /* recent and internal */
- TS_PREC_FIXED_MSEC, /* recent and internal */
- TS_PREC_FIXED_USEC, /* recent and internal */
- TS_PREC_FIXED_NSEC, /* recent and internal */
- TS_PREC_AUTO_SEC, /* internal */
- TS_PREC_AUTO_DSEC, /* internal */
- TS_PREC_AUTO_CSEC, /* internal */
- TS_PREC_AUTO_MSEC, /* internal */
- TS_PREC_AUTO_USEC, /* internal */
- TS_PREC_AUTO_NSEC /* internal */
+ TS_PREC_AUTO,
+ TS_PREC_FIXED_SEC,
+ TS_PREC_FIXED_DSEC,
+ TS_PREC_FIXED_CSEC,
+ TS_PREC_FIXED_MSEC,
+ TS_PREC_FIXED_USEC,
+ TS_PREC_FIXED_NSEC
} ts_precision;
typedef enum {
diff --git a/epan/wslua/wslua_file.c b/epan/wslua/wslua_file.c
index f83eb29d20..81347aaae0 100644
--- a/epan/wslua/wslua_file.c
+++ b/epan/wslua/wslua_file.c
@@ -705,7 +705,7 @@ static CaptureInfo* push_CaptureInfo(lua_State* L, wtap *wth, const gboolean fir
if (first_time) {
/* XXX: need to do this? */
wth->file_encap = WTAP_ENCAP_UNKNOWN;
- wth->tsprecision = WTAP_FILE_TSPREC_SEC;
+ wth->file_tsprec = WTAP_TSPREC_UNKNOWN;
wth->snapshot_length = 0;
}
@@ -720,8 +720,8 @@ WSLUA_METAMETHOD CaptureInfo__tostring(lua_State* L) {
lua_pushstring(L,"CaptureInfo pointer is NULL!");
} else {
wtap *wth = fi->wth;
- lua_pushfstring(L, "CaptureInfo: file_type_subtype=%d, snapshot_length=%d, pkt_encap=%d, tsprecision='%s'",
- wth->file_type_subtype, wth->snapshot_length, wth->phdr.pkt_encap, wth->tsprecision);
+ lua_pushfstring(L, "CaptureInfo: file_type_subtype=%d, snapshot_length=%d, pkt_encap=%d, file_tsprec='%s'",
+ wth->file_type_subtype, wth->snapshot_length, wth->phdr.pkt_encap, wth->file_tsprec);
}
WSLUA_RETURN(1); /* String of debug information. */
@@ -747,8 +747,8 @@ WSLUA_ATTRIBUTE_NAMED_NUMBER_SETTER(CaptureInfo,encap,wth->file_encap,int);
See `wtap_file_tsprec` in `init.lua` for available precisions.
*/
-WSLUA_ATTRIBUTE_NAMED_NUMBER_GETTER(CaptureInfo,time_precision,wth->tsprecision);
-WSLUA_ATTRIBUTE_NAMED_NUMBER_SETTER(CaptureInfo,time_precision,wth->tsprecision,int);
+WSLUA_ATTRIBUTE_NAMED_NUMBER_GETTER(CaptureInfo,time_precision,wth->file_tsprec);
+WSLUA_ATTRIBUTE_NAMED_NUMBER_SETTER(CaptureInfo,time_precision,wth->file_tsprec,int);
/* WSLUA_ATTRIBUTE CaptureInfo_snapshot_length RW The maximum packet length that could be recorded.
@@ -979,7 +979,7 @@ WSLUA_METAMETHOD CaptureInfoConst__tostring(lua_State* L) {
lua_pushstring(L,"CaptureInfoConst pointer is NULL!");
} else {
wtap_dumper *wdh = fi->wdh;
- lua_pushfstring(L, "CaptureInfoConst: file_type_subtype=%d, snaplen=%d, encap=%d, compressed=%d, tsprecision='%s'",
+ lua_pushfstring(L, "CaptureInfoConst: file_type_subtype=%d, snaplen=%d, encap=%d, compressed=%d, file_tsprec='%s'",
wdh->file_type_subtype, wdh->snaplen, wdh->encap, wdh->compressed, wdh->tsprecision);
}