aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorj.novak@netsystem.cz <j.novak@netsystem.cz>2022-01-06 07:02:11 +0000
committerA Wireshark GitLab Utility <6629907-ws-gitlab-utility@users.noreply.gitlab.com>2022-01-06 07:02:11 +0000
commit428f2228533351baf6509b8fc50a075cdbc136b0 (patch)
treed27d84e6056ff1603a417e6da6dba81a56f1962a /ui
parent6b8c32fa7a6d5c3b8f3301443f153f862695952e (diff)
Extcap: Extcaps must be fully configured before start of capture
Diffstat (limited to 'ui')
-rw-r--r--ui/qt/capture_options_dialog.cpp6
-rw-r--r--ui/qt/capture_options_dialog.h2
-rw-r--r--ui/qt/extcap_options_dialog.cpp12
-rw-r--r--ui/qt/extcap_options_dialog.h4
-rw-r--r--ui/qt/interface_frame.cpp4
-rw-r--r--ui/qt/interface_frame.h2
-rw-r--r--ui/qt/main_window.cpp6
-rw-r--r--ui/qt/main_window.h6
-rw-r--r--ui/qt/main_window_slots.cpp43
-rw-r--r--ui/qt/welcome_page.cpp4
-rw-r--r--ui/qt/welcome_page.h4
11 files changed, 66 insertions, 27 deletions
diff --git a/ui/qt/capture_options_dialog.cpp b/ui/qt/capture_options_dialog.cpp
index 857ae2b16f..e4311ddbda 100644
--- a/ui/qt/capture_options_dialog.cpp
+++ b/ui/qt/capture_options_dialog.cpp
@@ -499,7 +499,7 @@ void CaptureOptionsDialog::itemClicked(QTreeWidgetItem *item, int column)
QString device_name = ti->data(col_extcap_, Qt::UserRole).value<QString>();
if (extcap_has_configuration((const char *)(device_name.toStdString().c_str()), FALSE))
{
- emit showExtcapOptions(device_name);
+ emit showExtcapOptions(device_name, false);
return;
}
}
@@ -527,7 +527,7 @@ void CaptureOptionsDialog::itemDoubleClicked(QTreeWidgetItem *item)
QString device_name = ti->data(col_extcap_, Qt::UserRole).value<QString>();
if (extcap_has_configuration((const char *)(device_name.toStdString().c_str()), TRUE))
{
- emit showExtcapOptions(device_name);
+ emit showExtcapOptions(device_name, true);
return;
}
}
@@ -598,7 +598,7 @@ void CaptureOptionsDialog::on_buttonBox_accepted()
QString device_name = ti->data(col_extcap_, Qt::UserRole).value<QString>();
if (extcap_has_configuration((const char *)(device_name.toStdString().c_str()), TRUE))
{
- emit showExtcapOptions(device_name);
+ emit showExtcapOptions(device_name, true);
return;
}
}
diff --git a/ui/qt/capture_options_dialog.h b/ui/qt/capture_options_dialog.h
index 060e526be5..289db06ebb 100644
--- a/ui/qt/capture_options_dialog.h
+++ b/ui/qt/capture_options_dialog.h
@@ -103,7 +103,7 @@ signals:
void ifsChanged();
void interfaceListChanged();
void captureFilterTextEdited(const QString & text);
- void showExtcapOptions(QString &device_name);
+ void showExtcapOptions(QString &device_name, bool startCaptureOnClose);
private:
Ui::CaptureOptionsDialog *ui;
diff --git a/ui/qt/extcap_options_dialog.cpp b/ui/qt/extcap_options_dialog.cpp
index 550e478e62..1a963d6ed4 100644
--- a/ui/qt/extcap_options_dialog.cpp
+++ b/ui/qt/extcap_options_dialog.cpp
@@ -54,7 +54,7 @@
#include <ui/qt/extcap_argument_file.h>
#include <ui/qt/extcap_argument_multiselect.h>
-ExtcapOptionsDialog::ExtcapOptionsDialog(QWidget *parent) :
+ExtcapOptionsDialog::ExtcapOptionsDialog(bool startCaptureOnClose, QWidget *parent) :
QDialog(parent),
ui(new Ui::ExtcapOptionsDialog),
device_name(""),
@@ -67,10 +67,14 @@ ExtcapOptionsDialog::ExtcapOptionsDialog(QWidget *parent) :
ui->checkSaveOnStart->setCheckState(prefs.extcap_save_on_start ? Qt::Checked : Qt::Unchecked);
- ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
+ if (startCaptureOnClose) {
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
+ } else {
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
+ }
}
-ExtcapOptionsDialog * ExtcapOptionsDialog::createForDevice(QString &dev_name, QWidget *parent)
+ExtcapOptionsDialog * ExtcapOptionsDialog::createForDevice(QString &dev_name, bool startCaptureOnClose, QWidget *parent)
{
interface_t *device;
ExtcapOptionsDialog * resultDialog = NULL;
@@ -93,7 +97,7 @@ ExtcapOptionsDialog * ExtcapOptionsDialog::createForDevice(QString &dev_name, QW
if (! dev_found)
return NULL;
- resultDialog = new ExtcapOptionsDialog(parent);
+ resultDialog = new ExtcapOptionsDialog(startCaptureOnClose, parent);
resultDialog->device_name = QString(dev_name);
resultDialog->device_idx = if_idx;
diff --git a/ui/qt/extcap_options_dialog.h b/ui/qt/extcap_options_dialog.h
index 3799d0bce3..230e2d32ae 100644
--- a/ui/qt/extcap_options_dialog.h
+++ b/ui/qt/extcap_options_dialog.h
@@ -35,7 +35,7 @@ class ExtcapOptionsDialog : public QDialog
public:
~ExtcapOptionsDialog();
- static ExtcapOptionsDialog * createForDevice(QString &device_name, QWidget *parent = 0);
+ static ExtcapOptionsDialog * createForDevice(QString &device_name, bool startCaptureOnClose, QWidget *parent = 0);
ExtcapValueList loadValuesFor(int argNum, QString call, QString parent = "");
@@ -48,7 +48,7 @@ private Q_SLOTS:
void anyValueChanged();
private:
- explicit ExtcapOptionsDialog(QWidget *parent = 0);
+ explicit ExtcapOptionsDialog(bool startCaptureOnClose, QWidget *parent = 0);
Ui::ExtcapOptionsDialog *ui;
QString device_name;
diff --git a/ui/qt/interface_frame.cpp b/ui/qt/interface_frame.cpp
index 7b3e4317f7..60193c8a7b 100644
--- a/ui/qt/interface_frame.cpp
+++ b/ui/qt/interface_frame.cpp
@@ -423,7 +423,7 @@ void InterfaceFrame::on_interfaceTree_doubleClicked(const QModelIndex &index)
/* this checks if configuration is required and not yet provided or saved via prefs */
if (extcap_has_configuration((const char *)(device_name.toStdString().c_str()), TRUE))
{
- emit showExtcapOptions(device_name);
+ emit showExtcapOptions(device_name, true);
return;
}
}
@@ -451,7 +451,7 @@ void InterfaceFrame::on_interfaceTree_clicked(const QModelIndex &index)
/* this checks if configuration is required and not yet provided or saved via prefs */
if (extcap_has_configuration((const char *)(device_name.toStdString().c_str()), FALSE))
{
- emit showExtcapOptions(device_name);
+ emit showExtcapOptions(device_name, false);
return;
}
}
diff --git a/ui/qt/interface_frame.h b/ui/qt/interface_frame.h
index 62ed0f6a95..031a65e308 100644
--- a/ui/qt/interface_frame.h
+++ b/ui/qt/interface_frame.h
@@ -46,7 +46,7 @@ public:
void ensureSelectedInterface();
Q_SIGNALS:
- void showExtcapOptions(QString device_name);
+ void showExtcapOptions(QString device_name, bool startCaptureOnClose);
void startCapture();
void itemSelectionChanged();
void typeSelectionChanged();
diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp
index e77891f7e6..d98c3bdd56 100644
--- a/ui/qt/main_window.cpp
+++ b/ui/qt/main_window.cpp
@@ -679,8 +679,10 @@ MainWindow::MainWindow(QWidget *parent) :
connect(main_ui_->welcomePage, SIGNAL(captureFilterSyntaxChanged(bool)),
this, SLOT(captureFilterSyntaxChanged(bool)));
- connect(this->welcome_page_, SIGNAL(showExtcapOptions(QString&)),
- this, SLOT(showExtcapOptionsDialog(QString&)));
+ connect(this, SIGNAL(showExtcapOptions(QString&, bool)),
+ this, SLOT(showExtcapOptionsDialog(QString&, bool)));
+ connect(this->welcome_page_, SIGNAL(showExtcapOptions(QString&, bool)),
+ this, SLOT(showExtcapOptionsDialog(QString&, bool)));
#endif // HAVE_LIBPCAP
diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h
index 75372ee63f..8f7ad2660b 100644
--- a/ui/qt/main_window.h
+++ b/ui/qt/main_window.h
@@ -312,6 +312,10 @@ signals:
void selectRtpStream(rtpstream_id_t *id);
void deselectRtpStream(rtpstream_id_t *id);
+#ifdef HAVE_LIBPCAP
+ void showExtcapOptions(QString &device_name, bool startCaptureOnClose);
+#endif
+
public slots:
// in main_window_slots.cpp
/**
@@ -727,7 +731,7 @@ private slots:
void on_actionContextFilterFieldReference_triggered();
void extcap_options_finished(int result);
- void showExtcapOptionsDialog(QString & device_name);
+ void showExtcapOptionsDialog(QString & device_name, bool startCaptureOnClose);
QString findRtpStreams(QVector<rtpstream_id_t *> *stream_ids, bool reverse);
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp
index f2a48dd274..aedb0b1261 100644
--- a/ui/qt/main_window_slots.cpp
+++ b/ui/qt/main_window_slots.cpp
@@ -834,6 +834,8 @@ void MainWindow::startCapture() {
#ifdef HAVE_LIBPCAP
interface_options *interface_opts;
guint i;
+ interface_t *device;
+ gboolean can_start_capture = TRUE;
/* did the user ever select a capture interface before? */
if (global_capture_opts.num_selected == 0) {
@@ -843,6 +845,31 @@ void MainWindow::startCapture() {
return;
}
+ for (i = 0; i < global_capture_opts.all_ifaces->len; i++) {
+ device = &g_array_index(global_capture_opts.all_ifaces, interface_t, i);
+ if (device->selected && (device->if_info.type == IF_EXTCAP)) {
+ /* device is EXTCAP and is selected. Check if all mandatory
+ * settings are set.
+ */
+ if (extcap_has_configuration(device->name, TRUE))
+ {
+ /* Request openning of extcap options dialog */
+ QString device_name(device->name);
+ emit showExtcapOptions(device_name, false);
+ /* Cancel start of capture */
+ can_start_capture = FALSE;
+ }
+ }
+ }
+
+ /* If some of extcap was not configured, do not start with the capture */
+ if (!can_start_capture) {
+ QString msg = QString(tr("Configure all extcaps before start of capture."));
+ wsApp->pushStatus(WiresharkApplication::TemporaryStatus, msg);
+ main_ui_->actionCaptureStart->setChecked(false);
+ return;
+ }
+
// Ideally we should have disabled the start capture
// toolbar buttons and menu items. This may not be the
// case, e.g. with QtMacExtras.
@@ -4000,8 +4027,8 @@ void MainWindow::on_actionCaptureOptions_triggered()
connect(capture_options_dialog_, SIGNAL(setFilterValid(bool, const QString)),
this, SLOT(startInterfaceCapture(bool, const QString)));
- connect(capture_options_dialog_, SIGNAL(showExtcapOptions(QString&)),
- this, SLOT(showExtcapOptionsDialog(QString&)));
+ connect(capture_options_dialog_, SIGNAL(showExtcapOptions(QString&, bool)),
+ this, SLOT(showExtcapOptionsDialog(QString&, bool)));
}
capture_options_dialog_->setTab(0);
capture_options_dialog_->updateInterfaces();
@@ -4066,17 +4093,19 @@ void MainWindow::extcap_options_finished(int result)
this->welcome_page_->getInterfaceFrame()->interfaceListChanged();
}
-void MainWindow::showExtcapOptionsDialog(QString &device_name)
+void MainWindow::showExtcapOptionsDialog(QString &device_name, bool startCaptureOnClose)
{
- ExtcapOptionsDialog * extcap_options_dialog = ExtcapOptionsDialog::createForDevice(device_name, this);
+ ExtcapOptionsDialog * extcap_options_dialog = ExtcapOptionsDialog::createForDevice(device_name, startCaptureOnClose, this);
/* The dialog returns null, if the given device name is not a valid extcap device */
if (extcap_options_dialog) {
extcap_options_dialog->setModal(true);
extcap_options_dialog->setAttribute(Qt::WA_DeleteOnClose);
- connect(extcap_options_dialog, SIGNAL(finished(int)),
- this, SLOT(extcap_options_finished(int)));
+ if (startCaptureOnClose) {
+ connect(extcap_options_dialog, SIGNAL(finished(int)),
+ this, SLOT(extcap_options_finished(int)));
+ }
#ifdef HAVE_LIBPCAP
- if (capture_options_dialog_) {
+ if (capture_options_dialog_ && startCaptureOnClose) {
/* Allow capture options dialog to close */
connect(extcap_options_dialog, SIGNAL(accepted()),
capture_options_dialog_, SLOT(accept()));
diff --git a/ui/qt/welcome_page.cpp b/ui/qt/welcome_page.cpp
index 8097c25455..e8b8edee50 100644
--- a/ui/qt/welcome_page.cpp
+++ b/ui/qt/welcome_page.cpp
@@ -243,9 +243,9 @@ bool WelcomePage::event(QEvent *event)
return QFrame::event(event);
}
-void WelcomePage::on_interfaceFrame_showExtcapOptions(QString device_name)
+void WelcomePage::on_interfaceFrame_showExtcapOptions(QString device_name, bool startCaptureOnClose)
{
- emit showExtcapOptions(device_name);
+ emit showExtcapOptions(device_name, startCaptureOnClose);
}
void WelcomePage::on_interfaceFrame_startCapture()
diff --git a/ui/qt/welcome_page.h b/ui/qt/welcome_page.h
index 433dcc3671..e11a87146f 100644
--- a/ui/qt/welcome_page.h
+++ b/ui/qt/welcome_page.h
@@ -62,7 +62,7 @@ signals:
void startCapture();
void recentFileActivated(QString cfile);
void captureFilterSyntaxChanged(bool valid);
- void showExtcapOptions(QString &device_name);
+ void showExtcapOptions(QString &device_name, bool startCaptureOnClose);
void interfacesChanged();
public slots:
@@ -80,7 +80,7 @@ private slots:
void copyRecentPath();
void removeRecentPath();
- void on_interfaceFrame_showExtcapOptions(QString device_name);
+ void on_interfaceFrame_showExtcapOptions(QString device_name, bool startCaptureOnClose);
void on_interfaceFrame_startCapture();
};