aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-07-03 10:46:30 +0200
committerMartin Willi <martin@strongswan.org>2009-07-03 16:16:00 +0200
commit6e61122727546d9a6b4a9d71469aefedeafc751a (patch)
tree77973f3691f5b15e7af546382cfb775d518dd54c
parent7be566dc1f7f6c1724ea0d5f2517bddf3ab621c5 (diff)
downloadstrongswan-6e61122727546d9a6b4a9d71469aefedeafc751a.tar.bz2
strongswan-6e61122727546d9a6b4a9d71469aefedeafc751a.tar.xz
listen for CHILD_SA state changes only until it has been installed
-rw-r--r--src/charon/plugins/nm/nm_service.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/charon/plugins/nm/nm_service.c b/src/charon/plugins/nm/nm_service.c
index 5d036d43f..574c5bdf3 100644
--- a/src/charon/plugins/nm/nm_service.c
+++ b/src/charon/plugins/nm/nm_service.c
@@ -173,6 +173,7 @@ static bool child_state_change(listener_t *listener, ike_sa_t *ike_sa,
{
case CHILD_INSTALLED:
signal_ipv4_config(private->plugin, ike_sa, child_sa);
+ listener->child_state_change = NULL;
break;
case CHILD_DESTROYING:
signal_failure(private->plugin,
@@ -208,6 +209,7 @@ static gboolean connect_(NMVPNPlugin *plugin, NMConnection *connection,
{
nm_creds_t *creds;
NMSettingVPN *settings;
+ listener_t *listener;
identification_t *user = NULL, *gateway;
const char *address, *str;
bool virtual, encap, ipcomp;
@@ -459,8 +461,9 @@ static gboolean connect_(NMVPNPlugin *plugin, NMConnection *connection,
* Register listener
*/
NM_STRONGSWAN_PLUGIN_GET_PRIVATE(plugin)->ike_sa = ike_sa;
- charon->bus->add_listener(charon->bus,
- &NM_STRONGSWAN_PLUGIN_GET_PRIVATE(plugin)->listener);
+ listener = &NM_STRONGSWAN_PLUGIN_GET_PRIVATE(plugin)->listener;
+ listener->child_state_change = child_state_change;
+ charon->bus->add_listener(charon->bus, listener);
charon->ike_sa_manager->checkin(charon->ike_sa_manager, ike_sa);
return TRUE;
}
@@ -556,7 +559,6 @@ static void nm_strongswan_plugin_init(NMStrongswanPlugin *plugin)
private->plugin = NM_VPN_PLUGIN(plugin);
memset(&private->listener.log, 0, sizeof(listener_t));
private->listener.ike_state_change = ike_state_change;
- private->listener.child_state_change = child_state_change;
private->listener.ike_keys = ike_keys;
}