aboutsummaryrefslogtreecommitdiffstats
path: root/main/strongswan/0004-vici-Add-get_bool-convenience-getter-for-VICI-messag.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/strongswan/0004-vici-Add-get_bool-convenience-getter-for-VICI-messag.patch')
-rw-r--r--main/strongswan/0004-vici-Add-get_bool-convenience-getter-for-VICI-messag.patch170
1 files changed, 170 insertions, 0 deletions
diff --git a/main/strongswan/0004-vici-Add-get_bool-convenience-getter-for-VICI-messag.patch b/main/strongswan/0004-vici-Add-get_bool-convenience-getter-for-VICI-messag.patch
new file mode 100644
index 0000000000..feb471a400
--- /dev/null
+++ b/main/strongswan/0004-vici-Add-get_bool-convenience-getter-for-VICI-messag.patch
@@ -0,0 +1,170 @@
+From e18f39025363224790d64e5b4eaa1c268f95b528 Mon Sep 17 00:00:00 2001
+From: Tobias Brunner <tobias@strongswan.org>
+Date: Thu, 16 Jul 2015 17:51:40 +0200
+Subject: [PATCH] vici: Add get_bool() convenience getter for VICI messages
+
+---
+ src/libcharon/plugins/vici/suites/test_message.c | 31 ++++++++++++++++++
+ src/libcharon/plugins/vici/vici_message.c | 40 ++++++++++++++++++++++++
+ src/libcharon/plugins/vici/vici_message.h | 23 ++++++++++++++
+ 3 files changed, 94 insertions(+)
+
+diff --git a/src/libcharon/plugins/vici/suites/test_message.c b/src/libcharon/plugins/vici/suites/test_message.c
+index e76d273..045e34f 100644
+--- a/src/libcharon/plugins/vici/suites/test_message.c
++++ b/src/libcharon/plugins/vici/suites/test_message.c
+@@ -1,4 +1,7 @@
+ /*
++ * Copyright (C) 2015 Tobias Brunner
++ * Hochschule fuer Technik Rapperswil
++ *
+ * Copyright (C) 2014 Martin Willi
+ * Copyright (C) 2014 revosec AG
+ *
+@@ -355,6 +358,33 @@ START_TEST(test_get_int)
+ }
+ END_TEST
+
++START_TEST(test_get_bool)
++{
++ vici_message_t *m;
++
++ m = build_getter_msg();
++
++ ck_assert(m->get_bool(m, TRUE, "key1"));
++ ck_assert(m->get_bool(m, FALSE, "key1"));
++
++ ck_assert(m->get_bool(m, TRUE, "section1.key2"));
++ ck_assert(m->get_bool(m, TRUE, "section1.section2.key3"));
++ ck_assert(m->get_bool(m, TRUE, "section1.key4"));
++ ck_assert(m->get_bool(m, TRUE, "key5"));
++ ck_assert(m->get_bool(m, TRUE, "nonexistent"));
++ ck_assert(m->get_bool(m, TRUE, "n.o.n.e.x.i.s.t.e.n.t"));
++
++ ck_assert(!m->get_bool(m, FALSE, "section1.key2"));
++ ck_assert(!m->get_bool(m, FALSE, "section1.section2.key3"));
++ ck_assert(!m->get_bool(m, FALSE, "section1.key4"));
++ ck_assert(!m->get_bool(m, FALSE, "key5"));
++ ck_assert(!m->get_bool(m, FALSE, "nonexistent"));
++ ck_assert(!m->get_bool(m, FALSE, "n.o.n.e.x.i.s.t.e.n.t"));
++
++ m->destroy(m);
++}
++END_TEST
++
+ START_TEST(test_get_value)
+ {
+ vici_message_t *m;
+@@ -400,6 +430,7 @@ Suite *message_suite_create()
+ tc = tcase_create("convenience getters");
+ tcase_add_test(tc, test_get_str);
+ tcase_add_test(tc, test_get_int);
++ tcase_add_test(tc, test_get_bool);
+ tcase_add_test(tc, test_get_value);
+ suite_add_tcase(s, tc);
+
+diff --git a/src/libcharon/plugins/vici/vici_message.c b/src/libcharon/plugins/vici/vici_message.c
+index e79fbc8..fb6e8a1 100644
+--- a/src/libcharon/plugins/vici/vici_message.c
++++ b/src/libcharon/plugins/vici/vici_message.c
+@@ -1,4 +1,7 @@
+ /*
++ * Copyright (C) 2015 Tobias Brunner
++ * Hochschule fuer Technik Rapperswil
++ *
+ * Copyright (C) 2014 Martin Willi
+ * Copyright (C) 2014 revosec AG
+ *
+@@ -385,6 +388,41 @@ METHOD(vici_message_t, get_int, int,
+ return val;
+ }
+
++METHOD(vici_message_t, vget_bool, bool,
++ private_vici_message_t *this, bool def, char *fmt, va_list args)
++{
++ chunk_t value;
++ bool found;
++ char buf[16];
++
++ found = find_value(this, &value, fmt, args);
++ if (found)
++ {
++ if (value.len == 0)
++ {
++ return def;
++ }
++ if (chunk_printable(value, NULL, 0))
++ {
++ snprintf(buf, sizeof(buf), "%.*s", (int)value.len, value.ptr);
++ return settings_value_as_bool(buf, def);
++ }
++ }
++ return def;
++}
++
++METHOD(vici_message_t, get_bool, bool,
++ private_vici_message_t *this, bool def, char *fmt, ...)
++{
++ va_list args;
++ bool val;
++
++ va_start(args, fmt);
++ val = vget_bool(this, def, fmt, args);
++ va_end(args);
++ return val;
++}
++
+ METHOD(vici_message_t, vget_value, chunk_t,
+ private_vici_message_t *this, chunk_t def, char *fmt, va_list args)
+ {
+@@ -633,6 +671,8 @@ vici_message_t *vici_message_create_from_data(chunk_t data, bool cleanup)
+ .vget_str = _vget_str,
+ .get_int = _get_int,
+ .vget_int = _vget_int,
++ .get_bool = _get_bool,
++ .vget_bool = _vget_bool,
+ .get_value = _get_value,
+ .vget_value = _vget_value,
+ .get_encoding = _get_encoding,
+diff --git a/src/libcharon/plugins/vici/vici_message.h b/src/libcharon/plugins/vici/vici_message.h
+index 1a89cf8..7f357b8 100644
+--- a/src/libcharon/plugins/vici/vici_message.h
++++ b/src/libcharon/plugins/vici/vici_message.h
+@@ -1,4 +1,7 @@
+ /*
++ * Copyright (C) 2015 Tobias Brunner
++ * Hochschule fuer Technik Rapperswil
++ *
+ * Copyright (C) 2014 Martin Willi
+ * Copyright (C) 2014 revosec AG
+ *
+@@ -138,6 +141,26 @@ struct vici_message_t {
+ int (*vget_int)(vici_message_t *this, int def, char *fmt, va_list args);
+
+ /**
++ * Get the value of a key/value pair as boolean.
++ *
++ * @param def default value if not found
++ * @param fmt printf style format string for key, with sections
++ * @param ... arguments to fmt string
++ * @return value
++ */
++ bool (*get_bool)(vici_message_t *this, bool def, char *fmt, ...);
++
++ /**
++ * Get the value of a key/value pair as boolean, va_list variant
++ *
++ * @param def default value if not found
++ * @param fmt printf style format string for key, with sections
++ * @param args arguments to fmt string
++ * @return value
++ */
++ bool (*vget_bool)(vici_message_t *this, bool def, char *fmt, va_list args);
++
++ /**
+ * Get the raw value of a key/value pair.
+ *
+ * @param def default value if not found
+--
+2.4.5
+