diff options
-rw-r--r-- | src/libcharon/plugins/maemo/maemo_service.c | 44 | ||||
-rw-r--r-- | src/libcharon/plugins/maemo/maemo_service.h | 7 |
2 files changed, 51 insertions, 0 deletions
diff --git a/src/libcharon/plugins/maemo/maemo_service.c b/src/libcharon/plugins/maemo/maemo_service.c index 6d1e8141e..ad150d7f8 100644 --- a/src/libcharon/plugins/maemo/maemo_service.c +++ b/src/libcharon/plugins/maemo/maemo_service.c @@ -60,6 +60,11 @@ struct private_maemo_service_t { osso_context_t *context; /** + * current IKE_SA + */ + ike_sa_t *ike_sa; + + /** * Name of the current connection */ gchar *current; @@ -77,6 +82,36 @@ static gint change_status(private_maemo_service_t *this, int status) return res; } +METHOD(listener_t, ike_updown, bool, + private_maemo_service_t *this, ike_sa_t *ike_sa, bool up) +{ + return TRUE; +} + +METHOD(listener_t, child_state_change, bool, + private_maemo_service_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, + child_sa_state_t state) +{ + return TRUE; +} + +METHOD(listener_t, child_updown, bool, + private_maemo_service_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, + bool up) +{ + return TRUE; +} + +METHOD(listener_t, ike_rekey, bool, + private_maemo_service_t *this, ike_sa_t *old, ike_sa_t *new) +{ + if (this->ike_sa == old) + { + this->ike_sa = new; + } + return TRUE; +} + static gboolean initiate_connection(private_maemo_service_t *this, GArray *arguments) { @@ -285,6 +320,7 @@ METHOD(maemo_service_t, destroy, void, { osso_deinitialize(this->context); } + charon->bus->remove_listener(charon->bus, &this->public.listener); lib->credmgr->remove_set(lib->credmgr, &this->creds->set); this->creds->destroy(this->creds); free(this); @@ -300,6 +336,12 @@ maemo_service_t *maemo_service_create() INIT(this, .public = { + .listener = { + .ike_updown = _ike_updown, + .child_state_change = _child_state_change, + .child_updown = _child_updown, + .ike_rekey = _ike_rekey, + }, .destroy = _destroy, }, .creds = mem_cred_create(), @@ -334,6 +376,8 @@ maemo_service_t *maemo_service_create() g_thread_init(NULL); } + charon->bus->add_listener(charon->bus, &this->public.listener); + lib->processor->queue_job(lib->processor, (job_t*)callback_job_create((callback_job_cb_t)run, this, NULL, NULL)); diff --git a/src/libcharon/plugins/maemo/maemo_service.h b/src/libcharon/plugins/maemo/maemo_service.h index 129c3f893..b0240cbaa 100644 --- a/src/libcharon/plugins/maemo/maemo_service.h +++ b/src/libcharon/plugins/maemo/maemo_service.h @@ -21,6 +21,8 @@ #ifndef MAEMO_SERVICE_H_ #define MAEMO_SERVICE_H_ +#include <bus/listeners/listener.h> + typedef struct maemo_service_t maemo_service_t; /** @@ -29,6 +31,11 @@ typedef struct maemo_service_t maemo_service_t; struct maemo_service_t { /** + * Implements listener_t. + */ + listener_t listener; + + /** * Destroy a maemo_service_t. */ void (*destroy)(maemo_service_t *this); |