123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #include "unity_plugin.h"
- #include "unity_handler.h"
- #include "unity_narrow.h"
- #include "unity_provider.h"
- #include <daemon.h>
- typedef struct private_unity_plugin_t private_unity_plugin_t;
- struct private_unity_plugin_t {
-
- unity_plugin_t public;
-
- unity_handler_t *handler;
-
- unity_provider_t *provider;
-
- unity_narrow_t *narrower;
- };
- METHOD(plugin_t, get_name, char*,
- private_unity_plugin_t *this)
- {
- return "unity";
- }
- static bool plugin_cb(private_unity_plugin_t *this,
- plugin_feature_t *feature, bool reg, void *cb_data)
- {
- if (reg)
- {
- charon->attributes->add_handler(charon->attributes,
- &this->handler->handler);
- charon->attributes->add_provider(charon->attributes,
- &this->provider->provider);
- charon->bus->add_listener(charon->bus, &this->narrower->listener);
- }
- else
- {
- charon->bus->remove_listener(charon->bus, &this->narrower->listener);
- charon->attributes->remove_handler(charon->attributes,
- &this->handler->handler);
- charon->attributes->remove_provider(charon->attributes,
- &this->provider->provider);
- }
- return TRUE;
- }
- METHOD(plugin_t, get_features, int,
- private_unity_plugin_t *this, plugin_feature_t *features[])
- {
- static plugin_feature_t f[] = {
- PLUGIN_CALLBACK((plugin_feature_callback_t)plugin_cb, NULL),
- PLUGIN_PROVIDE(CUSTOM, "unity"),
- };
- *features = f;
- return countof(f);
- }
- METHOD(plugin_t, destroy, void,
- private_unity_plugin_t *this)
- {
- this->narrower->destroy(this->narrower);
- this->handler->destroy(this->handler);
- this->provider->destroy(this->provider);
- free(this);
- }
- plugin_t *unity_plugin_create()
- {
- private_unity_plugin_t *this;
- INIT(this,
- .public = {
- .plugin = {
- .get_name = _get_name,
- .get_features = _get_features,
- .destroy = _destroy,
- },
- },
- .handler = unity_handler_create(),
- .provider = unity_provider_create(),
- );
- this->narrower = unity_narrow_create(this->handler);
- return &this->public.plugin;
- }
|