forked from osmocom/wireshark
Qt: Add a CaptureFile class.
Wrap the capture_file struct in a QObject which translates cf_cb_* and capture_cb_* events into signals. Move the global cfile to capture_file.cpp. Don't use a void pointer for the capture file struct. Change-Id: Ic5d5efb4bb1db64aa0247245890e5669b1da723a Reviewed-on: https://code.wireshark.org/review/5885 Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
parent
2bb8255e29
commit
9ba9cd83a4
|
@ -47,8 +47,9 @@
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include "capture_opts.h"
|
#include "capture_opts.h"
|
||||||
#include <capchild/capture_session.h>
|
|
||||||
#include <capchild/capture_sync.h>
|
#include "capchild/capture_session.h"
|
||||||
|
#include "capchild/capture_sync.h"
|
||||||
#ifdef HAVE_EXTCAP
|
#ifdef HAVE_EXTCAP
|
||||||
#include "extcap.h"
|
#include "extcap.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,10 +41,12 @@ typedef enum {
|
||||||
CAPTURE_RUNNING /**< capture child signalled ok, capture is running now */
|
CAPTURE_RUNNING /**< capture child signalled ok, capture is running now */
|
||||||
} capture_state;
|
} capture_state;
|
||||||
|
|
||||||
|
struct _capture_file;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* State of a capture session.
|
* State of a capture session.
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct _capture_session {
|
||||||
int fork_child; /**< If not -1, in parent, process ID of child */
|
int fork_child; /**< If not -1, in parent, process ID of child */
|
||||||
int fork_child_status; /**< Child exit status */
|
int fork_child_status; /**< Child exit status */
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -57,15 +59,15 @@ typedef struct {
|
||||||
#endif
|
#endif
|
||||||
gboolean session_started;
|
gboolean session_started;
|
||||||
capture_options *capture_opts; /**< options for this capture */
|
capture_options *capture_opts; /**< options for this capture */
|
||||||
void *cf; /**< handle to cfile (note: untyped handle) */
|
struct _capture_file *cf; /**< handle to cfile */
|
||||||
} capture_session;
|
} capture_session;
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
capture_session_init(capture_session *cap_session, void *cf);
|
capture_session_init(capture_session *cap_session, struct _capture_file *cf);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* dummy is needed because clang throws the error: empty struct has size 0 in C, size 1 in C++ */
|
/* dummy is needed because clang throws the error: empty struct has size 0 in C, size 1 in C++ */
|
||||||
typedef struct {int dummy;} capture_session;
|
typedef struct _capture_session {int dummy;} capture_session;
|
||||||
|
|
||||||
#endif /* HAVE_LIBPCAP */
|
#endif /* HAVE_LIBPCAP */
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ static void (*fetch_dumpcap_pid)(int) = NULL;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
capture_session_init(capture_session *cap_session, void *cf)
|
capture_session_init(capture_session *cap_session, struct _capture_file *cf)
|
||||||
{
|
{
|
||||||
cap_session->cf = cf;
|
cap_session->cf = cf;
|
||||||
cap_session->fork_child = -1; /* invalid process handle */
|
cap_session->fork_child = -1; /* invalid process handle */
|
||||||
|
|
|
@ -138,7 +138,7 @@ static echld_epan_stuff_t stuff;
|
||||||
static void init_stuff(void) {
|
static void init_stuff(void) {
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
capture_opts_init(&stuff.cap_opts);
|
capture_opts_init(&stuff.cap_opts);
|
||||||
capture_session_init(&stuff.cap_sess, (void *)&stuff.cfile);
|
capture_session_init(&stuff.cap_sess, &stuff.cfile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
4
file.c
4
file.c
|
@ -195,14 +195,14 @@ cf_callback_add(cf_callback_t func, gpointer user_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cf_callback_remove(cf_callback_t func)
|
cf_callback_remove(cf_callback_t func, gpointer user_data)
|
||||||
{
|
{
|
||||||
cf_callback_data_t *cb;
|
cf_callback_data_t *cb;
|
||||||
GList *cb_item = cf_callbacks;
|
GList *cb_item = cf_callbacks;
|
||||||
|
|
||||||
while (cb_item != NULL) {
|
while (cb_item != NULL) {
|
||||||
cb = (cf_callback_data_t *)cb_item->data;
|
cb = (cf_callback_data_t *)cb_item->data;
|
||||||
if (cb->cb_fct == func) {
|
if (cb->cb_fct == func && cb->user_data == user_data) {
|
||||||
cf_callbacks = g_list_remove(cf_callbacks, cb);
|
cf_callbacks = g_list_remove(cf_callbacks, cb);
|
||||||
g_free(cb);
|
g_free(cb);
|
||||||
return;
|
return;
|
||||||
|
|
20
file.h
20
file.h
|
@ -95,11 +95,29 @@ typedef struct {
|
||||||
field_info *finfo;
|
field_info *finfo;
|
||||||
} match_data;
|
} match_data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a capture file event callback.
|
||||||
|
*
|
||||||
|
* @param func The function to be called for each event.
|
||||||
|
* The function will be passed three parameters: The event type (event),
|
||||||
|
* event-dependent data (data), and user-supplied data (user_data).
|
||||||
|
* Event-dependent data may be a capture_file pointer, character pointer,
|
||||||
|
* or NULL.
|
||||||
|
* @param user_data User-supplied data to pass to the callback. May be NULL.
|
||||||
|
*/
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
cf_callback_add(cf_callback_t func, gpointer user_data);
|
cf_callback_add(cf_callback_t func, gpointer user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a capture file event callback.
|
||||||
|
*
|
||||||
|
* @param func The function to be removed.
|
||||||
|
* @param user_data User-supplied data. Must be the same value supplied to cf_callback_add.
|
||||||
|
*/
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
cf_callback_remove(cf_callback_t func);
|
cf_callback_remove(cf_callback_t func, gpointer user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open a capture file.
|
* Open a capture file.
|
||||||
|
|
2
tshark.c
2
tshark.c
|
@ -1164,7 +1164,7 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
capture_opts_init(&global_capture_opts);
|
capture_opts_init(&global_capture_opts);
|
||||||
capture_session_init(&global_capture_session, (void *)&cfile);
|
capture_session_init(&global_capture_session, &cfile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
timestamp_set_type(TS_RELATIVE);
|
timestamp_set_type(TS_RELATIVE);
|
||||||
|
|
|
@ -105,14 +105,14 @@ capture_callback_add(capture_callback_t func, gpointer user_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
capture_callback_remove(capture_callback_t func)
|
capture_callback_remove(capture_callback_t func, gpointer user_data)
|
||||||
{
|
{
|
||||||
capture_callback_data_t *cb;
|
capture_callback_data_t *cb;
|
||||||
GList *cb_item = capture_callbacks;
|
GList *cb_item = capture_callbacks;
|
||||||
|
|
||||||
while(cb_item != NULL) {
|
while(cb_item != NULL) {
|
||||||
cb = (capture_callback_data_t *)cb_item->data;
|
cb = (capture_callback_data_t *)cb_item->data;
|
||||||
if(cb->cb_fct == func) {
|
if(cb->cb_fct == func && cb->user_data == user_data) {
|
||||||
capture_callbacks = g_list_remove(capture_callbacks, cb);
|
capture_callbacks = g_list_remove(capture_callbacks, cb);
|
||||||
g_free(cb);
|
g_free(cb);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "capture_opts.h"
|
#include "capture_opts.h"
|
||||||
#include <capchild/capture_session.h>
|
#include "capchild/capture_session.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -55,7 +55,7 @@ extern void
|
||||||
capture_callback_add(capture_callback_t func, gpointer user_data);
|
capture_callback_add(capture_callback_t func, gpointer user_data);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
capture_callback_remove(capture_callback_t func);
|
capture_callback_remove(capture_callback_t func, gpointer user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start a capture session.
|
* Start a capture session.
|
||||||
|
|
|
@ -2469,7 +2469,7 @@ main(int argc, char *argv[])
|
||||||
by preference settings and then again by the command line parameters. */
|
by preference settings and then again by the command line parameters. */
|
||||||
capture_opts_init(&global_capture_opts);
|
capture_opts_init(&global_capture_opts);
|
||||||
|
|
||||||
capture_session_init(&global_capture_session, (void *)&cfile);
|
capture_session_init(&global_capture_session, &cfile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
init_report_err(failure_alert_box, open_failure_alert_box,
|
init_report_err(failure_alert_box, open_failure_alert_box,
|
||||||
|
|
|
@ -26,6 +26,7 @@ set(WIRESHARK_QT_HEADERS
|
||||||
accordion_frame.h
|
accordion_frame.h
|
||||||
byte_view_tab.h
|
byte_view_tab.h
|
||||||
byte_view_text.h
|
byte_view_text.h
|
||||||
|
capture_file.h
|
||||||
capture_file_dialog.h
|
capture_file_dialog.h
|
||||||
capture_file_properties_dialog.h
|
capture_file_properties_dialog.h
|
||||||
capture_filter_combo.h
|
capture_filter_combo.h
|
||||||
|
@ -122,6 +123,7 @@ set(WIRESHARK_QT_SRC
|
||||||
accordion_frame.cpp
|
accordion_frame.cpp
|
||||||
byte_view_tab.cpp
|
byte_view_tab.cpp
|
||||||
byte_view_text.cpp
|
byte_view_text.cpp
|
||||||
|
capture_file.cpp
|
||||||
capture_file_dialog.cpp
|
capture_file_dialog.cpp
|
||||||
capture_file_properties_dialog.cpp
|
capture_file_properties_dialog.cpp
|
||||||
capture_filter_combo.cpp
|
capture_filter_combo.cpp
|
||||||
|
|
|
@ -116,6 +116,7 @@ MOC_HDRS = \
|
||||||
accordion_frame.h \
|
accordion_frame.h \
|
||||||
byte_view_tab.h \
|
byte_view_tab.h \
|
||||||
byte_view_text.h \
|
byte_view_text.h \
|
||||||
|
capture_file.h \
|
||||||
capture_file_dialog.h \
|
capture_file_dialog.h \
|
||||||
capture_file_properties_dialog.h \
|
capture_file_properties_dialog.h \
|
||||||
capture_filter_combo.h \
|
capture_filter_combo.h \
|
||||||
|
@ -309,6 +310,7 @@ WIRESHARK_QT_SRC = \
|
||||||
accordion_frame.cpp \
|
accordion_frame.cpp \
|
||||||
byte_view_tab.cpp \
|
byte_view_tab.cpp \
|
||||||
byte_view_text.cpp \
|
byte_view_text.cpp \
|
||||||
|
capture_file.cpp \
|
||||||
capture_file_dialog.cpp \
|
capture_file_dialog.cpp \
|
||||||
capture_file_properties_dialog.cpp \
|
capture_file_properties_dialog.cpp \
|
||||||
capture_filter_combo.cpp \
|
capture_filter_combo.cpp \
|
||||||
|
|
|
@ -547,6 +547,7 @@ win32: QMAKE_CLEAN += *.pdb
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
byte_view_tab.h \
|
byte_view_tab.h \
|
||||||
byte_view_text.h \
|
byte_view_text.h \
|
||||||
|
capture_file.h \
|
||||||
capture_file_dialog.h \
|
capture_file_dialog.h \
|
||||||
capture_filter_combo.h \
|
capture_filter_combo.h \
|
||||||
capture_filter_edit.h \
|
capture_filter_edit.h \
|
||||||
|
@ -589,6 +590,7 @@ SOURCES += \
|
||||||
accordion_frame.cpp \
|
accordion_frame.cpp \
|
||||||
byte_view_tab.cpp \
|
byte_view_tab.cpp \
|
||||||
byte_view_text.cpp \
|
byte_view_text.cpp \
|
||||||
|
capture_file.cpp \
|
||||||
capture_file_dialog.cpp \
|
capture_file_dialog.cpp \
|
||||||
capture_file_properties_dialog.cpp \
|
capture_file_properties_dialog.cpp \
|
||||||
capture_filter_combo.cpp \
|
capture_filter_combo.cpp \
|
||||||
|
|
|
@ -0,0 +1,212 @@
|
||||||
|
/* capture_file.cpp
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "capture_file.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @file Capture file class
|
||||||
|
*
|
||||||
|
* Wraps the capture_file struct, cfile global, and callbacks.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "globals.h"
|
||||||
|
capture_file cfile;
|
||||||
|
|
||||||
|
#include "file.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
#include "ui/capture.h"
|
||||||
|
|
||||||
|
// To do:
|
||||||
|
// - Add isValid or isOpen methods instead of checking capFile() for NULL.
|
||||||
|
// - Add getters and (if needed) setters:
|
||||||
|
// - Base filename
|
||||||
|
// - Full filename
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
CaptureFile::CaptureFile(QObject *parent, capture_file *cap_file) :
|
||||||
|
QObject(parent),
|
||||||
|
cap_file_(cap_file)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LIBPCAP
|
||||||
|
capture_callback_add(captureCallback, (gpointer) this);
|
||||||
|
#endif
|
||||||
|
cf_callback_add(captureFileCallback, (gpointer) this);
|
||||||
|
}
|
||||||
|
|
||||||
|
CaptureFile::~CaptureFile()
|
||||||
|
{
|
||||||
|
cf_callback_remove(captureFileCallback, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
capture_file *CaptureFile::globalCapFile()
|
||||||
|
{
|
||||||
|
return &cfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpointer CaptureFile::window()
|
||||||
|
{
|
||||||
|
if (cap_file_) return cap_file_->window;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CaptureFile::captureFileCallback(gint event, gpointer data, gpointer user_data)
|
||||||
|
{
|
||||||
|
CaptureFile *capture_file = static_cast<CaptureFile *>(user_data);
|
||||||
|
if (!capture_file) return;
|
||||||
|
|
||||||
|
capture_file->captureFileEvent(event, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBPCAP
|
||||||
|
void CaptureFile::captureCallback(gint event, capture_session *cap_session, gpointer user_data)
|
||||||
|
{
|
||||||
|
CaptureFile *capture_file = static_cast<CaptureFile *>(user_data);
|
||||||
|
if (!capture_file) return;
|
||||||
|
|
||||||
|
capture_file->captureEvent(event, cap_session);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void CaptureFile::captureFileEvent(int event, gpointer data)
|
||||||
|
{
|
||||||
|
qDebug() << "=cfe" << event << data;
|
||||||
|
switch(event) {
|
||||||
|
case(cf_cb_file_opened):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Opened");
|
||||||
|
cap_file_ = (capture_file *) data;
|
||||||
|
qDebug() << "=cfe fo" << cap_file_;
|
||||||
|
emit captureFileOpened();
|
||||||
|
break;
|
||||||
|
case(cf_cb_file_closing):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Closing");
|
||||||
|
emit captureFileClosing();
|
||||||
|
break;
|
||||||
|
case(cf_cb_file_closed):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Closed");
|
||||||
|
qDebug() << "=cfe fc" << cap_file_;
|
||||||
|
emit captureFileClosed();
|
||||||
|
cap_file_ = NULL;
|
||||||
|
break;
|
||||||
|
case(cf_cb_file_read_started):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Read started");
|
||||||
|
emit captureFileReadStarted();
|
||||||
|
break;
|
||||||
|
case(cf_cb_file_read_finished):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Read finished");
|
||||||
|
emit captureFileReadFinished();
|
||||||
|
break;
|
||||||
|
case(cf_cb_file_reload_started):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Reload started");
|
||||||
|
emit captureFileReadStarted();
|
||||||
|
break;
|
||||||
|
case(cf_cb_file_reload_finished):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Reload finished");
|
||||||
|
emit captureFileReadFinished();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case(cf_cb_packet_selected):
|
||||||
|
case(cf_cb_packet_unselected):
|
||||||
|
case(cf_cb_field_unselected):
|
||||||
|
// Signals and slots handled elsewhere.
|
||||||
|
break;
|
||||||
|
|
||||||
|
// case(cf_cb_file_save_started): // data = string
|
||||||
|
// g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Save started");
|
||||||
|
// break;
|
||||||
|
// case(cf_cb_file_save_finished):
|
||||||
|
// g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Save finished");
|
||||||
|
// break;
|
||||||
|
// case(cf_cb_file_save_failed):
|
||||||
|
// g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Save failed");
|
||||||
|
// break;
|
||||||
|
default:
|
||||||
|
g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: main_cf_callback %d %p", event, data);
|
||||||
|
g_warning("CaptureFile::captureFileCallback: event %u unknown", event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CaptureFile::captureEvent(int event, capture_session *cap_session)
|
||||||
|
{
|
||||||
|
#ifndef HAVE_LIBPCAP
|
||||||
|
Q_UNUSED(event)
|
||||||
|
Q_UNUSED(cap_session)
|
||||||
|
#else
|
||||||
|
qDebug() << "=ce" << event << cap_session->cf;
|
||||||
|
switch(event) {
|
||||||
|
case(capture_cb_capture_prepared):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture prepared");
|
||||||
|
emit captureCapturePrepared(cap_session);
|
||||||
|
cap_file_ = cap_session->cf;
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_update_started):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update started");
|
||||||
|
emit captureCaptureUpdateStarted(cap_session);
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_update_continue):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update continue");
|
||||||
|
emit captureCaptureUpdateContinue(cap_session);
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_update_finished):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update finished");
|
||||||
|
emit captureCaptureUpdateFinished(cap_session);
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_fixed_started):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed started");
|
||||||
|
emit captureCaptureFixedStarted(cap_session);
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_fixed_continue):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed continue");
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_fixed_finished):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed finished");
|
||||||
|
emit captureCaptureFixedFinished(cap_session);
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_stopping):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture stopping");
|
||||||
|
/* Beware: this state won't be called, if the capture child
|
||||||
|
* closes the capturing on it's own! */
|
||||||
|
emit captureCaptureStopping(cap_session);
|
||||||
|
break;
|
||||||
|
case(capture_cb_capture_failed):
|
||||||
|
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture failed");
|
||||||
|
emit captureCaptureFailed(cap_session);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_warning("main_capture_callback: event %u unknown", event);
|
||||||
|
}
|
||||||
|
#endif // HAVE_LIBPCAP
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Editor modelines
|
||||||
|
*
|
||||||
|
* Local Variables:
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*
|
||||||
|
* ex: set shiftwidth=4 tabstop=8 expandtab:
|
||||||
|
* :indentSize=4:tabSize=8:noTabs=true:
|
||||||
|
*/
|
|
@ -0,0 +1,92 @@
|
||||||
|
/* capture_file.h
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CAPTURE_FILE_H
|
||||||
|
#define CAPTURE_FILE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
typedef struct _capture_file capture_file;
|
||||||
|
typedef struct _capture_session capture_session;
|
||||||
|
|
||||||
|
class CaptureFile : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit CaptureFile(QObject *parent = 0, capture_file *cap_file = NULL);
|
||||||
|
~CaptureFile();
|
||||||
|
|
||||||
|
capture_file *capFile() const { return cap_file_; }
|
||||||
|
void setCapFile(capture_file *cap_file) { cap_file_ = cap_file; }
|
||||||
|
|
||||||
|
// XXX This shouldn't be needed.
|
||||||
|
static capture_file *globalCapFile();
|
||||||
|
|
||||||
|
gpointer window();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void captureFileOpened() const;
|
||||||
|
void captureFileReadStarted() const;
|
||||||
|
void captureFileReadFinished() const;
|
||||||
|
void captureFileClosing() const;
|
||||||
|
void captureFileClosed() const;
|
||||||
|
|
||||||
|
void captureCapturePrepared(capture_session *cap_session);
|
||||||
|
void captureCaptureUpdateStarted(capture_session *cap_session);
|
||||||
|
void captureCaptureUpdateContinue(capture_session *cap_session);
|
||||||
|
void captureCaptureUpdateFinished(capture_session *cap_session);
|
||||||
|
void captureCaptureFixedStarted(capture_session *cap_session);
|
||||||
|
void captureCaptureFixedFinished(capture_session *cap_session);
|
||||||
|
void captureCaptureStopping(capture_session *cap_session);
|
||||||
|
void captureCaptureFailed(capture_session *cap_session);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void captureFileCallback(gint event, gpointer data, gpointer user_data);
|
||||||
|
#ifdef HAVE_LIBPCAP
|
||||||
|
static void captureCallback(gint event, capture_session *cap_session, gpointer user_data);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void captureFileEvent(int event, gpointer data);
|
||||||
|
void captureEvent(int event, capture_session *cap_session);
|
||||||
|
|
||||||
|
capture_file *cap_file_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CAPTURE_FILE_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Editor modelines
|
||||||
|
*
|
||||||
|
* Local Variables:
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*
|
||||||
|
* ex: set shiftwidth=4 tabstop=8 expandtab:
|
||||||
|
* :indentSize=4:tabSize=8:noTabs=true:
|
||||||
|
*/
|
|
@ -25,8 +25,6 @@
|
||||||
#include "main_window.h"
|
#include "main_window.h"
|
||||||
#include "wireshark_application.h"
|
#include "wireshark_application.h"
|
||||||
|
|
||||||
#include "globals.h"
|
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
@ -143,6 +141,7 @@
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "capture_file.h"
|
||||||
#include "conversation_dialog.h"
|
#include "conversation_dialog.h"
|
||||||
#include "endpoint_dialog.h"
|
#include "endpoint_dialog.h"
|
||||||
|
|
||||||
|
@ -150,34 +149,12 @@
|
||||||
capture_options global_capture_opts;
|
capture_options global_capture_opts;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
capture_file cfile;
|
|
||||||
|
|
||||||
#ifdef HAVE_AIRPCAP
|
#ifdef HAVE_AIRPCAP
|
||||||
int airpcap_dll_ret_val = -1;
|
int airpcap_dll_ret_val = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GString *comp_info_str, *runtime_info_str;
|
GString *comp_info_str, *runtime_info_str;
|
||||||
|
|
||||||
//static gboolean have_capture_file = FALSE; /* XXX - is there an equivalent in cfile? */
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBPCAP
|
|
||||||
extern capture_options global_capture_opts;
|
|
||||||
|
|
||||||
static void
|
|
||||||
main_capture_callback(gint event, capture_session *cap_session, gpointer user_data )
|
|
||||||
{
|
|
||||||
Q_UNUSED(user_data);
|
|
||||||
wsApp->captureCallback(event, cap_session);
|
|
||||||
}
|
|
||||||
#endif // HAVE_LIBPCAP
|
|
||||||
|
|
||||||
static void
|
|
||||||
main_cf_callback(gint event, gpointer data, gpointer user_data )
|
|
||||||
{
|
|
||||||
Q_UNUSED(user_data);
|
|
||||||
wsApp->captureFileCallback(event, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update the main window */
|
/* update the main window */
|
||||||
void main_window_update(void)
|
void main_window_update(void)
|
||||||
{
|
{
|
||||||
|
@ -828,11 +805,6 @@ int main(int argc, char *argv[])
|
||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBPCAP
|
|
||||||
capture_callback_add(main_capture_callback, NULL);
|
|
||||||
#endif
|
|
||||||
cf_callback_add(main_cf_callback, NULL);
|
|
||||||
|
|
||||||
set_console_log_handler();
|
set_console_log_handler();
|
||||||
|
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
|
@ -1294,7 +1266,7 @@ int main(int argc, char *argv[])
|
||||||
set_disabled_protos_list();
|
set_disabled_protos_list();
|
||||||
}
|
}
|
||||||
|
|
||||||
build_column_format_array(&cfile.cinfo, prefs_p->num_cols, TRUE);
|
build_column_format_array(&CaptureFile::globalCapFile()->cinfo, prefs_p->num_cols, TRUE);
|
||||||
|
|
||||||
wsApp->setMonospaceFont(prefs.gui_qt_font_name);
|
wsApp->setMonospaceFont(prefs.gui_qt_font_name);
|
||||||
|
|
||||||
|
@ -1355,7 +1327,7 @@ int main(int argc, char *argv[])
|
||||||
if(go_to_packet != 0) {
|
if(go_to_packet != 0) {
|
||||||
/* Jump to the specified frame number, kept for backward
|
/* Jump to the specified frame number, kept for backward
|
||||||
compatibility. */
|
compatibility. */
|
||||||
cf_goto_frame(&cfile, go_to_packet);
|
cf_goto_frame(CaptureFile::globalCapFile(), go_to_packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
|
@ -1377,7 +1349,7 @@ int main(int argc, char *argv[])
|
||||||
to use for this capture. */
|
to use for this capture. */
|
||||||
if (global_capture_opts.ifaces->len == 0)
|
if (global_capture_opts.ifaces->len == 0)
|
||||||
collect_ifaces(&global_capture_opts);
|
collect_ifaces(&global_capture_opts);
|
||||||
cfile.window = main_w;
|
CaptureFile::globalCapFile()->window = main_w;
|
||||||
if (capture_start(&global_capture_opts, main_w->captureSession(), main_window_update)) {
|
if (capture_start(&global_capture_opts, main_w->captureSession(), main_window_update)) {
|
||||||
/* The capture started. Open stat windows; we do so after creating
|
/* The capture started. Open stat windows; we do so after creating
|
||||||
the main window, to avoid GTK warnings, and after successfully
|
the main window, to avoid GTK warnings, and after successfully
|
||||||
|
|
|
@ -22,8 +22,6 @@
|
||||||
#include "main_window.h"
|
#include "main_window.h"
|
||||||
#include "ui_main_window.h"
|
#include "ui_main_window.h"
|
||||||
|
|
||||||
#include "globals.h"
|
|
||||||
|
|
||||||
#include <epan/addr_resolv.h>
|
#include <epan/addr_resolv.h>
|
||||||
#include <epan/epan_dissect.h>
|
#include <epan/epan_dissect.h>
|
||||||
#include <wsutil/filesystem.h>
|
#include <wsutil/filesystem.h>
|
||||||
|
@ -149,7 +147,6 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
QMainWindow(parent),
|
QMainWindow(parent),
|
||||||
main_ui_(new Ui::MainWindow),
|
main_ui_(new Ui::MainWindow),
|
||||||
df_combo_box_(new DisplayFilterCombo()),
|
df_combo_box_(new DisplayFilterCombo()),
|
||||||
cap_file_(NULL),
|
|
||||||
previous_focus_(NULL),
|
previous_focus_(NULL),
|
||||||
show_hide_actions_(NULL),
|
show_hide_actions_(NULL),
|
||||||
time_display_actions_(NULL),
|
time_display_actions_(NULL),
|
||||||
|
@ -168,7 +165,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
}
|
}
|
||||||
gbl_cur_main_window_ = this;
|
gbl_cur_main_window_ = this;
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
capture_session_init(&cap_session_, (void *)&cfile);
|
capture_session_init(&cap_session_, CaptureFile::globalCapFile());
|
||||||
#endif
|
#endif
|
||||||
main_ui_->setupUi(this);
|
main_ui_->setupUi(this);
|
||||||
setTitlebarForCaptureFile();
|
setTitlebarForCaptureFile();
|
||||||
|
@ -277,31 +274,37 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
initTimePrecisionFormatMenu();
|
initTimePrecisionFormatMenu();
|
||||||
updateNameResolutionActions();
|
updateNameResolutionActions();
|
||||||
|
|
||||||
connect(wsApp, SIGNAL(captureCapturePrepared(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCapturePrepared(capture_session *)),
|
||||||
this, SLOT(captureCapturePrepared(capture_session *)));
|
this, SLOT(captureCapturePrepared(capture_session *)));
|
||||||
connect(wsApp, SIGNAL(captureCaptureUpdateStarted(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCaptureUpdateStarted(capture_session *)),
|
||||||
this, SLOT(captureCaptureUpdateStarted(capture_session *)));
|
this, SLOT(captureCaptureUpdateStarted(capture_session *)));
|
||||||
connect(wsApp, SIGNAL(captureCaptureUpdateFinished(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCaptureUpdateFinished(capture_session *)),
|
||||||
this, SLOT(captureCaptureUpdateFinished(capture_session *)));
|
this, SLOT(captureCaptureUpdateFinished(capture_session *)));
|
||||||
connect(wsApp, SIGNAL(captureCaptureFixedStarted(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCaptureFixedStarted(capture_session *)),
|
||||||
this, SLOT(captureCaptureFixedStarted(capture_session *)));
|
this, SLOT(captureCaptureFixedStarted(capture_session *)));
|
||||||
connect(wsApp, SIGNAL(captureCaptureFixedFinished(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCaptureFixedFinished(capture_session *)),
|
||||||
this, SLOT(captureCaptureFixedFinished(capture_session *)));
|
this, SLOT(captureCaptureFixedFinished(capture_session *)));
|
||||||
connect(wsApp, SIGNAL(captureCaptureStopping(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCaptureStopping(capture_session *)),
|
||||||
this, SLOT(captureCaptureStopping(capture_session *)));
|
this, SLOT(captureCaptureStopping(capture_session *)));
|
||||||
connect(wsApp, SIGNAL(captureCaptureFailed(capture_session *)),
|
connect(&capture_file_, SIGNAL(captureCaptureFailed(capture_session *)),
|
||||||
this, SLOT(captureCaptureFailed(capture_session *)));
|
this, SLOT(captureCaptureFailed(capture_session *)));
|
||||||
|
|
||||||
connect(wsApp, SIGNAL(captureFileOpened(const capture_file*)),
|
connect(&capture_file_, SIGNAL(captureFileOpened()),
|
||||||
this, SLOT(captureFileOpened(const capture_file*)));
|
this, SLOT(captureFileOpened()));
|
||||||
connect(wsApp, SIGNAL(captureFileReadStarted(const capture_file*)),
|
connect(&capture_file_, SIGNAL(captureFileReadStarted()),
|
||||||
this, SLOT(captureFileReadStarted(const capture_file*)));
|
this, SLOT(captureFileReadStarted()));
|
||||||
connect(wsApp, SIGNAL(captureFileReadFinished(const capture_file*)),
|
connect(&capture_file_, SIGNAL(captureFileReadFinished()),
|
||||||
this, SLOT(captureFileReadFinished(const capture_file*)));
|
this, SLOT(captureFileReadFinished()));
|
||||||
connect(wsApp, SIGNAL(captureFileClosing(const capture_file*)),
|
connect(&capture_file_, SIGNAL(captureFileClosing()),
|
||||||
this, SLOT(captureFileClosing(const capture_file*)));
|
this, SLOT(captureFileClosing()));
|
||||||
connect(wsApp, SIGNAL(captureFileClosed(const capture_file*)),
|
connect(&capture_file_, SIGNAL(captureFileClosed()),
|
||||||
this, SLOT(captureFileClosed(const capture_file*)));
|
this, SLOT(captureFileClosed()));
|
||||||
|
|
||||||
|
connect(&capture_file_, SIGNAL(captureFileReadStarted()),
|
||||||
|
wsApp, SLOT(captureFileReadStarted()));
|
||||||
|
connect(&capture_file_, SIGNAL(captureFileReadFinished()),
|
||||||
|
wsApp, SLOT(updateTaps()));
|
||||||
|
|
||||||
connect(wsApp, SIGNAL(columnsChanged()),
|
connect(wsApp, SIGNAL(columnsChanged()),
|
||||||
this, SLOT(recreatePacketList()));
|
this, SLOT(recreatePacketList()));
|
||||||
connect(wsApp, SIGNAL(packetDissectionChanged()),
|
connect(wsApp, SIGNAL(packetDissectionChanged()),
|
||||||
|
@ -615,11 +618,11 @@ void MainWindow::mergeCaptureFile()
|
||||||
dfilter_t *rfcode = NULL;
|
dfilter_t *rfcode = NULL;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!cap_file_)
|
if (!capture_file_.capFile())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (prefs.gui_ask_unsaved) {
|
if (prefs.gui_ask_unsaved) {
|
||||||
if (cf_has_unsaved_data(cap_file_)) {
|
if (cf_has_unsaved_data(capture_file_.capFile())) {
|
||||||
QMessageBox msg_dialog;
|
QMessageBox msg_dialog;
|
||||||
gchar *display_basename;
|
gchar *display_basename;
|
||||||
int response;
|
int response;
|
||||||
|
@ -627,14 +630,14 @@ void MainWindow::mergeCaptureFile()
|
||||||
msg_dialog.setIcon(QMessageBox::Question);
|
msg_dialog.setIcon(QMessageBox::Question);
|
||||||
/* This file has unsaved data; ask the user whether to save
|
/* This file has unsaved data; ask the user whether to save
|
||||||
the capture. */
|
the capture. */
|
||||||
if (cap_file_->is_tempfile) {
|
if (capture_file_.capFile()->is_tempfile) {
|
||||||
msg_dialog.setText(tr("Save packets before merging?"));
|
msg_dialog.setText(tr("Save packets before merging?"));
|
||||||
msg_dialog.setInformativeText(tr("A temporary capture file can't be merged."));
|
msg_dialog.setInformativeText(tr("A temporary capture file can't be merged."));
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Format the message.
|
* Format the message.
|
||||||
*/
|
*/
|
||||||
display_basename = g_filename_display_basename(cap_file_->filename);
|
display_basename = g_filename_display_basename(capture_file_.capFile()->filename);
|
||||||
msg_dialog.setText(QString(tr("Save changes in \"%1\" before merging?")).arg(display_basename));
|
msg_dialog.setText(QString(tr("Save changes in \"%1\" before merging?")).arg(display_basename));
|
||||||
g_free(display_basename);
|
g_free(display_basename);
|
||||||
msg_dialog.setInformativeText(tr("Changes must be saved before the files can be merged."));
|
msg_dialog.setInformativeText(tr("Changes must be saved before the files can be merged."));
|
||||||
|
@ -649,7 +652,7 @@ void MainWindow::mergeCaptureFile()
|
||||||
|
|
||||||
case QMessageBox::Save:
|
case QMessageBox::Save:
|
||||||
/* Save the file but don't close it */
|
/* Save the file but don't close it */
|
||||||
saveCaptureFile(cap_file_, FALSE);
|
saveCaptureFile(capture_file_.capFile(), FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QMessageBox::Cancel:
|
case QMessageBox::Cancel:
|
||||||
|
@ -661,7 +664,7 @@ void MainWindow::mergeCaptureFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
CaptureFileDialog merge_dlg(this, cap_file_, display_filter);
|
CaptureFileDialog merge_dlg(this, capture_file_.capFile(), display_filter);
|
||||||
int file_type;
|
int file_type;
|
||||||
cf_status_t merge_status;
|
cf_status_t merge_status;
|
||||||
char *in_filenames[2];
|
char *in_filenames[2];
|
||||||
|
@ -689,7 +692,7 @@ void MainWindow::mergeCaptureFile()
|
||||||
|
|
||||||
if (merge_dlg.merge(file_name)) {
|
if (merge_dlg.merge(file_name)) {
|
||||||
if (dfilter_compile(display_filter.toUtf8().constData(), &rfcode)) {
|
if (dfilter_compile(display_filter.toUtf8().constData(), &rfcode)) {
|
||||||
cf_set_rfcode(cap_file_, rfcode);
|
cf_set_rfcode(capture_file_.capFile(), rfcode);
|
||||||
} else {
|
} else {
|
||||||
/* Not valid. Tell the user, and go back and run the file
|
/* Not valid. Tell the user, and go back and run the file
|
||||||
selection box again once they dismiss the alert. */
|
selection box again once they dismiss the alert. */
|
||||||
|
@ -703,23 +706,23 @@ void MainWindow::mergeCaptureFile()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_type = cap_file_->cd_t;
|
file_type = capture_file_.capFile()->cd_t;
|
||||||
|
|
||||||
/* Try to merge or append the two files */
|
/* Try to merge or append the two files */
|
||||||
tmpname = NULL;
|
tmpname = NULL;
|
||||||
if (merge_dlg.mergeType() == 0) {
|
if (merge_dlg.mergeType() == 0) {
|
||||||
/* chronological order */
|
/* chronological order */
|
||||||
in_filenames[0] = cap_file_->filename;
|
in_filenames[0] = capture_file_.capFile()->filename;
|
||||||
in_filenames[1] = file_name.toUtf8().data();
|
in_filenames[1] = file_name.toUtf8().data();
|
||||||
merge_status = cf_merge_files(&tmpname, 2, in_filenames, file_type, FALSE);
|
merge_status = cf_merge_files(&tmpname, 2, in_filenames, file_type, FALSE);
|
||||||
} else if (merge_dlg.mergeType() <= 0) {
|
} else if (merge_dlg.mergeType() <= 0) {
|
||||||
/* prepend file */
|
/* prepend file */
|
||||||
in_filenames[0] = file_name.toUtf8().data();
|
in_filenames[0] = file_name.toUtf8().data();
|
||||||
in_filenames[1] = cap_file_->filename;
|
in_filenames[1] = capture_file_.capFile()->filename;
|
||||||
merge_status = cf_merge_files(&tmpname, 2, in_filenames, file_type, TRUE);
|
merge_status = cf_merge_files(&tmpname, 2, in_filenames, file_type, TRUE);
|
||||||
} else {
|
} else {
|
||||||
/* append file */
|
/* append file */
|
||||||
in_filenames[0] = cap_file_->filename;
|
in_filenames[0] = capture_file_.capFile()->filename;
|
||||||
in_filenames[1] = file_name.toUtf8().data();
|
in_filenames[1] = file_name.toUtf8().data();
|
||||||
merge_status = cf_merge_files(&tmpname, 2, in_filenames, file_type, TRUE);
|
merge_status = cf_merge_files(&tmpname, 2, in_filenames, file_type, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -731,13 +734,13 @@ void MainWindow::mergeCaptureFile()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
cf_close(cap_file_);
|
cf_close(capture_file_.capFile());
|
||||||
|
|
||||||
/* Try to open the merged capture file. */
|
/* Try to open the merged capture file. */
|
||||||
cfile.window = this;
|
CaptureFile::globalCapFile()->window = this;
|
||||||
if (cf_open(&cfile, tmpname, WTAP_TYPE_AUTO, TRUE /* temporary file */, &err) != CF_OK) {
|
if (cf_open(CaptureFile::globalCapFile(), tmpname, WTAP_TYPE_AUTO, TRUE /* temporary file */, &err) != CF_OK) {
|
||||||
/* We couldn't open it; fail. */
|
/* We couldn't open it; fail. */
|
||||||
cfile.window = NULL;
|
CaptureFile::globalCapFile()->window = NULL;
|
||||||
if (rfcode != NULL)
|
if (rfcode != NULL)
|
||||||
dfilter_free(rfcode);
|
dfilter_free(rfcode);
|
||||||
g_free(tmpname);
|
g_free(tmpname);
|
||||||
|
@ -747,9 +750,9 @@ void MainWindow::mergeCaptureFile()
|
||||||
/* Attach the new read filter to "cf" ("cf_open()" succeeded, so
|
/* Attach the new read filter to "cf" ("cf_open()" succeeded, so
|
||||||
it closed the previous capture file, and thus destroyed any
|
it closed the previous capture file, and thus destroyed any
|
||||||
previous read filter attached to "cf"). */
|
previous read filter attached to "cf"). */
|
||||||
cfile.rfcode = rfcode;
|
CaptureFile::globalCapFile()->rfcode = rfcode;
|
||||||
|
|
||||||
switch (cf_read(&cfile, FALSE)) {
|
switch (cf_read(CaptureFile::globalCapFile(), FALSE)) {
|
||||||
|
|
||||||
case CF_READ_OK:
|
case CF_READ_OK:
|
||||||
case CF_READ_ERROR:
|
case CF_READ_ERROR:
|
||||||
|
@ -1017,16 +1020,16 @@ void MainWindow::exportSelectedPackets() {
|
||||||
gchar *dirname;
|
gchar *dirname;
|
||||||
gboolean discard_comments = FALSE;
|
gboolean discard_comments = FALSE;
|
||||||
|
|
||||||
if (!cap_file_)
|
if (!capture_file_.capFile())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Init the packet range */
|
/* Init the packet range */
|
||||||
packet_range_init(&range, cap_file_);
|
packet_range_init(&range, capture_file_.capFile());
|
||||||
range.process_filtered = TRUE;
|
range.process_filtered = TRUE;
|
||||||
range.include_dependents = TRUE;
|
range.include_dependents = TRUE;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
CaptureFileDialog esp_dlg(this, cap_file_);
|
CaptureFileDialog esp_dlg(this, capture_file_.capFile());
|
||||||
|
|
||||||
switch (prefs.gui_fileopen_style) {
|
switch (prefs.gui_fileopen_style) {
|
||||||
|
|
||||||
|
@ -1091,7 +1094,7 @@ void MainWindow::exportSelectedPackets() {
|
||||||
* name and the read file name may be relative (if supplied on
|
* name and the read file name may be relative (if supplied on
|
||||||
* the command line). From Joerg Mayer.
|
* the command line). From Joerg Mayer.
|
||||||
*/
|
*/
|
||||||
if (files_identical(cap_file_->filename, file_name.toUtf8().constData())) {
|
if (files_identical(capture_file_.capFile()->filename, file_name.toUtf8().constData())) {
|
||||||
QMessageBox msg_box;
|
QMessageBox msg_box;
|
||||||
gchar *display_basename = g_filename_display_basename(file_name.toUtf8().constData());
|
gchar *display_basename = g_filename_display_basename(file_name.toUtf8().constData());
|
||||||
|
|
||||||
|
@ -1119,7 +1122,7 @@ void MainWindow::exportSelectedPackets() {
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
/* Attempt to save the file */
|
/* Attempt to save the file */
|
||||||
status = cf_export_specified_packets(cap_file_, file_name.toUtf8().constData(), &range, file_type, compressed);
|
status = cf_export_specified_packets(capture_file_.capFile(), file_name.toUtf8().constData(), &range, file_type, compressed);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
|
|
||||||
case CF_WRITE_OK:
|
case CF_WRITE_OK:
|
||||||
|
@ -1147,14 +1150,14 @@ void MainWindow::exportSelectedPackets() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::exportDissections(export_type_e export_type) {
|
void MainWindow::exportDissections(export_type_e export_type) {
|
||||||
ExportDissectionDialog ed_dlg(this, cap_file_, export_type);
|
ExportDissectionDialog ed_dlg(this, capture_file_.capFile(), export_type);
|
||||||
packet_range_t range;
|
packet_range_t range;
|
||||||
|
|
||||||
if (!cap_file_)
|
if (!capture_file_.capFile())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Init the packet range */
|
/* Init the packet range */
|
||||||
packet_range_init(&range, cap_file_);
|
packet_range_init(&range, capture_file_.capFile());
|
||||||
range.process_filtered = TRUE;
|
range.process_filtered = TRUE;
|
||||||
range.include_dependents = TRUE;
|
range.include_dependents = TRUE;
|
||||||
|
|
||||||
|
@ -1220,11 +1223,11 @@ void MainWindow::fileAddExtension(QString &file_name, int file_type, bool compre
|
||||||
bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
bool capture_in_progress = FALSE;
|
bool capture_in_progress = FALSE;
|
||||||
|
|
||||||
if (!cap_file_ || cap_file_->state == FILE_CLOSED)
|
if (!capture_file_.capFile() || capture_file_.capFile()->state == FILE_CLOSED)
|
||||||
return true; /* Already closed, nothing to do */
|
return true; /* Already closed, nothing to do */
|
||||||
|
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
if (cap_file_->state == FILE_READ_IN_PROGRESS) {
|
if (capture_file_.capFile()->state == FILE_READ_IN_PROGRESS) {
|
||||||
/* This is true if we're reading a capture file *or* if we're doing
|
/* This is true if we're reading a capture file *or* if we're doing
|
||||||
a live capture. If we're reading a capture file, the main loop
|
a live capture. If we're reading a capture file, the main loop
|
||||||
is busy reading packets, and only accepting input from the
|
is busy reading packets, and only accepting input from the
|
||||||
|
@ -1235,7 +1238,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (prefs.gui_ask_unsaved) {
|
if (prefs.gui_ask_unsaved) {
|
||||||
if (cf_has_unsaved_data(cap_file_) || capture_in_progress) {
|
if (cf_has_unsaved_data(capture_file_.capFile()) || capture_in_progress) {
|
||||||
QMessageBox msg_dialog;
|
QMessageBox msg_dialog;
|
||||||
QString question;
|
QString question;
|
||||||
QPushButton *saveButton;
|
QPushButton *saveButton;
|
||||||
|
@ -1245,7 +1248,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
msg_dialog.setWindowTitle("Unsaved packets...");
|
msg_dialog.setWindowTitle("Unsaved packets...");
|
||||||
/* This file has unsaved data or there's a capture in
|
/* This file has unsaved data or there's a capture in
|
||||||
progress; ask the user whether to save the data. */
|
progress; ask the user whether to save the data. */
|
||||||
if (cap_file_->is_tempfile) {
|
if (capture_file_.capFile()->is_tempfile) {
|
||||||
|
|
||||||
msg_dialog.setText(tr("You have unsaved packets"));
|
msg_dialog.setText(tr("You have unsaved packets"));
|
||||||
msg_dialog.setInformativeText(tr("They will be lost if you don't save them."));
|
msg_dialog.setInformativeText(tr("They will be lost if you don't save them."));
|
||||||
|
@ -1269,7 +1272,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
msg_dialog.setText(question);
|
msg_dialog.setText(question);
|
||||||
msg_dialog.setInformativeText(tr("Your captured packets will be lost if you don't save them."));
|
msg_dialog.setInformativeText(tr("Your captured packets will be lost if you don't save them."));
|
||||||
} else {
|
} else {
|
||||||
gchar *display_basename = g_filename_display_basename(cap_file_->filename);
|
gchar *display_basename = g_filename_display_basename(capture_file_.capFile()->filename);
|
||||||
question.append(QString(tr("Do you want to save the changes you've made to the capture file \"%1\"%2?"))
|
question.append(QString(tr("Do you want to save the changes you've made to the capture file \"%1\"%2?"))
|
||||||
.arg(display_basename)
|
.arg(display_basename)
|
||||||
.arg(before_what)
|
.arg(before_what)
|
||||||
|
@ -1295,7 +1298,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
msg_dialog.setDefaultButton(saveButton);
|
msg_dialog.setDefaultButton(saveButton);
|
||||||
|
|
||||||
if (from_quit) {
|
if (from_quit) {
|
||||||
if (cap_file_->state == FILE_READ_IN_PROGRESS) {
|
if (capture_file_.capFile()->state == FILE_READ_IN_PROGRESS) {
|
||||||
discardButton = msg_dialog.addButton(tr("Stop and Quit without Saving"),
|
discardButton = msg_dialog.addButton(tr("Stop and Quit without Saving"),
|
||||||
QMessageBox::DestructiveRole);
|
QMessageBox::DestructiveRole);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1326,7 +1329,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
captureStop();
|
captureStop();
|
||||||
#endif
|
#endif
|
||||||
/* Save the file and close it */
|
/* Save the file and close it */
|
||||||
saveCaptureFile(cap_file_, TRUE);
|
saveCaptureFile(capture_file_.capFile(), TRUE);
|
||||||
}
|
}
|
||||||
else if(msg_dialog.clickedButton() == discardButton)
|
else if(msg_dialog.clickedButton() == discardButton)
|
||||||
{
|
{
|
||||||
|
@ -1339,7 +1342,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
captureStop();
|
captureStop();
|
||||||
#endif
|
#endif
|
||||||
/* Just close the file, discarding changes */
|
/* Just close the file, discarding changes */
|
||||||
cf_close(cap_file_);
|
cf_close(capture_file_.capFile());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else //cancelButton or some other unspecified button
|
else //cancelButton or some other unspecified button
|
||||||
|
@ -1349,7 +1352,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* Unchanged file, just close it */
|
/* Unchanged file, just close it */
|
||||||
cf_close(cap_file_);
|
cf_close(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* User asked not to be bothered by those prompts, just close it.
|
/* User asked not to be bothered by those prompts, just close it.
|
||||||
|
@ -1360,7 +1363,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
if (capture_in_progress)
|
if (capture_in_progress)
|
||||||
captureStop();
|
captureStop();
|
||||||
#endif
|
#endif
|
||||||
cf_close(cap_file_);
|
cf_close(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true; /* File closed */
|
return true; /* File closed */
|
||||||
|
@ -1369,7 +1372,7 @@ bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
void MainWindow::captureStop() {
|
void MainWindow::captureStop() {
|
||||||
stopCapture();
|
stopCapture();
|
||||||
|
|
||||||
while(cap_file_ && cap_file_->state == FILE_READ_IN_PROGRESS) {
|
while(capture_file_.capFile() && capture_file_.capFile()->state == FILE_READ_IN_PROGRESS) {
|
||||||
WiresharkApplication::processEvents();
|
WiresharkApplication::processEvents();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1520,7 +1523,7 @@ void MainWindow::initTimePrecisionFormatMenu()
|
||||||
// Titlebar
|
// Titlebar
|
||||||
void MainWindow::setTitlebarForCaptureFile()
|
void MainWindow::setTitlebarForCaptureFile()
|
||||||
{
|
{
|
||||||
if (cap_file_ && cap_file_->filename) {
|
if (capture_file_.capFile() && capture_file_.capFile()->filename) {
|
||||||
//
|
//
|
||||||
// Qt *REALLY* doesn't like windows that sometimes have a
|
// Qt *REALLY* doesn't like windows that sometimes have a
|
||||||
// title set with setWindowTitle() and other times have a
|
// title set with setWindowTitle() and other times have a
|
||||||
|
@ -1541,7 +1544,7 @@ void MainWindow::setTitlebarForCaptureFile()
|
||||||
// live capture at time T1 and then, after you've saved the live
|
// live capture at time T1 and then, after you've saved the live
|
||||||
// capture to a user file, associated with a user file at time T2.
|
// capture to a user file, associated with a user file at time T2.
|
||||||
//
|
//
|
||||||
if (cap_file_->is_tempfile) {
|
if (capture_file_.capFile()->is_tempfile) {
|
||||||
//
|
//
|
||||||
// For a temporary file, put the source of the data
|
// For a temporary file, put the source of the data
|
||||||
// in the window title, not whatever random pile
|
// in the window title, not whatever random pile
|
||||||
|
@ -1553,7 +1556,7 @@ void MainWindow::setTitlebarForCaptureFile()
|
||||||
//
|
//
|
||||||
gchar *window_name;
|
gchar *window_name;
|
||||||
setWindowFilePath(NULL);
|
setWindowFilePath(NULL);
|
||||||
window_name = g_strdup_printf("Capturing from %s[*]", cf_get_tempfile_source(cap_file_)); //TODO : Fix Translate
|
window_name = g_strdup_printf("Capturing from %s[*]", cf_get_tempfile_source(capture_file_.capFile())); //TODO : Fix Translate
|
||||||
setWindowTitle(window_name);
|
setWindowTitle(window_name);
|
||||||
g_free(window_name);
|
g_free(window_name);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1567,7 +1570,7 @@ void MainWindow::setTitlebarForCaptureFile()
|
||||||
// file path to UTF-8. If that fails, we're somewhat
|
// file path to UTF-8. If that fails, we're somewhat
|
||||||
// stuck.
|
// stuck.
|
||||||
//
|
//
|
||||||
char *utf8_filename = g_filename_to_utf8(cap_file_->filename,
|
char *utf8_filename = g_filename_to_utf8(capture_file_.capFile()->filename,
|
||||||
-1,
|
-1,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -1582,7 +1585,7 @@ void MainWindow::setTitlebarForCaptureFile()
|
||||||
g_free(utf8_filename);
|
g_free(utf8_filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setWindowModified(cf_has_unsaved_data(cap_file_));
|
setWindowModified(cf_has_unsaved_data(capture_file_.capFile()));
|
||||||
} else {
|
} else {
|
||||||
/* We have no capture file. */
|
/* We have no capture file. */
|
||||||
setWindowFilePath(NULL);
|
setWindowFilePath(NULL);
|
||||||
|
@ -1601,8 +1604,8 @@ void MainWindow::setTitlebarForCaptureInProgress()
|
||||||
gchar *window_name;
|
gchar *window_name;
|
||||||
|
|
||||||
setWindowFilePath(NULL);
|
setWindowFilePath(NULL);
|
||||||
if (cap_file_) {
|
if (capture_file_.capFile()) {
|
||||||
window_name = g_strdup_printf("Capturing from %s", cf_get_tempfile_source(cap_file_)); //TODO : Fix Translate
|
window_name = g_strdup_printf("Capturing from %s", cf_get_tempfile_source(capture_file_.capFile())); //TODO : Fix Translate
|
||||||
setWindowTitle(window_name);
|
setWindowTitle(window_name);
|
||||||
g_free(window_name);
|
g_free(window_name);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1617,17 +1620,17 @@ void MainWindow::setMenusForFollowStream()
|
||||||
{
|
{
|
||||||
gboolean is_tcp = FALSE, is_udp = FALSE;
|
gboolean is_tcp = FALSE, is_udp = FALSE;
|
||||||
|
|
||||||
if (!cap_file_)
|
if (!capture_file_.capFile())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!cap_file_->edt)
|
if (!capture_file_.capFile()->edt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
main_ui_->actionAnalyzeFollowTCPStream->setEnabled(false);
|
main_ui_->actionAnalyzeFollowTCPStream->setEnabled(false);
|
||||||
main_ui_->actionAnalyzeFollowUDPStream->setEnabled(false);
|
main_ui_->actionAnalyzeFollowUDPStream->setEnabled(false);
|
||||||
main_ui_->actionAnalyzeFollowSSLStream->setEnabled(false);
|
main_ui_->actionAnalyzeFollowSSLStream->setEnabled(false);
|
||||||
|
|
||||||
proto_get_frame_protocols(cap_file_->edt->pi.layers, NULL, &is_tcp, &is_udp, NULL, NULL);
|
proto_get_frame_protocols(capture_file_.capFile()->edt->pi.layers, NULL, &is_tcp, &is_udp, NULL, NULL);
|
||||||
|
|
||||||
if (is_tcp)
|
if (is_tcp)
|
||||||
{
|
{
|
||||||
|
@ -1639,7 +1642,7 @@ void MainWindow::setMenusForFollowStream()
|
||||||
main_ui_->actionAnalyzeFollowUDPStream->setEnabled(true);
|
main_ui_->actionAnalyzeFollowUDPStream->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( epan_dissect_packet_contains_field(cap_file_->edt, "ssl") )
|
if ( epan_dissect_packet_contains_field(capture_file_.capFile()->edt, "ssl") )
|
||||||
{
|
{
|
||||||
main_ui_->actionAnalyzeFollowSSLStream->setEnabled(true);
|
main_ui_->actionAnalyzeFollowSSLStream->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
@ -1650,7 +1653,7 @@ void MainWindow::setMenusForFollowStream()
|
||||||
and whether it could be saved except by copying the raw packet data. */
|
and whether it could be saved except by copying the raw packet data. */
|
||||||
void MainWindow::setMenusForCaptureFile(bool force_disable)
|
void MainWindow::setMenusForCaptureFile(bool force_disable)
|
||||||
{
|
{
|
||||||
if (force_disable || cap_file_ == NULL || cap_file_->state == FILE_READ_IN_PROGRESS) {
|
if (force_disable || capture_file_.capFile() == NULL || capture_file_.capFile()->state == FILE_READ_IN_PROGRESS) {
|
||||||
/* We have no capture file or we're currently reading a file */
|
/* We have no capture file or we're currently reading a file */
|
||||||
main_ui_->actionFileMerge->setEnabled(false);
|
main_ui_->actionFileMerge->setEnabled(false);
|
||||||
main_ui_->actionFileClose->setEnabled(false);
|
main_ui_->actionFileClose->setEnabled(false);
|
||||||
|
@ -1665,17 +1668,17 @@ void MainWindow::setMenusForCaptureFile(bool force_disable)
|
||||||
main_ui_->menuFileExportObjects->setEnabled(false);
|
main_ui_->menuFileExportObjects->setEnabled(false);
|
||||||
main_ui_->actionViewReload->setEnabled(false);
|
main_ui_->actionViewReload->setEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
main_ui_->actionFileMerge->setEnabled(cf_can_write_with_wiretap(cap_file_));
|
main_ui_->actionFileMerge->setEnabled(cf_can_write_with_wiretap(capture_file_.capFile()));
|
||||||
|
|
||||||
main_ui_->actionFileClose->setEnabled(true);
|
main_ui_->actionFileClose->setEnabled(true);
|
||||||
main_ui_->actionFileSave->setEnabled(cf_can_save(cap_file_));
|
main_ui_->actionFileSave->setEnabled(cf_can_save(capture_file_.capFile()));
|
||||||
main_ui_->actionFileSaveAs->setEnabled(cf_can_save_as(cap_file_));
|
main_ui_->actionFileSaveAs->setEnabled(cf_can_save_as(capture_file_.capFile()));
|
||||||
main_ui_->actionStatisticsCaptureFileProperties->setEnabled(true);
|
main_ui_->actionStatisticsCaptureFileProperties->setEnabled(true);
|
||||||
/*
|
/*
|
||||||
* "Export Specified Packets..." should be available only if
|
* "Export Specified Packets..." should be available only if
|
||||||
* we can write the file out in at least one format.
|
* we can write the file out in at least one format.
|
||||||
*/
|
*/
|
||||||
main_ui_->actionFileExportPackets->setEnabled(cf_can_write_with_wiretap(cap_file_));
|
main_ui_->actionFileExportPackets->setEnabled(cf_can_write_with_wiretap(capture_file_.capFile()));
|
||||||
main_ui_->menuFileExportPacketDissections->setEnabled(true);
|
main_ui_->menuFileExportPacketDissections->setEnabled(true);
|
||||||
main_ui_->actionFileExportPacketBytes->setEnabled(true);
|
main_ui_->actionFileExportPacketBytes->setEnabled(true);
|
||||||
main_ui_->actionFileExportPDU->setEnabled(true);
|
main_ui_->actionFileExportPDU->setEnabled(true);
|
||||||
|
|
|
@ -48,16 +48,18 @@
|
||||||
# include <QSocketNotifier>
|
# include <QSocketNotifier>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "main_welcome.h"
|
#include "about_dialog.h"
|
||||||
#include "packet_list.h"
|
#include "capture_file.h"
|
||||||
|
#include "capture_file_dialog.h"
|
||||||
|
#include "capture_file_properties_dialog.h"
|
||||||
|
#include "capture_interfaces_dialog.h"
|
||||||
#include "display_filter_combo.h"
|
#include "display_filter_combo.h"
|
||||||
#include "progress_bar.h"
|
|
||||||
#include "file_set_dialog.h"
|
#include "file_set_dialog.h"
|
||||||
#include "filter_action.h"
|
#include "filter_action.h"
|
||||||
#include "capture_file_dialog.h"
|
|
||||||
#include "follow_stream_dialog.h"
|
#include "follow_stream_dialog.h"
|
||||||
#include "capture_interfaces_dialog.h"
|
#include "main_welcome.h"
|
||||||
#include "about_dialog.h"
|
#include "packet_list.h"
|
||||||
|
#include "progress_bar.h"
|
||||||
|
|
||||||
class QAction;
|
class QAction;
|
||||||
class QActionGroup;
|
class QActionGroup;
|
||||||
|
@ -108,7 +110,7 @@ private:
|
||||||
QSplitter extra_split_;
|
QSplitter extra_split_;
|
||||||
MainWelcome *main_welcome_;
|
MainWelcome *main_welcome_;
|
||||||
DisplayFilterCombo *df_combo_box_;
|
DisplayFilterCombo *df_combo_box_;
|
||||||
capture_file *cap_file_;
|
CaptureFile capture_file_;
|
||||||
QFont mono_font_;
|
QFont mono_font_;
|
||||||
// XXX - packet_list_, proto_tree_, and byte_view_tab_ should
|
// XXX - packet_list_, proto_tree_, and byte_view_tab_ should
|
||||||
// probably be full-on values instead of pointers.
|
// probably be full-on values instead of pointers.
|
||||||
|
@ -186,7 +188,7 @@ public slots:
|
||||||
void layoutToolbars();
|
void layoutToolbars();
|
||||||
void updateNameResolutionActions();
|
void updateNameResolutionActions();
|
||||||
|
|
||||||
void captureCapturePrepared(capture_session *cap_session);
|
void captureCapturePrepared(capture_session *);
|
||||||
void captureCaptureUpdateStarted(capture_session *cap_session);
|
void captureCaptureUpdateStarted(capture_session *cap_session);
|
||||||
void captureCaptureUpdateFinished(capture_session *cap_session);
|
void captureCaptureUpdateFinished(capture_session *cap_session);
|
||||||
void captureCaptureFixedStarted(capture_session *cap_session);
|
void captureCaptureFixedStarted(capture_session *cap_session);
|
||||||
|
@ -194,11 +196,11 @@ public slots:
|
||||||
void captureCaptureStopping(capture_session *cap_session);
|
void captureCaptureStopping(capture_session *cap_session);
|
||||||
void captureCaptureFailed(capture_session *cap_session);
|
void captureCaptureFailed(capture_session *cap_session);
|
||||||
|
|
||||||
void captureFileOpened(const capture_file *cf);
|
void captureFileOpened();
|
||||||
void captureFileReadStarted(const capture_file *cf);
|
void captureFileReadStarted();
|
||||||
void captureFileReadFinished(const capture_file *cf);
|
void captureFileReadFinished();
|
||||||
void captureFileClosing(const capture_file *cf);
|
void captureFileClosing();
|
||||||
void captureFileClosed(const capture_file *cf);
|
void captureFileClosed();
|
||||||
|
|
||||||
void configurationProfileChanged(const gchar *profile_name);
|
void configurationProfileChanged(const gchar *profile_name);
|
||||||
void filterExpressionsChanged();
|
void filterExpressionsChanged();
|
||||||
|
|
|
@ -32,8 +32,6 @@
|
||||||
#include "main_window.h"
|
#include "main_window.h"
|
||||||
#include "ui_main_window.h"
|
#include "ui_main_window.h"
|
||||||
|
|
||||||
#include "globals.h"
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
@ -128,7 +126,7 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
if (cf_path.isEmpty()) {
|
if (cf_path.isEmpty()) {
|
||||||
CaptureFileDialog open_dlg(this, cap_file_, read_filter);
|
CaptureFileDialog open_dlg(this, capture_file_.capFile(), read_filter);
|
||||||
|
|
||||||
switch (prefs.gui_fileopen_style) {
|
switch (prefs.gui_fileopen_style) {
|
||||||
|
|
||||||
|
@ -158,7 +156,7 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dfilter_compile(read_filter.toUtf8().constData(), &rfcode)) {
|
if (dfilter_compile(read_filter.toUtf8().constData(), &rfcode)) {
|
||||||
cf_set_rfcode(&cfile, rfcode);
|
cf_set_rfcode(CaptureFile::globalCapFile(), rfcode);
|
||||||
} else {
|
} else {
|
||||||
/* Not valid. Tell the user, and go back and run the file
|
/* Not valid. Tell the user, and go back and run the file
|
||||||
selection box again once they dismiss the alert. */
|
selection box again once they dismiss the alert. */
|
||||||
|
@ -179,20 +177,20 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to open the capture file. This closes the current file if it succeeds. */
|
/* Try to open the capture file. This closes the current file if it succeeds. */
|
||||||
cfile.window = this;
|
CaptureFile::globalCapFile()->window = this;
|
||||||
if (cf_open(&cfile, cf_path.toUtf8().constData(), type, FALSE, &err) != CF_OK) {
|
if (cf_open(CaptureFile::globalCapFile(), cf_path.toUtf8().constData(), type, FALSE, &err) != CF_OK) {
|
||||||
/* We couldn't open it; don't dismiss the open dialog box,
|
/* We couldn't open it; don't dismiss the open dialog box,
|
||||||
just leave it around so that the user can, after they
|
just leave it around so that the user can, after they
|
||||||
dismiss the alert box popped up for the open error,
|
dismiss the alert box popped up for the open error,
|
||||||
try again. */
|
try again. */
|
||||||
cfile.window = NULL;
|
CaptureFile::globalCapFile()->window = NULL;
|
||||||
if (rfcode != NULL)
|
if (rfcode != NULL)
|
||||||
dfilter_free(rfcode);
|
dfilter_free(rfcode);
|
||||||
cf_path.clear();
|
cf_path.clear();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (cf_read(&cfile, FALSE)) {
|
switch (cf_read(CaptureFile::globalCapFile(), FALSE)) {
|
||||||
|
|
||||||
case CF_READ_OK:
|
case CF_READ_OK:
|
||||||
case CF_READ_ERROR:
|
case CF_READ_ERROR:
|
||||||
|
@ -206,7 +204,7 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
|
||||||
capture file has been closed - just free the capture file name
|
capture file has been closed - just free the capture file name
|
||||||
string and return (without changing the last containing
|
string and return (without changing the last containing
|
||||||
directory). */
|
directory). */
|
||||||
cap_file_ = NULL;
|
capture_file_.setCapFile(NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -221,7 +219,7 @@ void MainWindow::filterPackets(QString& new_filter, bool force)
|
||||||
{
|
{
|
||||||
cf_status_t cf_status;
|
cf_status_t cf_status;
|
||||||
|
|
||||||
cf_status = cf_filter_packets(&cfile, new_filter.toUtf8().data(), force);
|
cf_status = cf_filter_packets(CaptureFile::globalCapFile(), new_filter.toUtf8().data(), force);
|
||||||
|
|
||||||
if (cf_status == CF_OK) {
|
if (cf_status == CF_OK) {
|
||||||
emit displayFilterSuccess(true);
|
emit displayFilterSuccess(true);
|
||||||
|
@ -415,7 +413,7 @@ void MainWindow::filterAction(QString &action_filter, FilterAction::Action actio
|
||||||
|
|
||||||
// Capture callbacks
|
// Capture callbacks
|
||||||
|
|
||||||
void MainWindow::captureCapturePrepared(capture_session *cap_session) {
|
void MainWindow::captureCapturePrepared(capture_session *) {
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
setTitlebarForCaptureInProgress();
|
setTitlebarForCaptureInProgress();
|
||||||
|
|
||||||
|
@ -429,11 +427,9 @@ void MainWindow::captureCapturePrepared(capture_session *cap_session) {
|
||||||
// /* Don't set up main window for a capture file. */
|
// /* Don't set up main window for a capture file. */
|
||||||
// main_set_for_capture_file(FALSE);
|
// main_set_for_capture_file(FALSE);
|
||||||
main_ui_->mainStack->setCurrentWidget(&master_split_);
|
main_ui_->mainStack->setCurrentWidget(&master_split_);
|
||||||
cap_file_ = (capture_file *) cap_session->cf;
|
|
||||||
#else
|
|
||||||
Q_UNUSED(cap_session)
|
|
||||||
#endif // HAVE_LIBPCAP
|
#endif // HAVE_LIBPCAP
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::captureCaptureUpdateStarted(capture_session *cap_session) {
|
void MainWindow::captureCaptureUpdateStarted(capture_session *cap_session) {
|
||||||
Q_UNUSED(cap_session);
|
Q_UNUSED(cap_session);
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
|
@ -523,42 +519,38 @@ void MainWindow::captureCaptureFailed(capture_session *cap_session) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Callbacks from cfile.c via WiresharkApplication::captureFileCallback
|
// Callbacks from cfile.c and file.c via CaptureFile::captureFileCallback
|
||||||
|
|
||||||
void MainWindow::captureFileOpened(const capture_file *cf) {
|
void MainWindow::captureFileOpened() {
|
||||||
if (cf->window != this) return;
|
if (capture_file_.window() != this) return;
|
||||||
cap_file_ = (capture_file *) cf;
|
|
||||||
|
|
||||||
file_set_dialog_.fileOpened(cf);
|
file_set_dialog_.fileOpened(capture_file_.capFile());
|
||||||
setMenusForFileSet(true);
|
setMenusForFileSet(true);
|
||||||
emit setCaptureFile(cap_file_);
|
emit setCaptureFile(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::captureFileReadStarted(const capture_file *cf) {
|
void MainWindow::captureFileReadStarted() {
|
||||||
if (cf != cap_file_) return;
|
|
||||||
// tap_param_dlg_update();
|
// tap_param_dlg_update();
|
||||||
|
|
||||||
/* Set up main window for a capture file. */
|
/* Set up main window for a capture file. */
|
||||||
// main_set_for_capture_file(TRUE);
|
// main_set_for_capture_file(TRUE);
|
||||||
|
|
||||||
main_ui_->statusBar->popFileStatus();
|
main_ui_->statusBar->popFileStatus();
|
||||||
QString msg = QString(tr("Loading: %1")).arg(get_basename(cf->filename));
|
QString msg = QString(tr("Loading: %1")).arg(get_basename(capture_file_.capFile()->filename));
|
||||||
main_ui_->statusBar->pushFileStatus(msg);
|
main_ui_->statusBar->pushFileStatus(msg);
|
||||||
main_ui_->mainStack->setCurrentWidget(&master_split_);
|
main_ui_->mainStack->setCurrentWidget(&master_split_);
|
||||||
WiresharkApplication::processEvents();
|
WiresharkApplication::processEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::captureFileReadFinished(const capture_file *cf) {
|
void MainWindow::captureFileReadFinished() {
|
||||||
if (cf != cap_file_) return;
|
|
||||||
|
|
||||||
gchar *dir_path;
|
gchar *dir_path;
|
||||||
|
|
||||||
if (!cf->is_tempfile && cf->filename) {
|
if (!capture_file_.capFile()->is_tempfile && capture_file_.capFile()->filename) {
|
||||||
/* Add this filename to the list of recent files in the "Recent Files" submenu */
|
/* Add this filename to the list of recent files in the "Recent Files" submenu */
|
||||||
add_menu_recent_capture_file(cf->filename);
|
add_menu_recent_capture_file(capture_file_.capFile()->filename);
|
||||||
|
|
||||||
/* Remember folder for next Open dialog and save it in recent */
|
/* Remember folder for next Open dialog and save it in recent */
|
||||||
dir_path = get_dirname(g_strdup(cf->filename));
|
dir_path = get_dirname(g_strdup(capture_file_.capFile()->filename));
|
||||||
wsApp->setLastOpenDir(dir_path);
|
wsApp->setLastOpenDir(dir_path);
|
||||||
g_free(dir_path);
|
g_free(dir_path);
|
||||||
}
|
}
|
||||||
|
@ -570,14 +562,12 @@ void MainWindow::captureFileReadFinished(const capture_file *cf) {
|
||||||
setForCapturedPackets(true);
|
setForCapturedPackets(true);
|
||||||
|
|
||||||
main_ui_->statusBar->popFileStatus();
|
main_ui_->statusBar->popFileStatus();
|
||||||
QString msg = QString().sprintf("%s", get_basename(cf->filename));
|
QString msg = QString().sprintf("%s", get_basename(capture_file_.capFile()->filename));
|
||||||
main_ui_->statusBar->pushFileStatus(msg);
|
main_ui_->statusBar->pushFileStatus(msg);
|
||||||
emit setDissectedCaptureFile(cap_file_);
|
emit setDissectedCaptureFile(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::captureFileClosing(const capture_file *cf) {
|
void MainWindow::captureFileClosing() {
|
||||||
if (cf != cap_file_) return;
|
|
||||||
|
|
||||||
setMenusForCaptureFile(true);
|
setMenusForCaptureFile(true);
|
||||||
setForCapturedPackets(false);
|
setForCapturedPackets(false);
|
||||||
setMenusForSelectedPacket();
|
setMenusForSelectedPacket();
|
||||||
|
@ -591,8 +581,7 @@ void MainWindow::captureFileClosing(const capture_file *cf) {
|
||||||
emit setDissectedCaptureFile(NULL);
|
emit setDissectedCaptureFile(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::captureFileClosed(const capture_file *cf) {
|
void MainWindow::captureFileClosed() {
|
||||||
if (cf != cap_file_) return;
|
|
||||||
packets_bar_update();
|
packets_bar_update();
|
||||||
|
|
||||||
file_set_dialog_.fileClosed();
|
file_set_dialog_.fileClosed();
|
||||||
|
@ -602,7 +591,6 @@ void MainWindow::captureFileClosed(const capture_file *cf) {
|
||||||
main_ui_->statusBar->hideExpert();
|
main_ui_->statusBar->hideExpert();
|
||||||
|
|
||||||
main_ui_->statusBar->popFileStatus();
|
main_ui_->statusBar->popFileStatus();
|
||||||
cap_file_ = NULL;
|
|
||||||
|
|
||||||
if (df_combo_box_)
|
if (df_combo_box_)
|
||||||
{
|
{
|
||||||
|
@ -694,7 +682,7 @@ void MainWindow::startCapture() {
|
||||||
this capture. */
|
this capture. */
|
||||||
collect_ifaces(&global_capture_opts);
|
collect_ifaces(&global_capture_opts);
|
||||||
|
|
||||||
cfile.window = this;
|
CaptureFile::globalCapFile()->window = this;
|
||||||
if (capture_start(&global_capture_opts, &cap_session_, main_window_update)) {
|
if (capture_start(&global_capture_opts, &cap_session_, main_window_update)) {
|
||||||
/* The capture succeeded, which means the capture filter syntax is
|
/* The capture succeeded, which means the capture filter syntax is
|
||||||
valid; add this capture filter to the recent capture filter list. */
|
valid; add this capture filter to the recent capture filter list. */
|
||||||
|
@ -705,7 +693,7 @@ void MainWindow::startCapture() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cfile.window = NULL;
|
CaptureFile::globalCapFile()->window = NULL;
|
||||||
}
|
}
|
||||||
#endif // HAVE_LIBPCAP
|
#endif // HAVE_LIBPCAP
|
||||||
}
|
}
|
||||||
|
@ -896,21 +884,21 @@ void MainWindow::setMenusForSelectedPacket()
|
||||||
time reference frame). (XXX - why check frame_selected?) */
|
time reference frame). (XXX - why check frame_selected?) */
|
||||||
gboolean another_is_time_ref = FALSE;
|
gboolean another_is_time_ref = FALSE;
|
||||||
|
|
||||||
if (cap_file_) {
|
if (capture_file_.capFile()) {
|
||||||
frame_selected = cap_file_->current_frame != NULL;
|
frame_selected = capture_file_.capFile()->current_frame != NULL;
|
||||||
have_frames = cap_file_->count > 0;
|
have_frames = capture_file_.capFile()->count > 0;
|
||||||
have_marked = frame_selected && cap_file_->marked_count > 0;
|
have_marked = frame_selected && capture_file_.capFile()->marked_count > 0;
|
||||||
another_is_marked = have_marked &&
|
another_is_marked = have_marked &&
|
||||||
!(cap_file_->marked_count == 1 && cap_file_->current_frame->flags.marked);
|
!(capture_file_.capFile()->marked_count == 1 && capture_file_.capFile()->current_frame->flags.marked);
|
||||||
have_filtered = cap_file_->displayed_count > 0 && cap_file_->displayed_count != cap_file_->count;
|
have_filtered = capture_file_.capFile()->displayed_count > 0 && capture_file_.capFile()->displayed_count != capture_file_.capFile()->count;
|
||||||
have_ignored = cap_file_->ignored_count > 0;
|
have_ignored = capture_file_.capFile()->ignored_count > 0;
|
||||||
have_time_ref = cap_file_->ref_time_count > 0;
|
have_time_ref = capture_file_.capFile()->ref_time_count > 0;
|
||||||
another_is_time_ref = frame_selected && have_time_ref &&
|
another_is_time_ref = frame_selected && have_time_ref &&
|
||||||
!(cap_file_->ref_time_count == 1 && cap_file_->current_frame->flags.ref_time);
|
!(capture_file_.capFile()->ref_time_count == 1 && capture_file_.capFile()->current_frame->flags.ref_time);
|
||||||
|
|
||||||
if (cap_file_->edt)
|
if (capture_file_.capFile()->edt)
|
||||||
{
|
{
|
||||||
proto_get_frame_protocols(cap_file_->edt->pi.layers, NULL, &is_tcp, NULL, &is_sctp, NULL);
|
proto_get_frame_protocols(capture_file_.capFile()->edt->pi.layers, NULL, &is_tcp, NULL, &is_sctp, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if (cfile.edt && cfile.edt->tree) {
|
// if (cfile.edt && cfile.edt->tree) {
|
||||||
|
@ -952,7 +940,7 @@ void MainWindow::setMenusForSelectedPacket()
|
||||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/EditPacket",
|
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/EditPacket",
|
||||||
// frame_selected);
|
// frame_selected);
|
||||||
//#endif /* WANT_PACKET_EDITOR */
|
//#endif /* WANT_PACKET_EDITOR */
|
||||||
main_ui_->actionEditPacketComment->setEnabled(frame_selected && wtap_dump_can_write(cap_file_->linktypes, WTAP_COMMENT_PER_PACKET));
|
main_ui_->actionEditPacketComment->setEnabled(frame_selected && wtap_dump_can_write(capture_file_.capFile()->linktypes, WTAP_COMMENT_PER_PACKET));
|
||||||
|
|
||||||
main_ui_->actionEditIgnorePacket->setEnabled(frame_selected);
|
main_ui_->actionEditIgnorePacket->setEnabled(frame_selected);
|
||||||
main_ui_->actionEditIgnoreAllDisplayed->setEnabled(have_filtered);
|
main_ui_->actionEditIgnoreAllDisplayed->setEnabled(have_filtered);
|
||||||
|
@ -1085,11 +1073,11 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) {
|
||||||
|
|
||||||
// XXX Add commented items below
|
// XXX Add commented items below
|
||||||
|
|
||||||
if (cap_file_) {
|
if (capture_file_.capFile()) {
|
||||||
cap_file_->finfo_selected = fi;
|
capture_file_.capFile()->finfo_selected = fi;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cap_file_ != NULL && fi != NULL) {
|
if (capture_file_.capFile() != NULL && fi != NULL) {
|
||||||
/*
|
/*
|
||||||
header_field_info *hfinfo = fi->hfinfo;
|
header_field_info *hfinfo = fi->hfinfo;
|
||||||
const char *abbrev;
|
const char *abbrev;
|
||||||
|
@ -1104,7 +1092,7 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) {
|
||||||
}
|
}
|
||||||
properties = prefs_is_registered_protocol(abbrev);
|
properties = prefs_is_registered_protocol(abbrev);
|
||||||
*/
|
*/
|
||||||
bool can_match_selected = proto_can_match_selected(cap_file_->finfo_selected, cap_file_->edt);
|
bool can_match_selected = proto_can_match_selected(capture_file_.capFile()->finfo_selected, capture_file_.capFile()->edt);
|
||||||
// set_menu_sensitivity(ui_manager_tree_view_menu,
|
// set_menu_sensitivity(ui_manager_tree_view_menu,
|
||||||
// "/TreeViewPopup/GotoCorrespondingPacket", hfinfo->type == FT_FRAMENUM);
|
// "/TreeViewPopup/GotoCorrespondingPacket", hfinfo->type == FT_FRAMENUM);
|
||||||
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy",
|
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/Copy",
|
||||||
|
@ -1159,7 +1147,7 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) {
|
||||||
main_ui_->actionAnalyzePAFAndNotSelected->setEnabled(can_match_selected);
|
main_ui_->actionAnalyzePAFAndNotSelected->setEnabled(can_match_selected);
|
||||||
main_ui_->actionAnalyzePAFOrNotSelected->setEnabled(can_match_selected);
|
main_ui_->actionAnalyzePAFOrNotSelected->setEnabled(can_match_selected);
|
||||||
|
|
||||||
main_ui_->actionViewExpandSubtrees->setEnabled(cap_file_->finfo_selected->tree_type != -1);
|
main_ui_->actionViewExpandSubtrees->setEnabled(capture_file_.capFile()->finfo_selected->tree_type != -1);
|
||||||
// prev_abbrev = g_object_get_data(G_OBJECT(ui_manager_tree_view_menu), "menu_abbrev");
|
// prev_abbrev = g_object_get_data(G_OBJECT(ui_manager_tree_view_menu), "menu_abbrev");
|
||||||
// if (!prev_abbrev || (strcmp (prev_abbrev, abbrev) != 0)) {
|
// if (!prev_abbrev || (strcmp (prev_abbrev, abbrev) != 0)) {
|
||||||
// /* No previous protocol or protocol changed - update Protocol Preferences menu */
|
// /* No previous protocol or protocol changed - update Protocol Preferences menu */
|
||||||
|
@ -1239,8 +1227,8 @@ void MainWindow::startInterfaceCapture(bool valid)
|
||||||
|
|
||||||
void MainWindow::redissectPackets()
|
void MainWindow::redissectPackets()
|
||||||
{
|
{
|
||||||
if (cap_file_)
|
if (capture_file_.capFile())
|
||||||
cf_redissect_packets(cap_file_);
|
cf_redissect_packets(capture_file_.capFile());
|
||||||
main_ui_->statusBar->expertUpdate();
|
main_ui_->statusBar->expertUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1248,14 +1236,14 @@ void MainWindow::recreatePacketList()
|
||||||
{
|
{
|
||||||
prefs.num_cols = g_list_length(prefs.col_list);
|
prefs.num_cols = g_list_length(prefs.col_list);
|
||||||
|
|
||||||
col_cleanup(&cfile.cinfo);
|
col_cleanup(&CaptureFile::globalCapFile()->cinfo);
|
||||||
build_column_format_array(&cfile.cinfo, prefs.num_cols, FALSE);
|
build_column_format_array(&CaptureFile::globalCapFile()->cinfo, prefs.num_cols, FALSE);
|
||||||
|
|
||||||
packet_list_->redrawVisiblePackets();
|
packet_list_->redrawVisiblePackets();
|
||||||
packet_list_->hide();
|
packet_list_->hide();
|
||||||
packet_list_->show();
|
packet_list_->show();
|
||||||
|
|
||||||
cfile.columns_changed = FALSE; /* Reset value */
|
CaptureFile::globalCapFile()->columns_changed = FALSE; /* Reset value */
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::fieldsChanged()
|
void MainWindow::fieldsChanged()
|
||||||
|
@ -1266,21 +1254,21 @@ void MainWindow::fieldsChanged()
|
||||||
// Syntax check filter
|
// Syntax check filter
|
||||||
// TODO: Check if syntax filter is still valid after fields have changed
|
// TODO: Check if syntax filter is still valid after fields have changed
|
||||||
// and update background color.
|
// and update background color.
|
||||||
if (cfile.dfilter) {
|
if (CaptureFile::globalCapFile()->dfilter) {
|
||||||
// Check if filter is still valid
|
// Check if filter is still valid
|
||||||
dfilter_t *dfp = NULL;
|
dfilter_t *dfp = NULL;
|
||||||
if (!dfilter_compile(cfile.dfilter, &dfp)) {
|
if (!dfilter_compile(CaptureFile::globalCapFile()->dfilter, &dfp)) {
|
||||||
// TODO: Not valid, enable "Apply" button.
|
// TODO: Not valid, enable "Apply" button.
|
||||||
g_free(cfile.dfilter);
|
g_free(CaptureFile::globalCapFile()->dfilter);
|
||||||
cfile.dfilter = NULL;
|
CaptureFile::globalCapFile()->dfilter = NULL;
|
||||||
}
|
}
|
||||||
dfilter_free(dfp);
|
dfilter_free(dfp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (have_custom_cols(&cfile.cinfo)) {
|
if (have_custom_cols(&CaptureFile::globalCapFile()->cinfo)) {
|
||||||
/* Recreate packet list according to new/changed/deleted fields */
|
/* Recreate packet list according to new/changed/deleted fields */
|
||||||
recreatePacketList();
|
recreatePacketList();
|
||||||
} else if (cfile.state != FILE_CLOSED) {
|
} else if (CaptureFile::globalCapFile()->state != FILE_CLOSED) {
|
||||||
/* Redissect packets if we have any */
|
/* Redissect packets if we have any */
|
||||||
redissectPackets();
|
redissectPackets();
|
||||||
}
|
}
|
||||||
|
@ -1374,12 +1362,12 @@ void MainWindow::on_actionFileClose_triggered() {
|
||||||
|
|
||||||
void MainWindow::on_actionFileSave_triggered()
|
void MainWindow::on_actionFileSave_triggered()
|
||||||
{
|
{
|
||||||
saveCaptureFile(cap_file_, FALSE);
|
saveCaptureFile(capture_file_.capFile(), FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFileSaveAs_triggered()
|
void MainWindow::on_actionFileSaveAs_triggered()
|
||||||
{
|
{
|
||||||
saveAsCaptureFile(cap_file_, FALSE, TRUE);
|
saveAsCaptureFile(capture_file_.capFile(), FALSE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFileSetListFiles_triggered()
|
void MainWindow::on_actionFileSetListFiles_triggered()
|
||||||
|
@ -1441,7 +1429,7 @@ void MainWindow::on_actionFileExportPacketBytes_triggered()
|
||||||
{
|
{
|
||||||
QString file_name;
|
QString file_name;
|
||||||
|
|
||||||
if (!cap_file_ || !cap_file_->finfo_selected) return;
|
if (!capture_file_.capFile() || !capture_file_.capFile()->finfo_selected) return;
|
||||||
|
|
||||||
file_name = QFileDialog::getSaveFileName(this,
|
file_name = QFileDialog::getSaveFileName(this,
|
||||||
tr("Wireshark: Export Selected Packet Bytes"),
|
tr("Wireshark: Export Selected Packet Bytes"),
|
||||||
|
@ -1453,14 +1441,14 @@ void MainWindow::on_actionFileExportPacketBytes_triggered()
|
||||||
const guint8 *data_p;
|
const guint8 *data_p;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
data_p = tvb_get_ptr(cap_file_->finfo_selected->ds_tvb, 0, -1) +
|
data_p = tvb_get_ptr(capture_file_.capFile()->finfo_selected->ds_tvb, 0, -1) +
|
||||||
cap_file_->finfo_selected->start;
|
capture_file_.capFile()->finfo_selected->start;
|
||||||
fd = ws_open(file_name.toUtf8().constData(), O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
|
fd = ws_open(file_name.toUtf8().constData(), O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
open_failure_alert_box(file_name.toUtf8().constData(), errno, TRUE);
|
open_failure_alert_box(file_name.toUtf8().constData(), errno, TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (write(fd, data_p, cfile.finfo_selected->length) < 0) {
|
if (write(fd, data_p, capture_file_.capFile()->finfo_selected->length) < 0) {
|
||||||
write_failure_alert_box(file_name.toUtf8().constData(), errno);
|
write_failure_alert_box(file_name.toUtf8().constData(), errno);
|
||||||
::close(fd);
|
::close(fd);
|
||||||
return;
|
return;
|
||||||
|
@ -1552,27 +1540,27 @@ void MainWindow::on_actionFileExportSSLSessionKeys_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionFileExportObjectsDICOM_triggered()
|
void MainWindow::on_actionFileExportObjectsDICOM_triggered()
|
||||||
{
|
{
|
||||||
new ExportObjectDialog(this, cap_file_, ExportObjectDialog::Dicom);
|
new ExportObjectDialog(this, capture_file_.capFile(), ExportObjectDialog::Dicom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFileExportObjectsHTTP_triggered()
|
void MainWindow::on_actionFileExportObjectsHTTP_triggered()
|
||||||
{
|
{
|
||||||
new ExportObjectDialog(this, cap_file_, ExportObjectDialog::Http);
|
new ExportObjectDialog(this, capture_file_.capFile(), ExportObjectDialog::Http);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFileExportObjectsSMB_triggered()
|
void MainWindow::on_actionFileExportObjectsSMB_triggered()
|
||||||
{
|
{
|
||||||
new ExportObjectDialog(this, cap_file_, ExportObjectDialog::Smb);
|
new ExportObjectDialog(this, capture_file_.capFile(), ExportObjectDialog::Smb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFileExportObjectsTFTP_triggered()
|
void MainWindow::on_actionFileExportObjectsTFTP_triggered()
|
||||||
{
|
{
|
||||||
new ExportObjectDialog(this, cap_file_, ExportObjectDialog::Tftp);
|
new ExportObjectDialog(this, capture_file_.capFile(), ExportObjectDialog::Tftp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFilePrint_triggered()
|
void MainWindow::on_actionFilePrint_triggered()
|
||||||
{
|
{
|
||||||
PrintDialog pdlg(this, cap_file_);
|
PrintDialog pdlg(this, capture_file_.capFile());
|
||||||
|
|
||||||
pdlg.exec();
|
pdlg.exec();
|
||||||
}
|
}
|
||||||
|
@ -1585,23 +1573,23 @@ void MainWindow::actionEditCopyTriggered(MainWindow::CopySelected selection_type
|
||||||
char label_str[ITEM_LABEL_LENGTH];
|
char label_str[ITEM_LABEL_LENGTH];
|
||||||
QString clip;
|
QString clip;
|
||||||
|
|
||||||
if (!cap_file_) return;
|
if (!capture_file_.capFile()) return;
|
||||||
|
|
||||||
switch(selection_type) {
|
switch(selection_type) {
|
||||||
case CopySelectedDescription:
|
case CopySelectedDescription:
|
||||||
if (cap_file_->finfo_selected->rep &&
|
if (capture_file_.capFile()->finfo_selected->rep &&
|
||||||
strlen (cap_file_->finfo_selected->rep->representation) > 0) {
|
strlen (capture_file_.capFile()->finfo_selected->rep->representation) > 0) {
|
||||||
clip.append(cap_file_->finfo_selected->rep->representation);
|
clip.append(capture_file_.capFile()->finfo_selected->rep->representation);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CopySelectedFieldName:
|
case CopySelectedFieldName:
|
||||||
if (cap_file_->finfo_selected->hfinfo->abbrev != 0) {
|
if (capture_file_.capFile()->finfo_selected->hfinfo->abbrev != 0) {
|
||||||
clip.append(cap_file_->finfo_selected->hfinfo->abbrev);
|
clip.append(capture_file_.capFile()->finfo_selected->hfinfo->abbrev);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CopySelectedValue:
|
case CopySelectedValue:
|
||||||
if (cap_file_->edt != 0) {
|
if (capture_file_.capFile()->edt != 0) {
|
||||||
gchar* field_str = get_node_field_value(cap_file_->finfo_selected, cap_file_->edt);
|
gchar* field_str = get_node_field_value(capture_file_.capFile()->finfo_selected, capture_file_.capFile()->edt);
|
||||||
clip.append(field_str);
|
clip.append(field_str);
|
||||||
g_free(field_str);
|
g_free(field_str);
|
||||||
}
|
}
|
||||||
|
@ -1610,7 +1598,7 @@ void MainWindow::actionEditCopyTriggered(MainWindow::CopySelected selection_type
|
||||||
|
|
||||||
if (clip.length() == 0) {
|
if (clip.length() == 0) {
|
||||||
/* If no representation then... Try to read the value */
|
/* If no representation then... Try to read the value */
|
||||||
proto_item_fill_label(cap_file_->finfo_selected, label_str);
|
proto_item_fill_label(capture_file_.capFile()->finfo_selected, label_str);
|
||||||
clip.append(label_str);
|
clip.append(label_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1684,14 +1672,14 @@ void MainWindow::on_actionEditUnmarkAllDisplayed_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionEditNextMark_triggered()
|
void MainWindow::on_actionEditNextMark_triggered()
|
||||||
{
|
{
|
||||||
if (cap_file_)
|
if (capture_file_.capFile())
|
||||||
cf_find_packet_marked(cap_file_, SD_FORWARD);
|
cf_find_packet_marked(capture_file_.capFile(), SD_FORWARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionEditPreviousMark_triggered()
|
void MainWindow::on_actionEditPreviousMark_triggered()
|
||||||
{
|
{
|
||||||
if (cap_file_)
|
if (capture_file_.capFile())
|
||||||
cf_find_packet_marked(cap_file_, SD_BACKWARD);
|
cf_find_packet_marked(capture_file_.capFile(), SD_BACKWARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionEditIgnorePacket_triggered()
|
void MainWindow::on_actionEditIgnorePacket_triggered()
|
||||||
|
@ -1721,19 +1709,19 @@ void MainWindow::on_actionEditUnsetAllTimeReferences_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionEditNextTimeReference_triggered()
|
void MainWindow::on_actionEditNextTimeReference_triggered()
|
||||||
{
|
{
|
||||||
if (!cap_file_) return;
|
if (!capture_file_.capFile()) return;
|
||||||
cf_find_packet_time_reference(cap_file_, SD_FORWARD);
|
cf_find_packet_time_reference(capture_file_.capFile(), SD_FORWARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionEditPreviousTimeReference_triggered()
|
void MainWindow::on_actionEditPreviousTimeReference_triggered()
|
||||||
{
|
{
|
||||||
if (!cap_file_) return;
|
if (!capture_file_.capFile()) return;
|
||||||
cf_find_packet_time_reference(cap_file_, SD_BACKWARD);
|
cf_find_packet_time_reference(capture_file_.capFile(), SD_BACKWARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionEditTimeShift_triggered()
|
void MainWindow::on_actionEditTimeShift_triggered()
|
||||||
{
|
{
|
||||||
TimeShiftDialog ts_dialog(this, cap_file_);
|
TimeShiftDialog ts_dialog(this, capture_file_.capFile());
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
&ts_dialog, SLOT(setCaptureFile(capture_file*)));
|
&ts_dialog, SLOT(setCaptureFile(capture_file*)));
|
||||||
ts_dialog.exec();
|
ts_dialog.exec();
|
||||||
|
@ -1810,9 +1798,9 @@ void MainWindow::setTimestampFormat(QAction *action)
|
||||||
if (recent.gui_time_format != tsf) {
|
if (recent.gui_time_format != tsf) {
|
||||||
timestamp_set_type(tsf);
|
timestamp_set_type(tsf);
|
||||||
recent.gui_time_format = tsf;
|
recent.gui_time_format = tsf;
|
||||||
if (cap_file_) {
|
if (capture_file_.capFile()) {
|
||||||
/* This call adjusts column width */
|
/* This call adjusts column width */
|
||||||
cf_timestamp_auto_precision(cap_file_);
|
cf_timestamp_auto_precision(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
if (packet_list_) {
|
if (packet_list_) {
|
||||||
packet_list_->redrawVisiblePackets();
|
packet_list_->redrawVisiblePackets();
|
||||||
|
@ -1832,9 +1820,9 @@ void MainWindow::setTimestampPrecision(QAction *action)
|
||||||
/* the actual precision will be set in packet_list_queue_draw() below */
|
/* the actual precision will be set in packet_list_queue_draw() below */
|
||||||
timestamp_set_precision(tsp);
|
timestamp_set_precision(tsp);
|
||||||
recent.gui_time_precision = tsp;
|
recent.gui_time_precision = tsp;
|
||||||
if (cap_file_) {
|
if (capture_file_.capFile()) {
|
||||||
/* This call adjusts column width */
|
/* This call adjusts column width */
|
||||||
cf_timestamp_auto_precision(cap_file_);
|
cf_timestamp_auto_precision(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
if (packet_list_) {
|
if (packet_list_) {
|
||||||
packet_list_->redrawVisiblePackets();
|
packet_list_->redrawVisiblePackets();
|
||||||
|
@ -1851,9 +1839,9 @@ void MainWindow::on_actionViewTimeDisplaySecondsWithHoursAndMinutes_triggered(bo
|
||||||
}
|
}
|
||||||
timestamp_set_seconds_type(recent.gui_seconds_format);
|
timestamp_set_seconds_type(recent.gui_seconds_format);
|
||||||
|
|
||||||
if (cap_file_) {
|
if (capture_file_.capFile()) {
|
||||||
/* This call adjusts column width */
|
/* This call adjusts column width */
|
||||||
cf_timestamp_auto_precision(cap_file_);
|
cf_timestamp_auto_precision(capture_file_.capFile());
|
||||||
}
|
}
|
||||||
if (packet_list_) {
|
if (packet_list_) {
|
||||||
packet_list_->redrawVisiblePackets();
|
packet_list_->redrawVisiblePackets();
|
||||||
|
@ -1932,7 +1920,7 @@ void MainWindow::on_actionViewResizeColumns_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionViewReload_triggered()
|
void MainWindow::on_actionViewReload_triggered()
|
||||||
{
|
{
|
||||||
cf_reload(&cfile);
|
cf_reload(CaptureFile::globalCapFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expand / collapse slots in proto_tree
|
// Expand / collapse slots in proto_tree
|
||||||
|
@ -1948,9 +1936,9 @@ void MainWindow::matchFieldFilter(FilterAction::Action action, FilterAction::Act
|
||||||
|
|
||||||
if (packet_list_->contextMenuActive()) {
|
if (packet_list_->contextMenuActive()) {
|
||||||
field_filter = packet_list_->getFilterFromRowAndColumn();
|
field_filter = packet_list_->getFilterFromRowAndColumn();
|
||||||
} else if (cap_file_ && cap_file_->finfo_selected) {
|
} else if (capture_file_.capFile() && capture_file_.capFile()->finfo_selected) {
|
||||||
field_filter = proto_construct_match_selected_string(cap_file_->finfo_selected,
|
field_filter = proto_construct_match_selected_string(capture_file_.capFile()->finfo_selected,
|
||||||
cap_file_->edt);
|
capture_file_.capFile()->edt);
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2037,14 +2025,14 @@ void MainWindow::on_actionAnalyzeDecodeAs_triggered()
|
||||||
create_new = true;
|
create_new = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
DecodeAsDialog da_dialog(this, cap_file_, create_new);
|
DecodeAsDialog da_dialog(this, capture_file_.capFile(), create_new);
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
&da_dialog, SLOT(setCaptureFile(capture_file*)));
|
&da_dialog, SLOT(setCaptureFile(capture_file*)));
|
||||||
da_dialog.exec();
|
da_dialog.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::openFollowStreamDialog(follow_type_t type) {
|
void MainWindow::openFollowStreamDialog(follow_type_t type) {
|
||||||
FollowStreamDialog *fsd = new FollowStreamDialog(this, type, cap_file_);
|
FollowStreamDialog *fsd = new FollowStreamDialog(this, type, capture_file_.capFile());
|
||||||
connect(fsd, SIGNAL(updateFilter(QString&, bool)), this, SLOT(filterPackets(QString&, bool)));
|
connect(fsd, SIGNAL(updateFilter(QString&, bool)), this, SLOT(filterPackets(QString&, bool)));
|
||||||
connect(fsd, SIGNAL(goToPacket(int)), packet_list_, SLOT(goToPacket(int)));
|
connect(fsd, SIGNAL(goToPacket(int)), packet_list_, SLOT(goToPacket(int)));
|
||||||
|
|
||||||
|
@ -2069,7 +2057,7 @@ void MainWindow::on_actionAnalyzeFollowSSLStream_triggered()
|
||||||
|
|
||||||
void MainWindow::openSCTPAllAssocsDialog()
|
void MainWindow::openSCTPAllAssocsDialog()
|
||||||
{
|
{
|
||||||
SCTPAllAssocsDialog *sctp_dialog = new SCTPAllAssocsDialog(this, cap_file_);
|
SCTPAllAssocsDialog *sctp_dialog = new SCTPAllAssocsDialog(this, capture_file_.capFile());
|
||||||
connect(sctp_dialog, SIGNAL(filterPackets(QString&,bool)),
|
connect(sctp_dialog, SIGNAL(filterPackets(QString&,bool)),
|
||||||
this, SLOT(filterPackets(QString&,bool)));
|
this, SLOT(filterPackets(QString&,bool)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2096,7 +2084,7 @@ void MainWindow::on_actionSCTPShowAllAssociations_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionSCTPAnalyseThisAssociation_triggered()
|
void MainWindow::on_actionSCTPAnalyseThisAssociation_triggered()
|
||||||
{
|
{
|
||||||
SCTPAssocAnalyseDialog *sctp_analyse = new SCTPAssocAnalyseDialog(this, NULL, cap_file_);
|
SCTPAssocAnalyseDialog *sctp_analyse = new SCTPAssocAnalyseDialog(this, NULL, capture_file_.capFile());
|
||||||
connect(sctp_analyse, SIGNAL(filterPackets(QString&,bool)),
|
connect(sctp_analyse, SIGNAL(filterPackets(QString&,bool)),
|
||||||
this, SLOT(filterPackets(QString&,bool)));
|
this, SLOT(filterPackets(QString&,bool)));
|
||||||
|
|
||||||
|
@ -2115,7 +2103,7 @@ void MainWindow::on_actionSCTPAnalyseThisAssociation_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionSCTPFilterThisAssociation_triggered()
|
void MainWindow::on_actionSCTPFilterThisAssociation_triggered()
|
||||||
{
|
{
|
||||||
sctp_assoc_info_t* assoc = SCTPAssocAnalyseDialog::findAssocForPacket(cap_file_);
|
sctp_assoc_info_t* assoc = SCTPAssocAnalyseDialog::findAssocForPacket(capture_file_.capFile());
|
||||||
if (assoc) {
|
if (assoc) {
|
||||||
QString newFilter = QString("sctp.assoc_index==%1").arg(assoc->assoc_id);
|
QString newFilter = QString("sctp.assoc_index==%1").arg(assoc->assoc_id);
|
||||||
assoc = NULL;
|
assoc = NULL;
|
||||||
|
@ -2130,7 +2118,7 @@ void MainWindow::on_actionSCTPFilterThisAssociation_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionStatisticsFlowGraph_triggered()
|
void MainWindow::on_actionStatisticsFlowGraph_triggered()
|
||||||
{
|
{
|
||||||
SequenceDialog *sequence_dialog = new SequenceDialog(this, cap_file_);
|
SequenceDialog *sequence_dialog = new SequenceDialog(this, capture_file_.capFile());
|
||||||
connect(sequence_dialog, SIGNAL(goToPacket(int)),
|
connect(sequence_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2140,7 +2128,7 @@ void MainWindow::on_actionStatisticsFlowGraph_triggered()
|
||||||
|
|
||||||
void MainWindow::openTcpStreamDialog(int graph_type)
|
void MainWindow::openTcpStreamDialog(int graph_type)
|
||||||
{
|
{
|
||||||
TCPStreamDialog *stream_dialog = new TCPStreamDialog(this, cap_file_, (tcp_graph_type)graph_type);
|
TCPStreamDialog *stream_dialog = new TCPStreamDialog(this, capture_file_.capFile(), (tcp_graph_type)graph_type);
|
||||||
connect(stream_dialog, SIGNAL(goToPacket(int)),
|
connect(stream_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2175,7 +2163,7 @@ void MainWindow::on_actionStatisticsTcpStreamWindowScaling_triggered()
|
||||||
|
|
||||||
void MainWindow::openStatisticsTreeDialog(const gchar *abbr)
|
void MainWindow::openStatisticsTreeDialog(const gchar *abbr)
|
||||||
{
|
{
|
||||||
StatsTreeDialog *st_dialog = new StatsTreeDialog(this, cap_file_, abbr);
|
StatsTreeDialog *st_dialog = new StatsTreeDialog(this, capture_file_.capFile(), abbr);
|
||||||
// connect(st_dialog, SIGNAL(goToPacket(int)),
|
// connect(st_dialog, SIGNAL(goToPacket(int)),
|
||||||
// packet_list_, SLOT(goToPacket(int)));
|
// packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2240,7 +2228,7 @@ void MainWindow::on_actionStatistics29WestQueues_Queries_by_Receiver_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionStatistics29WestUIM_Streams_triggered()
|
void MainWindow::on_actionStatistics29WestUIM_Streams_triggered()
|
||||||
{
|
{
|
||||||
LBMStreamDialog *stream_dialog = new LBMStreamDialog(this, cap_file_);
|
LBMStreamDialog *stream_dialog = new LBMStreamDialog(this, capture_file_.capFile());
|
||||||
// connect(stream_dialog, SIGNAL(goToPacket(int)),
|
// connect(stream_dialog, SIGNAL(goToPacket(int)),
|
||||||
// packet_list_, SLOT(goToPacket(int)));
|
// packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2250,7 +2238,7 @@ void MainWindow::on_actionStatistics29WestUIM_Streams_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionStatistics29WestUIM_Stream_Flow_Graph_triggered()
|
void MainWindow::on_actionStatistics29WestUIM_Stream_Flow_Graph_triggered()
|
||||||
{
|
{
|
||||||
LBMUIMFlowDialog * uimflow_dialog = new LBMUIMFlowDialog(this, cap_file_);
|
LBMUIMFlowDialog * uimflow_dialog = new LBMUIMFlowDialog(this, capture_file_.capFile());
|
||||||
connect(uimflow_dialog, SIGNAL(goToPacket(int)),
|
connect(uimflow_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2260,7 +2248,7 @@ void MainWindow::on_actionStatistics29WestUIM_Stream_Flow_Graph_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionStatistics29WestLBTRM_triggered()
|
void MainWindow::on_actionStatistics29WestLBTRM_triggered()
|
||||||
{
|
{
|
||||||
LBMLBTRMTransportDialog * lbtrm_dialog = new LBMLBTRMTransportDialog(this, cap_file_);
|
LBMLBTRMTransportDialog * lbtrm_dialog = new LBMLBTRMTransportDialog(this, capture_file_.capFile());
|
||||||
connect(lbtrm_dialog, SIGNAL(goToPacket(int)),
|
connect(lbtrm_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2269,7 +2257,7 @@ void MainWindow::on_actionStatistics29WestLBTRM_triggered()
|
||||||
}
|
}
|
||||||
void MainWindow::on_actionStatistics29WestLBTRU_triggered()
|
void MainWindow::on_actionStatistics29WestLBTRU_triggered()
|
||||||
{
|
{
|
||||||
LBMLBTRUTransportDialog * lbtru_dialog = new LBMLBTRUTransportDialog(this, cap_file_);
|
LBMLBTRUTransportDialog * lbtru_dialog = new LBMLBTRUTransportDialog(this, capture_file_.capFile());
|
||||||
connect(lbtru_dialog, SIGNAL(goToPacket(int)),
|
connect(lbtru_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
@ -2309,7 +2297,7 @@ void MainWindow::on_actionStatisticsCollectd_triggered()
|
||||||
|
|
||||||
void MainWindow::statCommandConversations(const char *arg, void *userdata)
|
void MainWindow::statCommandConversations(const char *arg, void *userdata)
|
||||||
{
|
{
|
||||||
ConversationDialog *conv_dialog = new ConversationDialog(this, cap_file_, GPOINTER_TO_INT(userdata), arg);
|
ConversationDialog *conv_dialog = new ConversationDialog(this, capture_file_.capFile(), GPOINTER_TO_INT(userdata), arg);
|
||||||
connect(conv_dialog, SIGNAL(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)),
|
connect(conv_dialog, SIGNAL(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)),
|
||||||
this, SLOT(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)));
|
this, SLOT(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)));
|
||||||
connect(conv_dialog, SIGNAL(openFollowStreamDialog(follow_type_t)),
|
connect(conv_dialog, SIGNAL(openFollowStreamDialog(follow_type_t)),
|
||||||
|
@ -2328,7 +2316,7 @@ void MainWindow::on_actionStatisticsConversations_triggered()
|
||||||
|
|
||||||
void MainWindow::statCommandEndpoints(const char *arg, void *userdata)
|
void MainWindow::statCommandEndpoints(const char *arg, void *userdata)
|
||||||
{
|
{
|
||||||
EndpointDialog *endp_dialog = new EndpointDialog(this, cap_file_, GPOINTER_TO_INT(userdata), arg);
|
EndpointDialog *endp_dialog = new EndpointDialog(this, capture_file_.capFile(), GPOINTER_TO_INT(userdata), arg);
|
||||||
connect(endp_dialog, SIGNAL(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)),
|
connect(endp_dialog, SIGNAL(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)),
|
||||||
this, SLOT(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)));
|
this, SLOT(filterAction(QString&,FilterAction::Action,FilterAction::ActionType)));
|
||||||
connect(endp_dialog, SIGNAL(openFollowStreamDialog(follow_type_t)),
|
connect(endp_dialog, SIGNAL(openFollowStreamDialog(follow_type_t)),
|
||||||
|
@ -2374,7 +2362,7 @@ void MainWindow::statCommandIOGraph(const char *arg, void *userdata)
|
||||||
{
|
{
|
||||||
Q_UNUSED(arg);
|
Q_UNUSED(arg);
|
||||||
Q_UNUSED(userdata);
|
Q_UNUSED(userdata);
|
||||||
IOGraphDialog *iog_dialog = new IOGraphDialog(this, cap_file_);
|
IOGraphDialog *iog_dialog = new IOGraphDialog(this, capture_file_.capFile());
|
||||||
connect(iog_dialog, SIGNAL(goToPacket(int)), packet_list_, SLOT(goToPacket(int)));
|
connect(iog_dialog, SIGNAL(goToPacket(int)), packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
iog_dialog, SLOT(setCaptureFile(capture_file*)));
|
iog_dialog, SLOT(setCaptureFile(capture_file*)));
|
||||||
|
@ -2394,7 +2382,7 @@ void MainWindow::on_actionStatisticsSametime_triggered()
|
||||||
|
|
||||||
void MainWindow::openVoipCallsDialog(bool all_flows)
|
void MainWindow::openVoipCallsDialog(bool all_flows)
|
||||||
{
|
{
|
||||||
VoipCallsDialog *voip_calls_dialog = new VoipCallsDialog(this, cap_file_, all_flows);
|
VoipCallsDialog *voip_calls_dialog = new VoipCallsDialog(this, capture_file_.capFile(), all_flows);
|
||||||
connect(voip_calls_dialog, SIGNAL(goToPacket(int)),
|
connect(voip_calls_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(voip_calls_dialog, SIGNAL(updateFilter(QString&, bool)),
|
connect(voip_calls_dialog, SIGNAL(updateFilter(QString&, bool)),
|
||||||
|
@ -2629,7 +2617,7 @@ void MainWindow::on_actionCaptureStop_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionStatisticsCaptureFileProperties_triggered()
|
void MainWindow::on_actionStatisticsCaptureFileProperties_triggered()
|
||||||
{
|
{
|
||||||
CaptureFilePropertiesDialog *capture_file_properties_dialog = new CaptureFilePropertiesDialog(this, cap_file_);
|
CaptureFilePropertiesDialog *capture_file_properties_dialog = new CaptureFilePropertiesDialog(this, capture_file_.capFile());
|
||||||
connect(capture_file_properties_dialog, SIGNAL(captureCommentChanged()),
|
connect(capture_file_properties_dialog, SIGNAL(captureCommentChanged()),
|
||||||
this, SLOT(updateForUnsavedChanges()));
|
this, SLOT(updateForUnsavedChanges()));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
||||||
|
|
|
@ -206,114 +206,6 @@ void WiresharkApplication::updateTaps()
|
||||||
draw_tap_listeners(FALSE);
|
draw_tap_listeners(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WiresharkApplication::captureCallback(int event _U_, capture_session *cap_session _U_)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_LIBPCAP
|
|
||||||
switch(event) {
|
|
||||||
case(capture_cb_capture_prepared):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture prepared");
|
|
||||||
emit captureCapturePrepared(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_update_started):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update started");
|
|
||||||
emit captureCaptureUpdateStarted(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_update_continue):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update continue");
|
|
||||||
emit captureCaptureUpdateContinue(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_update_finished):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update finished");
|
|
||||||
emit captureCaptureUpdateFinished(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_fixed_started):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed started");
|
|
||||||
emit captureCaptureFixedStarted(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_fixed_continue):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed continue");
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_fixed_finished):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed finished");
|
|
||||||
emit captureCaptureFixedFinished(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_stopping):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture stopping");
|
|
||||||
/* Beware: this state won't be called, if the capture child
|
|
||||||
* closes the capturing on it's own! */
|
|
||||||
emit captureCaptureStopping(cap_session);
|
|
||||||
break;
|
|
||||||
case(capture_cb_capture_failed):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture failed");
|
|
||||||
emit captureCaptureFailed(cap_session);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
g_warning("main_capture_callback: event %u unknown", event);
|
|
||||||
g_assert_not_reached();
|
|
||||||
}
|
|
||||||
#endif // HAVE_LIBPCAP
|
|
||||||
}
|
|
||||||
|
|
||||||
void WiresharkApplication::captureFileCallback(int event, void * data)
|
|
||||||
{
|
|
||||||
capture_file *cf = (capture_file *) data;
|
|
||||||
|
|
||||||
switch(event) {
|
|
||||||
|
|
||||||
case(cf_cb_file_opened):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Opened");
|
|
||||||
emit captureFileOpened(cf);
|
|
||||||
break;
|
|
||||||
case(cf_cb_file_closing):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Closing");
|
|
||||||
emit captureFileClosing(cf);
|
|
||||||
break;
|
|
||||||
case(cf_cb_file_closed):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Closed");
|
|
||||||
emit captureFileClosed(cf);
|
|
||||||
break;
|
|
||||||
case(cf_cb_file_read_started):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Read started");
|
|
||||||
emit captureFileReadStarted(cf);
|
|
||||||
QTimer::singleShot(TAP_UPDATE_DEFAULT_INTERVAL / 5, this, SLOT(updateTaps()));
|
|
||||||
QTimer::singleShot(TAP_UPDATE_DEFAULT_INTERVAL / 2, this, SLOT(updateTaps()));
|
|
||||||
break;
|
|
||||||
case(cf_cb_file_read_finished):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Read finished");
|
|
||||||
emit captureFileReadFinished(cf);
|
|
||||||
updateTaps();
|
|
||||||
break;
|
|
||||||
case(cf_cb_file_reload_started):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Reload started");
|
|
||||||
emit captureFileReadStarted(cf);
|
|
||||||
break;
|
|
||||||
case(cf_cb_file_reload_finished):
|
|
||||||
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Reload finished");
|
|
||||||
emit captureFileReadFinished(cf);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case(cf_cb_packet_selected):
|
|
||||||
case(cf_cb_packet_unselected):
|
|
||||||
case(cf_cb_field_unselected):
|
|
||||||
// Pure signals and slots
|
|
||||||
break;
|
|
||||||
|
|
||||||
// case(cf_cb_file_save_started): // data = string
|
|
||||||
// g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Save started");
|
|
||||||
// break;
|
|
||||||
// case(cf_cb_file_save_finished):
|
|
||||||
// g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Save finished");
|
|
||||||
// break;
|
|
||||||
// case(cf_cb_file_save_failed):
|
|
||||||
// g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Save failed");
|
|
||||||
// break;
|
|
||||||
default:
|
|
||||||
g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: main_cf_callback %d %p", event, data);
|
|
||||||
// g_warning("main_cf_callback: event %u unknown", event);
|
|
||||||
// g_assert_not_reached();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QDir WiresharkApplication::lastOpenDir() {
|
QDir WiresharkApplication::lastOpenDir() {
|
||||||
return QDir(last_open_dir);
|
return QDir(last_open_dir);
|
||||||
}
|
}
|
||||||
|
@ -532,6 +424,13 @@ void WiresharkApplication::clearRecentItems() {
|
||||||
emit updateRecentItemStatus(NULL, 0, false);
|
emit updateRecentItemStatus(NULL, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WiresharkApplication::captureFileReadStarted()
|
||||||
|
{
|
||||||
|
// Doesn't appear to do anything. Logic probably needs to be in file.c.
|
||||||
|
QTimer::singleShot(TAP_UPDATE_DEFAULT_INTERVAL / 5, this, SLOT(updateTaps()));
|
||||||
|
QTimer::singleShot(TAP_UPDATE_DEFAULT_INTERVAL / 2, this, SLOT(updateTaps()));
|
||||||
|
}
|
||||||
|
|
||||||
void WiresharkApplication::cleanup()
|
void WiresharkApplication::cleanup()
|
||||||
{
|
{
|
||||||
software_update_cleanup();
|
software_update_cleanup();
|
||||||
|
|
|
@ -82,8 +82,6 @@ public:
|
||||||
e_prefs * readConfigurationFiles(char **gdp_path, char **dp_path);
|
e_prefs * readConfigurationFiles(char **gdp_path, char **dp_path);
|
||||||
QList<recent_item_status *> recentItems() const;
|
QList<recent_item_status *> recentItems() const;
|
||||||
void addRecentItem(const QString &filename, qint64 size, bool accessible);
|
void addRecentItem(const QString &filename, qint64 size, bool accessible);
|
||||||
void captureCallback(int event, capture_session * cap_session);
|
|
||||||
void captureFileCallback(int event, void * data);
|
|
||||||
QDir lastOpenDir();
|
QDir lastOpenDir();
|
||||||
void setLastOpenDir(const char *dir_name);
|
void setLastOpenDir(const char *dir_name);
|
||||||
void setLastOpenDir(QString *dir_str);
|
void setLastOpenDir(QString *dir_str);
|
||||||
|
@ -130,7 +128,7 @@ signals:
|
||||||
void addressResolutionChanged();
|
void addressResolutionChanged();
|
||||||
void fieldsChanged();
|
void fieldsChanged();
|
||||||
|
|
||||||
// XXX It might make more sense to move these to main.cpp or main_window.cpp or their own class.
|
#if 0
|
||||||
void captureCapturePrepared(capture_session *cap_session);
|
void captureCapturePrepared(capture_session *cap_session);
|
||||||
void captureCaptureUpdateStarted(capture_session *cap_session);
|
void captureCaptureUpdateStarted(capture_session *cap_session);
|
||||||
void captureCaptureUpdateContinue(capture_session *cap_session);
|
void captureCaptureUpdateContinue(capture_session *cap_session);
|
||||||
|
@ -139,17 +137,22 @@ signals:
|
||||||
void captureCaptureFixedFinished(capture_session *cap_session);
|
void captureCaptureFixedFinished(capture_session *cap_session);
|
||||||
void captureCaptureStopping(capture_session *cap_session);
|
void captureCaptureStopping(capture_session *cap_session);
|
||||||
void captureCaptureFailed(capture_session *cap_session);
|
void captureCaptureFailed(capture_session *cap_session);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
void captureFileOpened(const capture_file *cf);
|
void captureFileOpened(const capture_file *cf);
|
||||||
void captureFileReadStarted(const capture_file *cf);
|
void captureFileReadStarted(const capture_file *cf);
|
||||||
void captureFileReadFinished(const capture_file *cf);
|
void captureFileReadFinished(const capture_file *cf);
|
||||||
void captureFileClosing(const capture_file *cf);
|
void captureFileClosing(const capture_file *cf);
|
||||||
void captureFileClosed(const capture_file *cf);
|
void captureFileClosed(const capture_file *cf);
|
||||||
|
#endif
|
||||||
|
|
||||||
void openStatCommandDialog(const QString &menu_path, const char *arg, void *userdata);
|
void openStatCommandDialog(const QString &menu_path, const char *arg, void *userdata);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void clearRecentItems();
|
void clearRecentItems();
|
||||||
|
void captureFileReadStarted();
|
||||||
|
void updateTaps();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
@ -157,7 +160,6 @@ private slots:
|
||||||
void itemStatusFinished(const QString filename = "", qint64 size = 0, bool accessible = false);
|
void itemStatusFinished(const QString filename = "", qint64 size = 0, bool accessible = false);
|
||||||
void refreshRecentFiles(void);
|
void refreshRecentFiles(void);
|
||||||
void refreshAddressResolution(void);
|
void refreshAddressResolution(void);
|
||||||
void updateTaps();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern WiresharkApplication *wsApp;
|
extern WiresharkApplication *wsApp;
|
||||||
|
|
Loading…
Reference in New Issue