From 6c44f2017c891e15045fca5c5cff79acd48ad4e5 Mon Sep 17 00:00:00 2001 From: Michael Mann Date: Fri, 26 May 2017 07:52:17 -0400 Subject: Qt: Add support to verify extcap capture filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 11668 Change-Id: Ib218d87c1905e53ffdab4e3dd6f93ba2c3d07c8b Reviewed-on: https://code.wireshark.org/review/21770 Petri-Dish: Stig Bjørlykke Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann Reviewed-by: Roland Knall --- extcap.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'extcap.c') diff --git a/extcap.c b/extcap.c index 316d630b8e..859324ae21 100644 --- a/extcap.c +++ b/extcap.c @@ -893,6 +893,55 @@ extcap_has_configuration(const char *ifname, gboolean is_required) return found; } +static gboolean cb_verify_filter(extcap_callback_info_t cb_info) +{ + extcap_filter_status *status = (extcap_filter_status *)cb_info.data; + size_t output_size, i; + + output_size = strlen(cb_info.output); + if (output_size == 0) { + *status = EXTCAP_FILTER_VALID; + } else { + *status = EXTCAP_FILTER_INVALID; + for (i = 0; i < output_size; i++) { + if (cb_info.output[i] == '\n' || cb_info.output[i] == '\r') { + cb_info.output[i] = '\0'; + break; + } + } + *cb_info.err_str = g_strdup(cb_info.output); + } + + return TRUE; +} + +extcap_filter_status +extcap_verify_capture_filter(const char *ifname, const char *filter, gchar **err_str) +{ + gchar *argv[4]; + extcap_filter_status status = EXTCAP_FILTER_UNKNOWN; + + if (extcap_if_exists(ifname)) + { + g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap path %s", + get_extcap_dir()); + + argv[0] = EXTCAP_ARGUMENT_CAPTURE_FILTER; + argv[1] = (gchar*)filter; + argv[2] = EXTCAP_ARGUMENT_INTERFACE; + argv[3] = (gchar*)ifname; + + extcap_callback_info_t cb_info; + cb_info.data = &status; + cb_info.err_str = err_str; + cb_info.ifname = ifname; + + extcap_foreach(4, argv, cb_verify_filter, cb_info); + } + + return status; +} + gboolean extcap_has_toolbar(const char *ifname) { -- cgit v1.2.1