aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/capture_file.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui/qt/capture_file.cpp')
-rw-r--r--ui/qt/capture_file.cpp212
1 files changed, 212 insertions, 0 deletions
diff --git a/ui/qt/capture_file.cpp b/ui/qt/capture_file.cpp
new file mode 100644
index 0000000000..fc25f6424f
--- /dev/null
+++ b/ui/qt/capture_file.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:
+ */