summaryrefslogtreecommitdiff
path: root/extcap.c
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 /extcap.c
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 'extcap.c')
-rw-r--r--extcap.c49
1 files changed, 49 insertions, 0 deletions
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)
{