X-Git-Url: https://git.strongswan.org/?p=strongswan.git;a=blobdiff_plain;f=src%2Flibcharon%2Fplugins%2Fdhcp%2Fdhcp_plugin.c;h=829fd63560813b0f58fa43bc848ea918666982e6;hp=0f7ab041d66a4a093343b5f4bcc54ab18944db4a;hb=19d49af53946999661209e0f915177b499a83585;hpb=beaa048eed92d00aa23547e55be7e6dc8a450206 diff --git a/src/libcharon/plugins/dhcp/dhcp_plugin.c b/src/libcharon/plugins/dhcp/dhcp_plugin.c index 0f7ab04..829fd63 100644 --- a/src/libcharon/plugins/dhcp/dhcp_plugin.c +++ b/src/libcharon/plugins/dhcp/dhcp_plugin.c @@ -15,8 +15,12 @@ #include "dhcp_plugin.h" +#include #include +#include "dhcp_socket.h" +#include "dhcp_provider.h" + typedef struct private_dhcp_plugin_t private_dhcp_plugin_t; /** @@ -28,11 +32,25 @@ struct private_dhcp_plugin_t { * implements plugin interface */ dhcp_plugin_t public; + + /** + * DHCP communication socket + */ + dhcp_socket_t *socket; + + /** + * Attribute provider + */ + dhcp_provider_t *provider; }; METHOD(plugin_t, destroy, void, private_dhcp_plugin_t *this) { + hydra->attributes->remove_provider(hydra->attributes, + &this->provider->provider); + this->provider->destroy(this->provider); + this->socket->destroy(this->socket); free(this); } @@ -45,8 +63,19 @@ plugin_t *dhcp_plugin_create() INIT(this, .public.plugin.destroy = _destroy, + .socket = dhcp_socket_create(), ); + if (!this->socket) + { + free(this); + return NULL; + } + + this->provider = dhcp_provider_create(this->socket); + hydra->attributes->add_provider(hydra->attributes, + &this->provider->provider); + return &this->public.plugin; }