diff --git a/@libs/dnscrypt-proxy.toml b/@libs/dnscrypt-proxy.toml index 762d53a..2a24387 100644 --- a/@libs/dnscrypt-proxy.toml +++ b/@libs/dnscrypt-proxy.toml @@ -36,8 +36,6 @@ ## Example with both IPv4 and IPv6: ## listen_addresses = ['127.0.0.1:53', '[::1]:53'] -listen_addresses = ['127.0.0.1:5533'] - ## Maximum number of simultaneous client connections to accept diff --git a/FastGithub.DomainResolve/FastGithub.DomainResolve.csproj b/FastGithub.DomainResolve/FastGithub.DomainResolve.csproj index 1e02d91..3ee4dba 100644 --- a/FastGithub.DomainResolve/FastGithub.DomainResolve.csproj +++ b/FastGithub.DomainResolve/FastGithub.DomainResolve.csproj @@ -4,6 +4,7 @@ + @@ -11,9 +12,9 @@ PreserveNewest - - PreserveNewest - + + PreserveNewest + diff --git a/FastGithub.DomainResolve/TomlUtil.cs b/FastGithub.DomainResolve/TomlUtil.cs index 7a4efbf..dfd8bc4 100644 --- a/FastGithub.DomainResolve/TomlUtil.cs +++ b/FastGithub.DomainResolve/TomlUtil.cs @@ -7,6 +7,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using Tommy; namespace FastGithub.DomainResolve { @@ -21,9 +22,13 @@ namespace FastGithub.DomainResolve /// /// /// - public static Task SetListensAsync(string tomlPath, IPEndPoint endpoint, CancellationToken cancellationToken = default) + public static Task SetListensAsync(string tomlPath, IPEndPoint endpoint, CancellationToken cancellationToken = default) { - return SetAsync(tomlPath, "listen_addresses", $"['{endpoint}']", cancellationToken); + var value = new TomlArray + { + endpoint.ToString() + }; + return SetAsync(tomlPath, "listen_addresses", value, cancellationToken); } /// @@ -37,7 +42,12 @@ namespace FastGithub.DomainResolve try { var address = await GetPublicIPAddressAsync(cancellationToken); - return await SetAsync(tomlPath, "edns_client_subnet", @$"[""{address}/32""]", cancellationToken); + var value = new TomlArray + { + $"{address}/32" + }; + await SetAsync(tomlPath, "edns_client_subnet", value, cancellationToken); + return true; } catch (Exception) { @@ -66,28 +76,19 @@ namespace FastGithub.DomainResolve /// /// /// - public static async Task SetAsync(string tomlPath, string key, object? value, CancellationToken cancellationToken = default) + public static async Task SetAsync(string tomlPath, string key, TomlNode value, CancellationToken cancellationToken = default) { - var setted = false; + var toml = await File.ReadAllTextAsync(tomlPath, cancellationToken); + var reader = new StringReader(toml); + var tomlTable = TOML.Parse(reader); + tomlTable[key] = value; + var builder = new StringBuilder(); - var lines = await File.ReadAllLinesAsync(tomlPath, cancellationToken); + var writer = new StringWriter(builder); + tomlTable.WriteTo(writer); + toml = builder.ToString(); - foreach (var line in lines) - { - if (Regex.IsMatch(line, @$"(?<=#*\s*){key}(?=\s*=)") == false) - { - builder.AppendLine(line); - } - else if (setted == false) - { - setted = true; - builder.Append(key).Append(" = ").AppendLine(value?.ToString()); - } - } - - var toml = builder.ToString(); await File.WriteAllTextAsync(tomlPath, toml, cancellationToken); - return setted; } } }