From 5a78ee9212dd4b184283b3c03e0d2542b8c488f3 Mon Sep 17 00:00:00 2001 From: celeron533 Date: Fri, 23 Mar 2018 22:39:06 +0800 Subject: [PATCH] Add square bracket for SIP002 IPv6 (RFC3986) --- .../Controller/ShadowsocksController.cs | 2 +- shadowsocks-csharp/Model/Server.cs | 28 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index 665f01e1..55e6b1ce 100644 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -353,7 +353,7 @@ namespace Shadowsocks.Controller url = string.Format( "{0}@{1}:{2}/?plugin={3}", websafeBase64, - server.server, + server.FormatHostName(server.server), server.server_port, HttpUtility.UrlEncode(pluginPart, Encoding.UTF8)); } diff --git a/shadowsocks-csharp/Model/Server.cs b/shadowsocks-csharp/Model/Server.cs index 1366f0a1..6706ac31 100755 --- a/shadowsocks-csharp/Model/Server.cs +++ b/shadowsocks-csharp/Model/Server.cs @@ -46,25 +46,25 @@ namespace Shadowsocks.Model { return I18N.GetString("New server"); } - string serverStr; - // CheckHostName() won't do a real DNS lookup - var hostType = Uri.CheckHostName(server); - switch (hostType) - { - case UriHostNameType.IPv6: - serverStr = $"[{server}]:{server_port}"; - break; - default: - // IPv4 and domain name - serverStr = $"{server}:{server_port}"; - break; - } + string serverStr = $"{FormatHostName(server)}:{server_port}"; return remarks.IsNullOrEmpty() ? serverStr : $"{remarks} ({serverStr})"; } + public string FormatHostName(string hostName) + { + // CheckHostName() won't do a real DNS lookup + switch (Uri.CheckHostName(hostName)) + { + case UriHostNameType.IPv6: // Add square bracket when IPv6 (RFC3986) + return $"[{hostName}]"; + default: // IPv4 or domain name + return hostName; + } + } + public Server() { server = ""; @@ -141,7 +141,7 @@ namespace Shadowsocks.Model Server server = new Server { remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), - server = parsedUrl.GetComponents(UriComponents.Host, UriFormat.Unescaped), + server = parsedUrl.IdnHost, server_port = parsedUrl.Port, };