wireguard: Save plugin related settings in config file
[platform/upstream/connman.git] / vpn / plugins / wireguard.c
index 7541dd6..d8f32b3 100644 (file)
@@ -243,7 +243,7 @@ static char *get_ifname(void)
        for (i = 0; i < 256; i++) {
                data.ifname = g_strdup_printf("wg%d", i);
                data.found = false;
-               __vpn_ipconfig_foreach(ifname_check_cb, &data);
+               vpn_ipconfig_foreach(ifname_check_cb, &data);
 
                if (!data.found)
                        return data.ifname;
@@ -407,7 +407,7 @@ static int wg_connect(struct vpn_provider *provider,
                err = -ENOENT;
                goto done;
        }
-       stpncpy(info->device.name, ifname, sizeof(info->device.name));
+       stpncpy(info->device.name, ifname, sizeof(info->device.name) - 1);
        g_free(ifname);
 
        err = wg_add_device(info->device.name);
@@ -460,10 +460,114 @@ static void wg_disconnect(struct vpn_provider *provider)
        g_free(info);
 }
 
+#if defined TIZEN_EXT
+static int wg_save(struct vpn_provider *provider, GKeyFile *keyfile)
+{
+       const char *option;
+
+       DBG("");
+
+       /*
+        * The client/own device listen port.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.ListenPort");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.ListenPort",
+                               option);
+
+       /*
+        * comma separated DNS.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.DNS");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.DNS",
+                               option);
+
+       /*
+        * The client private key.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.PrivateKey");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.PrivateKey",
+                               option);
+
+       /*
+        * The server public key.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.PublicKey");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.PublicKey",
+                               option);
+
+       /*
+        * The preshared key.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.PresharedKey");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.PresharedKey",
+                               option);
+
+       /*
+        * Subnets accessed via VPN tunnel, 0.0.0.0/0 routes all traffic.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.AllowedIPs");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.AllowedIPs",
+                               option);
+
+       /*
+        * The time in seconds to emit periodic keep alive message.
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.PersistentKeepalive");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.PersistentKeepalive",
+                               option);
+
+       /*
+        * The server listen port, default: 51820
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.EndpointPort");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.EndpointPort",
+                               option);
+
+       /*
+        * Save Address: The internal IP of the client node
+        */
+       option = vpn_provider_get_string(provider, "WireGuard.Address");
+       if (option)
+               g_key_file_set_string(keyfile,
+                               vpn_provider_get_save_group(provider),
+                               "WireGuard.Address",
+                               option);
+
+       return 0;
+}
+#endif
+
 static struct vpn_driver vpn_driver = {
        .flags          = VPN_FLAG_NO_TUN | VPN_FLAG_NO_DAEMON,
        .connect        = wg_connect,
        .disconnect     = wg_disconnect,
+#if defined TIZEN_EXT
+       .save           = wg_save,
+#endif
 };
 
 static int wg_init(void)