diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2013-07-21 23:07:33 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2013-07-21 23:07:33 +0000 |
commit | c702e92121ec5477ecc25a87b00bf478b42c1dc7 (patch) | |
tree | 962e68606a5718b59153d14ee28c319eb29a904b /tshark.c | |
parent | 74b6c5949957411e5ce95e5e4b1a34997cf31b09 (diff) |
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.c | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -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; |