forked from osmocom/wireshark
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>
This commit is contained in:
parent
85fd9df235
commit
dfbea5d47c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue