aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2020-10-01 08:47:05 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2020-10-03 07:23:55 +0000
commit79bf1f7d99fdfdd0a7c68999e4989c7757668c71 (patch)
treece896925df8b2395728194025aeeea093357bc94 /wiretap
parent3ff940652962c099b73ae3233322b8697b0d10ab (diff)
Nettrace: Fix calculation of changetime
Closes #16869 (closed)
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/nettrace_3gpp_32_423.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/wiretap/nettrace_3gpp_32_423.c b/wiretap/nettrace_3gpp_32_423.c
index b896035627..2099cc728c 100644
--- a/wiretap/nettrace_3gpp_32_423.c
+++ b/wiretap/nettrace_3gpp_32_423.c
@@ -343,7 +343,7 @@ nettrace_parse_begin_time(char *curr_pos, wtap_rec *rec)
* </rawMsg>
*/
static wtap_open_return_val
-write_packet_data(wtap_dumper *wdh, wtap_rec *rec, int *err, gchar **err_info, char *file_buf, nstime_t start_time, exported_pdu_info_t *exported_pdu_info, char name_str[64])
+write_packet_data(wtap_dumper *wdh, wtap_rec *rec, int *err, gchar **err_info, char *file_buf, nstime_t packet_time, exported_pdu_info_t *exported_pdu_info, char name_str[64])
{
char *curr_pos, *next_pos;
char proto_name_str[16];
@@ -683,14 +683,14 @@ write_packet_data(wtap_dumper *wdh, wtap_rec *rec, int *err, gchar **err_info, c
/* Construct the phdr */
memset(rec, 0, sizeof *rec);
rec->rec_type = REC_TYPE_PACKET;
- if (start_time.secs == 0) {
+ if (packet_time.secs == 0) {
rec->presence_flags = 0; /* yes, we have no bananas^Wtime stamp */
rec->ts.secs = 0;
rec->ts.nsecs = 0;
} else {
rec->presence_flags = WTAP_HAS_TS;
- rec->ts.secs = start_time.secs;
- rec->ts.nsecs = start_time.nsecs;
+ rec->ts.secs = packet_time.secs;
+ rec->ts.nsecs = packet_time.nsecs;
}
rec->rec_header.packet_header.caplen = pkt_data_len + exp_pdu_tags_len;
@@ -835,9 +835,9 @@ create_temp_pcapng_file(wtap *wth, int *err, gchar **err_info, nettrace_3gpp_32_
int wrt_err;
gchar *wrt_err_info = NULL;
wtap_rec rec;
- nstime_t start_time;
+ nstime_t start_time, packet_time;
int scan_found;
- unsigned second, ms;
+ unsigned int second, ms;
gboolean do_random = FALSE;
char *curr_pos, *next_msg_pos, *next_pos, *prev_pos;
int name_str_len;
@@ -991,8 +991,8 @@ create_temp_pcapng_file(wtap *wth, int *err, gchar **err_info, nettrace_3gpp_32_
curr_pos = nettrace_parse_begin_time(curr_pos, &rec);
- start_time.secs = rec.ts.secs;
- start_time.nsecs = rec.ts.nsecs;
+ start_time.secs = packet_time.secs = rec.ts.secs;
+ start_time.nsecs = packet_time.nsecs = rec.ts.nsecs;
/* set rest of the record hdr data */
rec.rec_type = REC_TYPE_PACKET;
@@ -1073,8 +1073,14 @@ create_temp_pcapng_file(wtap *wth, int *err, gchar **err_info, nettrace_3gpp_32_
scan_found = sscanf(curr_pos, "%u.%u", &second, &ms);
if ((scan_found == 2) && (start_time.secs != 0)) {
- start_time.secs = start_time.secs + second;
- start_time.nsecs = start_time.nsecs + (ms * 1000000);
+ guint start_ms = start_time.nsecs / 1000000;
+ guint elapsed_ms = start_ms + ms;
+ if (elapsed_ms > 1000) {
+ elapsed_ms =- 1000;
+ second++;
+ }
+ packet_time.secs = start_time.secs + second;
+ packet_time.nsecs = start_time.nsecs + (elapsed_ms * 1000000);
}
}
@@ -1132,7 +1138,7 @@ create_temp_pcapng_file(wtap *wth, int *err, gchar **err_info, nettrace_3gpp_32_
curr_pos = raw_msg_pos;
curr_pos = curr_pos + 7;
/* Add the raw msg*/
- temp_val = write_packet_data(wdh_exp_pdu, &rec, &wrt_err, &wrt_err_info, curr_pos, start_time, &exported_pdu_info, name_str);
+ temp_val = write_packet_data(wdh_exp_pdu, &rec, &wrt_err, &wrt_err_info, curr_pos, packet_time, &exported_pdu_info, name_str);
if (temp_val != WTAP_OPEN_MINE){
result = temp_val;
*err = wrt_err;