From 88fb10b8a35b8867cdcae61a7caad3323527c6c0 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Mon, 28 May 2012 01:17:48 +0000 Subject: Correctly implement what was my intent when removing the HAVE_LIBPCAP stuff - arrange that the interface summary list is set, if we've read a capture file that has interface information, *regardless* of whether we have libpcap/WinPcap or not. That means that summary_fill_in() should fill in the interface information for the summary if there's interface information from the capture file, and summary_fill_in_capture() - which is called only if HAVE_LIBPCAP is defined, and can exist only if HAVE_LIBPCAP is defined (as it takes an argument of a type that's defined only if HAVE_LIBPCAP is defined) - just fills in interface information from the capture options and does so only if there's none from the file. svn path=/trunk/; revision=42873 --- summary.c | 63 +++++++++++++++++++++++++++++---------------------------------- 1 file changed, 29 insertions(+), 34 deletions(-) (limited to 'summary.c') diff --git a/summary.c b/summary.c index 3f6af4539c..9433fe8b0c 100644 --- a/summary.c +++ b/summary.c @@ -107,10 +107,14 @@ tally_frame_data(frame_data *cur_frame, summary_tally *sum_tally) void summary_fill_in(capture_file *cf, summary_tally *st) { - frame_data *first_frame, *cur_frame; guint32 framenum; wtapng_section_t* shb_inf; + iface_options iface; + guint i; + wtapng_iface_descriptions_t* idb_info; + wtapng_if_descr_t wtapng_if_descr; + wtapng_if_stats_t *if_stats; st->packet_count_ts = 0; st->start_time = 0; @@ -170,27 +174,39 @@ summary_fill_in(capture_file *cf, summary_tally *st) } st->ifaces = g_array_new(FALSE, FALSE, sizeof(iface_options)); + idb_info = wtap_file_get_idb_info(cf->wth); + for (i = 0; i < idb_info->number_of_interfaces; i++) { + wtapng_if_descr = g_array_index(idb_info->interface_data, wtapng_if_descr_t, i); + iface.cfilter = g_strdup(wtapng_if_descr.if_filter_str); + iface.name = g_strdup(wtapng_if_descr.if_name); + iface.descr = g_strdup(wtapng_if_descr.if_description); + iface.drops_known = FALSE; + iface.drops = 0; + iface.snap = wtapng_if_descr.snap_len; + iface.has_snap = (iface.snap != 65535); + iface.encap_type = wtapng_if_descr.wtap_encap; + if(wtapng_if_descr.num_stat_entries == 1){ + /* dumpcap only writes one ISB, only handle that for now */ + if_stats = &g_array_index(wtapng_if_descr.interface_statistics, wtapng_if_stats_t, 0); + iface.drops_known = TRUE; + iface.drops = if_stats->isb_ifdrop; + iface.isb_comment = if_stats->opt_comment; + } + g_array_append_val(st->ifaces, iface); + } + g_free(idb_info); } +#ifdef HAVE_LIBPCAP void summary_fill_in_capture(capture_file *cf,capture_options *capture_opts, summary_tally *st) { iface_options iface; interface_t device; guint i; - wtapng_iface_descriptions_t* idb_info; - wtapng_if_descr_t wtapng_if_descr; - wtapng_if_stats_t *if_stats; - while (st->ifaces->len > 0) { - iface = g_array_index(st->ifaces, iface_options, 0); - st->ifaces = g_array_remove_index(st->ifaces, 0); - g_free(iface.name); - g_free(iface.descr); - g_free(iface.cfilter); - } - if (st->is_tempfile) { + if (st->ifaces->len == 0) { for (i = 0; i < capture_opts->all_ifaces->len; i++) { device = g_array_index(capture_opts->all_ifaces, interface_t, i); if (!device.selected) { @@ -206,27 +222,6 @@ summary_fill_in_capture(capture_file *cf,capture_options *capture_opts, summary_ iface.encap_type = wtap_pcap_encap_to_wtap_encap(device.active_dlt); g_array_append_val(st->ifaces, iface); } - } else { - idb_info = wtap_file_get_idb_info(cf->wth); - for (i = 0; i < idb_info->number_of_interfaces; i++) { - wtapng_if_descr = g_array_index(idb_info->interface_data, wtapng_if_descr_t, i); - iface.cfilter = g_strdup(wtapng_if_descr.if_filter_str); - iface.name = g_strdup(wtapng_if_descr.if_name); - iface.descr = g_strdup(wtapng_if_descr.if_description); - iface.drops_known = FALSE; - iface.drops = 0; - iface.snap = wtapng_if_descr.snap_len; - iface.has_snap = (iface.snap != 65535); - iface.encap_type = wtapng_if_descr.wtap_encap; - if(wtapng_if_descr.num_stat_entries == 1){ - /* dumpcap only writes one ISB, only handle that for now */ - if_stats = &g_array_index(wtapng_if_descr.interface_statistics, wtapng_if_stats_t, 0); - iface.drops_known = TRUE; - iface.drops = if_stats->isb_ifdrop; - iface.isb_comment = if_stats->opt_comment; - } - g_array_append_val(st->ifaces, iface); - } - g_free(idb_info); } } +#endif -- cgit v1.2.3