summaryrefslogtreecommitdiff
path: root/tshark.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2013-07-21 23:07:33 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2013-07-21 23:07:33 +0000
commitc702e92121ec5477ecc25a87b00bf478b42c1dc7 (patch)
tree962e68606a5718b59153d14ee28c319eb29a904b /tshark.c
parent74b6c5949957411e5ce95e5e4b1a34997cf31b09 (diff)
downloadwireshark-c702e92121ec5477ecc25a87b00bf478b42c1dc7.tar.gz
Replace relative timestamp with reference frame number. Saves 16B per frame.
svn path=/trunk/; revision=50772
Diffstat (limited to 'tshark.c')
-rw-r--r--tshark.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/tshark.c b/tshark.c
index 4fdbbfdc74..115ecc12ee 100644
--- a/tshark.c
+++ b/tshark.c
@@ -105,7 +105,8 @@
static const gchar decode_as_arg_template[] = "<layer_type>==<selector>,<decode_as_protocol>";
static guint32 cum_bytes;
-static nstime_t first_ts;
+static const frame_data *ref;
+static frame_data ref_frame;
static frame_data *prev_dis;
static frame_data prev_dis_frame;
static frame_data *prev_cap;
@@ -2163,6 +2164,9 @@ tshark_get_frame_ts(void *data, guint32 frame_num)
{
capture_file *cf = (capture_file *) data;
+ if (ref && ref->num == frame_num)
+ return &ref->abs_ts;
+
if (prev_dis && prev_dis->num == frame_num)
return &prev_dis->abs_ts;
@@ -2725,7 +2729,11 @@ process_packet_first_pass(capture_file *cf,
epan_dissect_prime_dfilter(&edt, cf->rfcode);
frame_data_set_before_dissect(&fdlocal, &cf->elapsed_time,
- &first_ts, prev_dis);
+ &ref, prev_dis);
+ if (ref == &fdlocal) {
+ ref_frame = fdlocal;
+ ref = &ref_frame;
+ }
epan_dissect_run(&edt, whdr, frame_tvbuff_new(&fdlocal, pd), &fdlocal, NULL);
@@ -2814,7 +2822,11 @@ process_packet_second_pass(capture_file *cf, frame_data *fdata,
cinfo = NULL;
frame_data_set_before_dissect(fdata, &cf->elapsed_time,
- &first_ts, prev_dis);
+ &ref, prev_dis);
+ if (ref == fdata) {
+ ref_frame = *fdata;
+ ref = &ref_frame;
+ }
epan_dissect_run_with_taps(&edt, phdr, frame_tvbuff_new_buffer(fdata, buf), fdata, cinfo);
@@ -3276,7 +3288,11 @@ process_packet(capture_file *cf, gint64 offset, struct wtap_pkthdr *whdr,
cinfo = NULL;
frame_data_set_before_dissect(&fdata, &cf->elapsed_time,
- &first_ts, prev_dis);
+ &ref, prev_dis);
+ if (ref == &fdata) {
+ ref_frame = fdata;
+ ref = &ref_frame;
+ }
epan_dissect_run_with_taps(&edt, whdr, frame_tvbuff_new(&fdata, pd), &fdata, cinfo);
@@ -3766,7 +3782,7 @@ cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err)
} else
cf->has_snap = TRUE;
nstime_set_zero(&cf->elapsed_time);
- nstime_set_unset(&first_ts);
+ ref = NULL;
prev_dis = NULL;
prev_cap = NULL;