diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2016-01-01 18:00:19 +0100 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2016-01-05 09:13:39 +0000 |
commit | dfbea5d47c449670d6b4e989fec49b1cc680c497 (patch) | |
tree | bb328a05de160302f5d08023210fbc69dab77754 /ui/qt | |
parent | 85fd9df235dcf77117b45ade4494c99e983595ec (diff) |
Qt: Don't check capture filter for user DLTs
This makes it possible to use a capture filter on an interface
with user DLTs (147-162).
Bug: 11656
Ping-Bug: 11668
Change-Id: Ie9931b27e8dc8ea239e7e04e26d0ae1cacba50c9
Reviewed-on: https://code.wireshark.org/review/12996
Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/capture_filter_edit.cpp | 16 | ||||
-rw-r--r-- | ui/qt/capture_filter_edit.h | 2 | ||||
-rw-r--r-- | ui/qt/capture_filter_syntax_worker.cpp | 21 | ||||
-rw-r--r-- | ui/qt/capture_filter_syntax_worker.h | 2 |
4 files changed, 24 insertions, 17 deletions
diff --git a/ui/qt/capture_filter_edit.cpp b/ui/qt/capture_filter_edit.cpp index 99b8fa8e48..7e7765e4e0 100644 --- a/ui/qt/capture_filter_edit.cpp +++ b/ui/qt/capture_filter_edit.cpp @@ -205,8 +205,8 @@ CaptureFilterEdit::CaptureFilterEdit(QWidget *parent, bool plain) : connect(wsApp, SIGNAL(appInitialized()), this, SLOT(initCaptureFilter())); connect(syntax_thread, SIGNAL(started()), syntax_worker_, SLOT(start())); connect(syntax_thread, SIGNAL(started()), this, SLOT(checkFilter())); - connect(syntax_worker_, SIGNAL(syntaxResult(QString,bool,QString)), - this, SLOT(setFilterSyntaxState(QString,bool,QString))); + connect(syntax_worker_, SIGNAL(syntaxResult(QString,int,QString)), + this, SLOT(setFilterSyntaxState(QString,int,QString))); connect(syntax_thread, SIGNAL(finished()), syntax_worker_, SLOT(deleteLater())); syntax_thread->start(); @@ -286,7 +286,7 @@ void CaptureFilterEdit::checkFilter(const QString& text) } if (empty) { - setFilterSyntaxState(text, true, QString()); + setFilterSyntaxState(text, Empty, QString()); } else { syntax_worker_->checkFilter(text); } @@ -304,13 +304,13 @@ void CaptureFilterEdit::initCaptureFilter() #endif // HAVE_LIBPCAP } -void CaptureFilterEdit::setFilterSyntaxState(QString filter, bool valid, QString err_msg) +void CaptureFilterEdit::setFilterSyntaxState(QString filter, int state, QString err_msg) { + bool valid = (state != Invalid); + if (filter.compare(text()) == 0) { // The user hasn't changed the filter - if (valid) { - setSyntaxState(text().isEmpty() ? Empty : Valid); - } else { - setSyntaxState(Invalid); + setSyntaxState((SyntaxState)state); + if (!valid) { emit pushFilterSyntaxStatus(err_msg); } } diff --git a/ui/qt/capture_filter_edit.h b/ui/qt/capture_filter_edit.h index a0e83e2eff..cbfd1ef6b8 100644 --- a/ui/qt/capture_filter_edit.h +++ b/ui/qt/capture_filter_edit.h @@ -50,7 +50,7 @@ private slots: void initCaptureFilter(); void applyCaptureFilter(); void checkFilter(const QString &text); - void setFilterSyntaxState(QString filter, bool valid, QString err_msg); + void setFilterSyntaxState(QString filter, int state, QString err_msg); void bookmarkClicked(); private: diff --git a/ui/qt/capture_filter_syntax_worker.cpp b/ui/qt/capture_filter_syntax_worker.cpp index f19d6f0b2a..e38e0e05c9 100644 --- a/ui/qt/capture_filter_syntax_worker.cpp +++ b/ui/qt/capture_filter_syntax_worker.cpp @@ -29,6 +29,7 @@ #endif #include "capture_filter_syntax_worker.h" +#include "syntax_line_edit.h" #include <QMutexLocker> #include <QSet> @@ -58,7 +59,7 @@ void CaptureFilterSyntaxWorker::start() { struct bpf_program fcode; pcap_t *pd; int pc_err; - bool ok = true; + enum SyntaxLineEdit::SyntaxState state = SyntaxLineEdit::Valid; QString err_str; data_mtx_.lock(); @@ -72,7 +73,7 @@ void CaptureFilterSyntaxWorker::start() { data_mtx_.unlock(); if (global_capture_opts.num_selected < 1) { - emit syntaxResult(filter, false, QString("No interfaces selected")); + emit syntaxResult(filter, SyntaxLineEdit::Invalid, QString("No interfaces selected")); DEBUG_SYNTAX_CHECK("unknown", "no interfaces"); continue; } @@ -82,7 +83,13 @@ void CaptureFilterSyntaxWorker::start() { device = g_array_index(global_capture_opts.all_ifaces, interface_t, if_idx); if (!device.locked && device.selected) { - active_dlts.insert(device.active_dlt); + if (device.active_dlt >= DLT_USER0 && device.active_dlt <= DLT_USER15) { + // Capture filter for DLT_USER is unknown + state = SyntaxLineEdit::Deprecated; + err_str = "Unable to check capture filter"; + } else { + active_dlts.insert(device.active_dlt); + } } } @@ -97,7 +104,7 @@ void CaptureFilterSyntaxWorker::start() { if (pc_err) { DEBUG_SYNTAX_CHECK("unknown", "known bad"); - ok = false; + state = SyntaxLineEdit::Invalid; err_str = pcap_geterr(pd); } else { DEBUG_SYNTAX_CHECK("unknown", "known good"); @@ -106,9 +113,9 @@ void CaptureFilterSyntaxWorker::start() { pcap_compile_mtx_.unlock(); - if (!ok) break; + if (state == SyntaxLineEdit::Invalid) break; } - emit syntaxResult(filter, ok, err_str); + emit syntaxResult(filter, state, err_str); DEBUG_SYNTAX_CHECK("known", "idle"); } @@ -124,7 +131,7 @@ void CaptureFilterSyntaxWorker::checkFilter(const QString &filter) DEBUG_SYNTAX_CHECK("received", "?"); data_cond_.wakeOne(); #else - emit syntaxResult(filter, true, QString("Syntax checking unavailable")); + emit syntaxResult(filter, SyntaxLineEdit::Deprecated, QString("Syntax checking unavailable")); #endif // HAVE_LIBPCAP } diff --git a/ui/qt/capture_filter_syntax_worker.h b/ui/qt/capture_filter_syntax_worker.h index f807c0564d..e9d7804530 100644 --- a/ui/qt/capture_filter_syntax_worker.h +++ b/ui/qt/capture_filter_syntax_worker.h @@ -43,7 +43,7 @@ private: QString filter_text_; signals: - void syntaxResult(QString filter, bool valid, QString err_msg); + void syntaxResult(QString filter, int state, QString err_msg); }; #endif // CAPTURE_FILTER_SYNTAX_WORKER_H |