Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/vici_plugin.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2014 Martin Willi
! 3: * Copyright (C) 2014 revosec AG
! 4: *
! 5: * Copyright (C) 2015-2016 Andreas Steffen
! 6: * HSR Hochschule fuer Technik Rapperswil
! 7: *
! 8: * This program is free software; you can redistribute it and/or modify it
! 9: * under the terms of the GNU General Public License as published by the
! 10: * Free Software Foundation; either version 2 of the License, or (at your
! 11: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 12: *
! 13: * This program is distributed in the hope that it will be useful, but
! 14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 16: * for more details.
! 17: */
! 18:
! 19: /*
! 20: * Copyright (C) 2014 Timo Teräs <timo.teras@iki.fi>
! 21: *
! 22: * Permission is hereby granted, free of charge, to any person obtaining a copy
! 23: * of this software and associated documentation files (the "Software"), to deal
! 24: * in the Software without restriction, including without limitation the rights
! 25: * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
! 26: * copies of the Software, and to permit persons to whom the Software is
! 27: * furnished to do so, subject to the following conditions:
! 28: *
! 29: * The above copyright notice and this permission notice shall be included in
! 30: * all copies or substantial portions of the Software.
! 31: *
! 32: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
! 33: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
! 34: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
! 35: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
! 36: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
! 37: * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
! 38: * THE SOFTWARE.
! 39: */
! 40:
! 41: #include "vici_plugin.h"
! 42: #include "vici_dispatcher.h"
! 43: #include "vici_query.h"
! 44: #include "vici_control.h"
! 45: #include "vici_cred.h"
! 46: #include "vici_config.h"
! 47: #include "vici_attribute.h"
! 48: #include "vici_authority.h"
! 49: #include "vici_logger.h"
! 50:
! 51: #include <library.h>
! 52: #include <daemon.h>
! 53:
! 54: typedef struct private_vici_plugin_t private_vici_plugin_t;
! 55:
! 56: /**
! 57: * Private members of vici_plugin_t
! 58: */
! 59: struct private_vici_plugin_t {
! 60:
! 61: /**
! 62: * public functions
! 63: */
! 64: vici_plugin_t public;
! 65:
! 66: /**
! 67: * Dispatcher, creating socket
! 68: */
! 69: vici_dispatcher_t *dispatcher;
! 70:
! 71: /**
! 72: * Query commands
! 73: */
! 74: vici_query_t *query;
! 75:
! 76: /**
! 77: * Control commands
! 78: */
! 79: vici_control_t *control;
! 80:
! 81: /**
! 82: * Credential backend
! 83: */
! 84: vici_cred_t *cred;
! 85:
! 86: /**
! 87: * Certification Authority backend
! 88: */
! 89: vici_authority_t *authority;
! 90:
! 91: /**
! 92: * Configuration backend
! 93: */
! 94: vici_config_t *config;
! 95:
! 96: /**
! 97: * IKE attribute backend
! 98: */
! 99: vici_attribute_t *attrs;
! 100:
! 101: /**
! 102: * Generic debug logger
! 103: */
! 104: vici_logger_t *logger;
! 105: };
! 106:
! 107: METHOD(plugin_t, get_name, char*,
! 108: private_vici_plugin_t *this)
! 109: {
! 110: return "vici";
! 111: }
! 112:
! 113: /**
! 114: * Register vici plugin features
! 115: */
! 116: static bool register_vici(private_vici_plugin_t *this,
! 117: plugin_feature_t *feature, bool reg, void *data)
! 118: {
! 119: if (reg)
! 120: {
! 121: char *uri;
! 122:
! 123: uri = lib->settings->get_str(lib->settings, "%s.plugins.vici.socket",
! 124: VICI_DEFAULT_URI, lib->ns);
! 125: this->dispatcher = vici_dispatcher_create(uri);
! 126: if (this->dispatcher)
! 127: {
! 128: this->query = vici_query_create(this->dispatcher);
! 129: this->control = vici_control_create(this->dispatcher);
! 130: this->cred = vici_cred_create(this->dispatcher);
! 131: this->authority = vici_authority_create(this->dispatcher,
! 132: this->cred);
! 133: lib->credmgr->add_set(lib->credmgr, &this->cred->set);
! 134: lib->credmgr->add_set(lib->credmgr, &this->authority->set);
! 135: this->config = vici_config_create(this->dispatcher, this->authority,
! 136: this->cred);
! 137: this->attrs = vici_attribute_create(this->dispatcher);
! 138: this->logger = vici_logger_create(this->dispatcher);
! 139:
! 140: charon->backends->add_backend(charon->backends,
! 141: &this->config->backend);
! 142: charon->attributes->add_provider(charon->attributes,
! 143: &this->attrs->provider);
! 144: charon->bus->add_logger(charon->bus, &this->logger->logger);
! 145: charon->bus->add_listener(charon->bus, &this->query->listener);
! 146: return TRUE;
! 147: }
! 148: return FALSE;
! 149: }
! 150: else
! 151: {
! 152: charon->bus->remove_listener(charon->bus, &this->query->listener);
! 153: charon->bus->remove_logger(charon->bus, &this->logger->logger);
! 154: charon->attributes->remove_provider(charon->attributes,
! 155: &this->attrs->provider);
! 156: charon->backends->remove_backend(charon->backends,
! 157: &this->config->backend);
! 158:
! 159: this->logger->destroy(this->logger);
! 160: this->attrs->destroy(this->attrs);
! 161: this->config->destroy(this->config);
! 162: lib->credmgr->remove_set(lib->credmgr, &this->cred->set);
! 163: lib->credmgr->remove_set(lib->credmgr, &this->authority->set);
! 164: this->authority->destroy(this->authority);
! 165: this->cred->destroy(this->cred);
! 166: this->control->destroy(this->control);
! 167: this->query->destroy(this->query);
! 168: this->dispatcher->destroy(this->dispatcher);
! 169: }
! 170: return TRUE;
! 171: }
! 172:
! 173: METHOD(plugin_t, get_features, int,
! 174: private_vici_plugin_t *this, plugin_feature_t *features[])
! 175: {
! 176: static plugin_feature_t f[] = {
! 177: PLUGIN_CALLBACK((plugin_feature_callback_t)register_vici, NULL),
! 178: PLUGIN_PROVIDE(CUSTOM, "vici"),
! 179: PLUGIN_SDEPEND(CUSTOM, "counters"),
! 180: };
! 181: *features = f;
! 182: return countof(f);
! 183: }
! 184:
! 185: METHOD(plugin_t, destroy, void,
! 186: private_vici_plugin_t *this)
! 187: {
! 188: free(this);
! 189: }
! 190:
! 191: /*
! 192: * see header file
! 193: */
! 194: plugin_t *vici_plugin_create()
! 195: {
! 196: private_vici_plugin_t *this;
! 197:
! 198: INIT(this,
! 199: .public = {
! 200: .plugin = {
! 201: .get_name = _get_name,
! 202: .reload = (void*)return_false,
! 203: .get_features = _get_features,
! 204: .destroy = _destroy,
! 205: },
! 206: },
! 207: );
! 208:
! 209: return &this->public.plugin;
! 210: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>