diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /ui/file_dialog.c | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ui/file_dialog.c')
-rw-r--r-- | ui/file_dialog.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/ui/file_dialog.c b/ui/file_dialog.c new file mode 100644 index 00000000..91eea5ad --- /dev/null +++ b/ui/file_dialog.c @@ -0,0 +1,103 @@ +/* file_dialog.c + * Common file dialog routines + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 2006 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" + +#include <time.h> + +#include <glib.h> + +#include <wsutil/nstime.h> + +#include <wiretap/wtap.h> + +#include <epan/prefs.h> + +#include "ui/file_dialog.h" + +ws_file_preview_stats_status +get_stats_for_preview(wtap *wth, ws_file_preview_stats *stats, + int *err, gchar **err_info) +{ + gint64 data_offset; + wtap_rec rec; + Buffer buf; + guint32 records; + guint32 data_records; + double start_time; + double stop_time; + gboolean have_times; + gboolean timed_out; + time_t time_preview, time_current; + double cur_time; + + have_times = FALSE; + start_time = 0; + stop_time = 0; + records = 0; + data_records = 0; + timed_out = FALSE; + time(&time_preview); + wtap_rec_init(&rec); + ws_buffer_init(&buf, 1514); + while ((wtap_read(wth, &rec, &buf, err, err_info, &data_offset))) { + if (rec.presence_flags & WTAP_HAS_TS) { + cur_time = nstime_to_sec(&rec.ts); + if (!have_times) { + start_time = cur_time; + stop_time = cur_time; + have_times = TRUE; + } + if (cur_time < start_time) { + start_time = cur_time; + } + if (cur_time > stop_time){ + stop_time = cur_time; + } + } + + switch (rec.rec_type) { + + case REC_TYPE_PACKET: + case REC_TYPE_FT_SPECIFIC_EVENT: + case REC_TYPE_FT_SPECIFIC_REPORT: + case REC_TYPE_SYSCALL: + case REC_TYPE_SYSTEMD_JOURNAL_EXPORT: + data_records++; + break; + } + + records++; + if ((records % 1000) == 0) { + /* do we have a timeout? */ + time(&time_current); + if (time_current-time_preview >= (time_t) prefs.gui_fileopen_preview) { + timed_out = TRUE; + break; + } + } + wtap_rec_reset(&rec); + } + + stats->have_times = have_times; + stats->start_time = start_time; + stats->stop_time = stop_time; + stats->records = records; + stats->data_records = data_records; + + wtap_rec_cleanup(&rec); + ws_buffer_free(&buf); + + if (*err != 0) { + /* Read error. */ + return PREVIEW_READ_ERROR; + } + return timed_out ? PREVIEW_TIMED_OUT : PREVIEW_SUCCEEDED; +} |