summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-05-26 07:52:17 -0400
committerRoland Knall <rknall@gmail.com>2017-05-30 18:10:03 +0000
commit6c44f2017c891e15045fca5c5cff79acd48ad4e5 (patch)
treee7270e94624e201819100fc67865cc938c608023 /ui
parent44327d8a6c7a312642adcec775555ab8a3430787 (diff)
downloadwireshark-6c44f2017c891e15045fca5c5cff79acd48ad4e5.tar.gz
Qt: Add support to verify extcap capture filter
Bug: 11668 Change-Id: Ib218d87c1905e53ffdab4e3dd6f93ba2c3d07c8b Reviewed-on: https://code.wireshark.org/review/21770 Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r--ui/qt/capture_filter_syntax_worker.cpp39
1 files changed, 33 insertions, 6 deletions
diff --git a/ui/qt/capture_filter_syntax_worker.cpp b/ui/qt/capture_filter_syntax_worker.cpp
index 83f9b13375..0a0733aff5 100644
--- a/ui/qt/capture_filter_syntax_worker.cpp
+++ b/ui/qt/capture_filter_syntax_worker.cpp
@@ -29,6 +29,9 @@
#include "capture_opts.h"
#include "ui/capture_globals.h"
#endif
+#ifdef HAVE_EXTCAP
+#include "extcap.h"
+#endif
#include "capture_filter_syntax_worker.h"
#include "syntax_line_edit.h"
@@ -60,6 +63,9 @@ void CaptureFilterSyntaxWorker::start() {
forever {
QString filter;
QSet<gint> active_dlts;
+#ifdef HAVE_EXTCAP
+ QSet<guint> active_extcap;
+#endif
struct bpf_program fcode;
pcap_t *pd;
int pc_err;
@@ -88,8 +94,7 @@ void CaptureFilterSyntaxWorker::start() {
device = g_array_index(global_capture_opts.all_ifaces, interface_t, if_idx);
if (!device.locked && device.selected) {
#ifdef HAVE_EXTCAP
- if (device.if_info.extcap == NULL || strlen(device.if_info.extcap) == 0)
- {
+ if (device.if_info.extcap == NULL || strlen(device.if_info.extcap) == 0) {
#endif
if (device.active_dlt >= DLT_USER0 && device.active_dlt <= DLT_USER15) {
// Capture filter for DLT_USER is unknown
@@ -99,10 +104,8 @@ void CaptureFilterSyntaxWorker::start() {
active_dlts.insert(device.active_dlt);
}
#ifdef HAVE_EXTCAP
- }
- else
- {
- //TODO: Verify extcap capture file (bug 11668)
+ } else {
+ active_extcap.insert(if_idx);
}
#endif
}
@@ -139,6 +142,30 @@ void CaptureFilterSyntaxWorker::start() {
if (state == SyntaxLineEdit::Invalid) break;
}
+#ifdef HAVE_EXTCAP
+ // If it's already invalid, don't bother to check extcap
+ if (state != SyntaxLineEdit::Invalid) {
+ foreach (guint extcapif, active_extcap.toList()) {
+ interface_t device;
+ gchar *error = NULL;
+
+ device = g_array_index(global_capture_opts.all_ifaces, interface_t, extcapif);
+ extcap_filter_status status = extcap_verify_capture_filter(device.name, filter.toUtf8().constData(), &error);
+ if (status == EXTCAP_FILTER_VALID) {
+ DEBUG_SYNTAX_CHECK("unknown", "known good");
+ } else if (status == EXTCAP_FILTER_INVALID) {
+ DEBUG_SYNTAX_CHECK("unknown", "known bad");
+ state = SyntaxLineEdit::Invalid;
+ err_str = error;
+ break;
+ } else {
+ state = SyntaxLineEdit::Deprecated;
+ err_str = "Unable to check capture filter";
+ }
+ g_free (error);
+ }
+ }
+#endif
emit syntaxResult(filter, state, err_str);
DEBUG_SYNTAX_CHECK("known", "idle");