解决 QRcode 地址解析中密码可能带@符号、服务器名可能带冒号的问题
关掉 https://github.com/shadowsocks/shadowsocks-csharp/issues/131 我就是爱用中文,哼~
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
@@ -50,7 +50,8 @@ namespace Shadowsocks.Model
|
||||
string[] r1 = Regex.Split(ssURL, "ss://", RegexOptions.IgnoreCase);
|
||||
string base64 = r1[1].ToString();
|
||||
byte[] bytes = null;
|
||||
for (var i = 0; i < 3; i++) {
|
||||
for (var i = 0; i < 3; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
bytes = System.Convert.FromBase64String(base64);
|
||||
@@ -64,11 +65,25 @@ namespace Shadowsocks.Model
|
||||
{
|
||||
throw new FormatException();
|
||||
}
|
||||
string[] parts = Encoding.UTF8.GetString(bytes).Split(new char[2] { ':', '@' });
|
||||
this.method = parts[0].ToString();
|
||||
this.password = parts[1].ToString();
|
||||
this.server = parts[2].ToString();
|
||||
this.server_port = int.Parse(parts[3].ToString());
|
||||
try
|
||||
{
|
||||
string data = Encoding.UTF8.GetString(bytes);
|
||||
int indexLastAt = data.LastIndexOf('@');
|
||||
|
||||
string afterAt = data.Substring(indexLastAt + 1);
|
||||
int indexLastComma = afterAt.LastIndexOf(':');
|
||||
this.server_port = int.Parse(afterAt.Substring(indexLastComma + 1));
|
||||
this.server = afterAt.Substring(0, indexLastComma);
|
||||
|
||||
string beforeAt = data.Substring(0, indexLastAt);
|
||||
string[] parts = beforeAt.Split(new[] { ':' });
|
||||
this.method = parts[0];
|
||||
this.password = parts[1];
|
||||
}
|
||||
catch (IndexOutOfRangeException)
|
||||
{
|
||||
throw new FormatException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user