diff options
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.patch | 170 |
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 + |