aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/socket_raw/socket_raw_plugin.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2010-10-15 17:24:23 +0200
committerTobias Brunner <tobias@strongswan.org>2010-10-15 17:30:21 +0200
commitfa208494319efd0bc48fa63bfff9dac9bef84a55 (patch)
treecd20dae44e8f03eec2d505400830db0b84a7d656 /src/libcharon/plugins/socket_raw/socket_raw_plugin.c
parent4de8398f931e1777c685710c87ad412bcf6715c4 (diff)
downloadstrongswan-fa208494319efd0bc48fa63bfff9dac9bef84a55.tar.bz2
strongswan-fa208494319efd0bc48fa63bfff9dac9bef84a55.tar.xz
Deferred instantiation of socket implmentations until registration.
Instantiating the implementations on plugin load was problematic in case multiple socket plugins were loaded. Now, the first one registered is instantiated.
Diffstat (limited to 'src/libcharon/plugins/socket_raw/socket_raw_plugin.c')
-rw-r--r--src/libcharon/plugins/socket_raw/socket_raw_plugin.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/libcharon/plugins/socket_raw/socket_raw_plugin.c b/src/libcharon/plugins/socket_raw/socket_raw_plugin.c
index 5b4c044f6..17a3a8db7 100644
--- a/src/libcharon/plugins/socket_raw/socket_raw_plugin.c
+++ b/src/libcharon/plugins/socket_raw/socket_raw_plugin.c
@@ -1,4 +1,6 @@
/*
+ * Copyright (C) 2010 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
* Copyright (C) 2010 Martin Willi
* Copyright (C) 2010 revosec AG
*
@@ -31,17 +33,13 @@ struct private_socket_raw_plugin_t {
*/
socket_raw_plugin_t public;
- /**
- * Raw socket instance.
- */
- socket_raw_socket_t *socket;
};
METHOD(plugin_t, destroy, void,
private_socket_raw_plugin_t *this)
{
- charon->socket->remove_socket(charon->socket, &this->socket->socket);
- this->socket->destroy(this->socket);
+ charon->socket->remove_socket(charon->socket,
+ (socket_constructor_t)socket_raw_socket_create);
free(this);
}
@@ -58,15 +56,10 @@ plugin_t *socket_raw_plugin_create()
.destroy = _destroy,
},
},
- .socket = socket_raw_socket_create(),
);
- if (!this->socket)
- {
- free(this);
- return NULL;
- }
- charon->socket->add_socket(charon->socket, &this->socket->socket);
+ charon->socket->add_socket(charon->socket,
+ (socket_constructor_t)socket_raw_socket_create);
return &this->public.plugin;
}