Add connman_provider_set_autoconnect() for setting the VPN autoconnect
value. If a change took place save the VPN service.
It is imperative to save the VPN service when autoconnect changes since
otherwise the change is done only to run-time service settings and not
written to disk if user has canceled VPN agent dialog, for example.
Otherwise the data within connman and service file is out of sync, and
next restart of connman will be a race between each VPNs that were
attempted to connect but canceled by user.
---
include/provider.h | 2 ++
src/provider.c | 11 +++++++++++
2 files changed, 13 insertions(+)
diff --git a/include/provider.h b/include/provider.h
index d28651ad..aa563edf 100644
--- a/include/provider.h
+++ b/include/provider.h
@@ -111,6 +111,8 @@ int connman_provider_set_domain(struct connman_provider *provider,
const char *domain);
int connman_provider_set_nameservers(struct connman_provider *provider,
char * const *nameservers);
+void connman_provider_set_autoconnect(struct connman_provider *provider,
+ bool flag);
int connman_provider_append_route(struct connman_provider *provider,
const char *key, const char *value);
diff --git a/src/provider.c b/src/provider.c
index 9d9741e1..33671b2f 100644
--- a/src/provider.c
+++ b/src/provider.c
@@ -579,6 +579,17 @@ int connman_provider_set_nameservers(struct connman_provider
*provider,
return 0;
}
+void connman_provider_set_autoconnect(struct connman_provider *provider,
+ bool flag)
+{
+ if (provider && provider->vpn_service) {
+ /* Save VPN service if autoconnect value changes */
+ if (connman_service_set_autoconnect(provider->vpn_service,
+ flag))
+ __connman_service_save(provider->vpn_service);
+ }
+}
+
static void unregister_provider(gpointer data)
{
struct connman_provider *provider = data;
--
2.20.1