diff options
author | Reto Guadagnini <rguadagn@hsr.ch> | 2012-03-23 11:36:49 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-02-19 11:57:21 +0100 |
commit | b1505b345bcf7746b24c5446081981ebbb5e9144 (patch) | |
tree | bfbc93b2a86205fefd1a2098062707c718580726 /src/libstrongswan/resolver/resolver_manager.c | |
parent | ffdeeb660904eb086166177d82ca552eca5ad927 (diff) | |
download | strongswan-b1505b345bcf7746b24c5446081981ebbb5e9144.tar.bz2 strongswan-b1505b345bcf7746b24c5446081981ebbb5e9144.tar.xz |
Added manager for DNS resolvers
Diffstat (limited to 'src/libstrongswan/resolver/resolver_manager.c')
-rw-r--r-- | src/libstrongswan/resolver/resolver_manager.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/libstrongswan/resolver/resolver_manager.c b/src/libstrongswan/resolver/resolver_manager.c new file mode 100644 index 000000000..6486909f6 --- /dev/null +++ b/src/libstrongswan/resolver/resolver_manager.c @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2011-2012 Reto Guadagnini + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "resolver_manager.h" + +#include <utils/debug.h> + +typedef struct private_resolver_manager_t private_resolver_manager_t; + +/** + * private data of resolver_manager + */ +struct private_resolver_manager_t { + + /** + * public functions + */ + resolver_manager_t public; + + /** + * constructor function to create resolver instances + */ + resolver_constructor_t constructor; +}; + +METHOD(resolver_manager_t, add_resolver, void, + private_resolver_manager_t *this, resolver_constructor_t constructor) +{ + if (!this->constructor) + { + this->constructor = constructor; + } +} + +METHOD(resolver_manager_t, remove_resolver, void, + private_resolver_manager_t *this, resolver_constructor_t constructor) +{ + if (this->constructor == constructor) + { + this->constructor = NULL; + } +} + +METHOD(resolver_manager_t, create, resolver_t*, + private_resolver_manager_t *this) +{ + char *resolv_conf; + char *trust_anchor_file; + + resolv_conf = lib->settings->get_str(lib->settings, + "libstrongswan.plugins.resolver." + "resolv_conf", + "/etc/resolv.conf"); + + trust_anchor_file = lib->settings->get_str(lib->settings, + "libstrongswan.plugins.resolver." + "trust_anchor", + "/etc/trust.anchors"); + + return this->constructor(resolv_conf, trust_anchor_file); +} + +METHOD(resolver_manager_t, destroy, void, + private_resolver_manager_t *this) +{ + free(this); +} + +/* + * See header + */ +resolver_manager_t *resolver_manager_create() +{ + private_resolver_manager_t *this; + + INIT(this, + .public = { + .add_resolver = _add_resolver, + .remove_resolver = _remove_resolver, + .create = _create, + .destroy = _destroy, + }, + ); + + return &this->public; +} + |