summaryrefslogtreecommitdiff
path: root/src/charon/plugins/medcli
diff options
context:
space:
mode:
authorRene Mayrhofer <rene@mayrhofer.eu.org>2008-12-05 16:15:54 +0000
committerRene Mayrhofer <rene@mayrhofer.eu.org>2008-12-05 16:15:54 +0000
commitc7f1b0530b85bc7654e68992f25ed8ced5d0a80d (patch)
tree861798cd7da646014ed6919766b053099646710d /src/charon/plugins/medcli
parent8b80ab5a6950ce6515f477624794defd7531642a (diff)
downloadvyos-strongswan-c7f1b0530b85bc7654e68992f25ed8ced5d0a80d.tar.gz
vyos-strongswan-c7f1b0530b85bc7654e68992f25ed8ced5d0a80d.zip
[svn-upgrade] Integrating new upstream version, strongswan (4.2.9)
Diffstat (limited to 'src/charon/plugins/medcli')
-rw-r--r--src/charon/plugins/medcli/medcli_listener.c76
-rw-r--r--src/charon/plugins/medcli/medcli_listener.h2
2 files changed, 50 insertions, 28 deletions
diff --git a/src/charon/plugins/medcli/medcli_listener.c b/src/charon/plugins/medcli/medcli_listener.c
index 3b4156903..c057ea2b5 100644
--- a/src/charon/plugins/medcli/medcli_listener.c
+++ b/src/charon/plugins/medcli/medcli_listener.c
@@ -51,36 +51,55 @@ struct private_medcli_listener_t {
/**
* Implementation of bus_listener_t.signal.
*/
-static bool signal_(private_medcli_listener_t *this, signal_t signal,
- level_t level, int thread, ike_sa_t* ike_sa, void *data,
- char *format, va_list args)
+static void set_state(private_medcli_listener_t *this, char *alias,
+ mediated_state_t state)
{
- mediated_state_t state;
-
- if (!ike_sa)
+ this->db->execute(this->db, NULL,
+ "UPDATE Connection SET Status = ? WHERE Alias = ?",
+ DB_UINT, state, DB_TEXT, alias);
+}
+/**
+ * Implementation of listener_t.ike_state_change
+ */
+static bool ike_state_change(private_medcli_listener_t *this,
+ ike_sa_t *ike_sa, ike_sa_state_t state)
+{
+ if (ike_sa)
{
- return TRUE;
+ switch (state)
+ {
+ case IKE_CONNECTING:
+ set_state(this, ike_sa->get_name(ike_sa), STATE_CONNECTING);
+ break;
+ case IKE_DESTROYING:
+ set_state(this, ike_sa->get_name(ike_sa), STATE_DOWN);
+ default:
+ break;
+ }
}
+ return TRUE;
+}
- switch (signal)
+/**
+ * Implementation of listener_t.child_state_change
+ */
+static bool child_state_change(private_medcli_listener_t *this,
+ ike_sa_t *ike_sa, child_sa_t *child_sa, child_sa_state_t state)
+{
+ if (ike_sa && child_sa)
{
- case IKE_UP_START:
- state = STATE_CONNECTING;
- break;
- case IKE_UP_FAILED:
- case IKE_DOWN_SUCCESS:
- case IKE_DOWN_FAILED:
- state = STATE_DOWN;
- break;
- case IKE_UP_SUCCESS:
- state = STATE_UP;
- break;
- default:
- return TRUE;
+ switch (state)
+ {
+ case CHILD_INSTALLED:
+ set_state(this, child_sa->get_name(child_sa), STATE_UP);
+ break;
+ case CHILD_DESTROYING:
+ set_state(this, child_sa->get_name(child_sa), STATE_DOWN);
+ break;
+ default:
+ break;
+ }
}
- this->db->execute(this->db, NULL,
- "UPDATE Connection SET Status = ? WHERE Alias = ?",
- DB_UINT, state, DB_TEXT, ike_sa->get_name(ike_sa));
return TRUE;
}
@@ -91,7 +110,7 @@ static void destroy(private_medcli_listener_t *this)
{
this->db->execute(this->db, NULL, "UPDATE Connection SET Status = ?",
DB_UINT, STATE_DOWN);
- free(this);
+ free(this);
}
/**
@@ -100,8 +119,11 @@ static void destroy(private_medcli_listener_t *this)
medcli_listener_t *medcli_listener_create(database_t *db)
{
private_medcli_listener_t *this = malloc_thing(private_medcli_listener_t);
-
- this->public.listener.signal = (bool(*)(bus_listener_t*,signal_t,level_t,int,ike_sa_t*,void*,char*,va_list))signal_;
+
+ memset(&this->public.listener, 0, sizeof(listener_t));
+
+ this->public.listener.ike_state_change = (void*)ike_state_change;
+ this->public.listener.child_state_change = (void*)child_state_change;
this->public.destroy = (void (*)(medcli_listener_t*))destroy;
this->db = db;
diff --git a/src/charon/plugins/medcli/medcli_listener.h b/src/charon/plugins/medcli/medcli_listener.h
index f07218d78..4cec3caad 100644
--- a/src/charon/plugins/medcli/medcli_listener.h
+++ b/src/charon/plugins/medcli/medcli_listener.h
@@ -36,7 +36,7 @@ struct medcli_listener_t {
/**
* Implements bus_listener_t interface
*/
- bus_listener_t listener;
+ listener_t listener;
/**
* Destroy the credentials databse.