Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/vici_plugin.c, revision 1.1.1.2
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);
1.1.1.2 ! misho 130: this->authority = vici_authority_create(this->dispatcher);
! 131: this->cred = vici_cred_create(this->dispatcher, this->authority);
1.1 misho 132: lib->credmgr->add_set(lib->credmgr, &this->cred->set);
133: lib->credmgr->add_set(lib->credmgr, &this->authority->set);
134: this->config = vici_config_create(this->dispatcher, this->authority,
135: this->cred);
136: this->attrs = vici_attribute_create(this->dispatcher);
137: this->logger = vici_logger_create(this->dispatcher);
138:
139: charon->backends->add_backend(charon->backends,
140: &this->config->backend);
141: charon->attributes->add_provider(charon->attributes,
142: &this->attrs->provider);
143: charon->bus->add_logger(charon->bus, &this->logger->logger);
144: charon->bus->add_listener(charon->bus, &this->query->listener);
145: return TRUE;
146: }
147: return FALSE;
148: }
149: else
150: {
151: charon->bus->remove_listener(charon->bus, &this->query->listener);
152: charon->bus->remove_logger(charon->bus, &this->logger->logger);
153: charon->attributes->remove_provider(charon->attributes,
154: &this->attrs->provider);
155: charon->backends->remove_backend(charon->backends,
156: &this->config->backend);
157:
158: this->logger->destroy(this->logger);
159: this->attrs->destroy(this->attrs);
160: this->config->destroy(this->config);
161: lib->credmgr->remove_set(lib->credmgr, &this->cred->set);
162: lib->credmgr->remove_set(lib->credmgr, &this->authority->set);
163: this->authority->destroy(this->authority);
164: this->cred->destroy(this->cred);
165: this->control->destroy(this->control);
166: this->query->destroy(this->query);
167: this->dispatcher->destroy(this->dispatcher);
168: }
169: return TRUE;
170: }
171:
172: METHOD(plugin_t, get_features, int,
173: private_vici_plugin_t *this, plugin_feature_t *features[])
174: {
175: static plugin_feature_t f[] = {
176: PLUGIN_CALLBACK((plugin_feature_callback_t)register_vici, NULL),
177: PLUGIN_PROVIDE(CUSTOM, "vici"),
178: PLUGIN_SDEPEND(CUSTOM, "counters"),
179: };
180: *features = f;
181: return countof(f);
182: }
183:
184: METHOD(plugin_t, destroy, void,
185: private_vici_plugin_t *this)
186: {
187: free(this);
188: }
189:
190: /*
191: * see header file
192: */
193: plugin_t *vici_plugin_create()
194: {
195: private_vici_plugin_t *this;
196:
197: INIT(this,
198: .public = {
199: .plugin = {
200: .get_name = _get_name,
201: .reload = (void*)return_false,
202: .get_features = _get_features,
203: .destroy = _destroy,
204: },
205: },
206: );
207:
208: return &this->public.plugin;
209: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>