vpnd: Add function that quits vpnd if no VPN configurations are found
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Mon, 12 Nov 2012 12:07:52 +0000 (14:07 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 23 Nov 2012 10:58:52 +0000 (12:58 +0200)
vpn/vpn-provider.c
vpn/vpn.h

index 27783bc..a69b458 100644 (file)
@@ -2109,6 +2109,28 @@ void vpn_provider_driver_unregister(struct vpn_provider_driver *driver)
        driver_list = g_slist_remove(driver_list, driver);
 }
 
+static gboolean check_vpn_count(gpointer data)
+{
+       if (configuration_count == 0) {
+               connman_info("No VPN configurations found, quitting.");
+               raise(SIGTERM);
+       }
+
+       return FALSE;
+}
+
+void __vpn_provider_check_connections(void)
+{
+       /*
+        * If we were started when there is no providers configured,
+        * then just quit. This happens when connman starts and its
+        * vpn plugin asks connman-vpnd if it has any connections
+        * configured. If there are none, then we can stop the vpn
+        * daemon.
+        */
+       g_timeout_add(1000, check_vpn_count, NULL);
+}
+
 int __vpn_provider_init(gboolean do_routes)
 {
        DBG("");
index 598c86d..2b36b30 100644 (file)
--- a/vpn/vpn.h
+++ b/vpn/vpn.h
@@ -87,6 +87,7 @@ int __vpn_provider_connect(struct vpn_provider *provider);
 int __vpn_provider_connect_path(const char *path);
 int __vpn_provider_disconnect(struct vpn_provider *provider);
 int __vpn_provider_remove(const char *path);
+void __vpn_provider_check_connections(void);
 void __vpn_provider_cleanup(void);
 int __vpn_provider_init(gboolean handle_routes);