provider: Allow VPN connection if not in connected state
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Wed, 8 Aug 2012 10:22:47 +0000 (13:22 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Thu, 9 Aug 2012 09:16:51 +0000 (12:16 +0300)
Allow user to connect to VPN via dbus and supplying all
VPN parameters if the provider already exists but the VPN
is not in connected state.

This means that the user can call the Manager.ConnectProvider interface
multiple times to connect to VPN service. This patch is needed so that
OpenConnect can work correctly. Without this patch the OpenConnect cookie
cannot be passed to openconnect client program.

src/provider.c

index 3f4bb1c..ebc7055 100644 (file)
@@ -700,8 +700,21 @@ static struct connman_provider *provider_create_from_keyfile(GKeyFile *keyfile,
 
 static int provider_create_service(struct connman_provider *provider)
 {
-       if (provider->vpn_service != NULL)
-               return -EALREADY;
+       if (provider->vpn_service != NULL) {
+               connman_bool_t connected;
+
+               connected = __connman_service_is_connected_state(
+                       provider->vpn_service, CONNMAN_IPCONFIG_TYPE_IPV4);
+               if (connected == TRUE)
+                       return -EALREADY;
+
+               connected = __connman_service_is_connected_state(
+                       provider->vpn_service, CONNMAN_IPCONFIG_TYPE_IPV6);
+               if (connected == TRUE)
+                       return -EALREADY;
+
+               return 0;
+       }
 
        provider->vpn_service =
                __connman_service_create_from_provider(provider);