aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libcharon/plugins/maemo/maemo_service.c44
-rw-r--r--src/libcharon/plugins/maemo/maemo_service.h7
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);