| @@ -378,25 +378,6 @@ namespace Shadowsocks.Controller.Service | |||||
| private int _targetPort; | private int _targetPort; | ||||
| private readonly Queue<string> _headers = new Queue<string>(); | private readonly Queue<string> _headers = new Queue<string>(); | ||||
| private bool ParseHost(string host) | |||||
| { | |||||
| var locs = host.Split(':'); | |||||
| _targetHost = locs[0]; | |||||
| if (locs.Length > 1) | |||||
| { | |||||
| if (!int.TryParse(locs[1], out _targetPort)) | |||||
| { | |||||
| return false; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| _targetPort = 80; | |||||
| } | |||||
| return true; | |||||
| } | |||||
| private bool OnLineRead(string line, object state) | private bool OnLineRead(string line, object state) | ||||
| { | { | ||||
| if (_closed) | if (_closed) | ||||
| @@ -422,9 +403,19 @@ namespace Shadowsocks.Controller.Service | |||||
| { | { | ||||
| _isConnect = true; | _isConnect = true; | ||||
| if (!ParseHost(m.Groups[2].Value)) | |||||
| var location = m.Groups[2].Value; | |||||
| var locs = location.Split(':'); | |||||
| _targetHost = locs[0]; | |||||
| if (locs.Length > 1) | |||||
| { | { | ||||
| throw new Exception("Bad http header: " + line); | |||||
| if (!int.TryParse(locs[1], out _targetPort)) | |||||
| { | |||||
| throw new Exception("Bad http header: " + line); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| _targetPort = 80; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -440,9 +431,19 @@ namespace Shadowsocks.Controller.Service | |||||
| { | { | ||||
| if (line.StartsWith("Host: ")) | if (line.StartsWith("Host: ")) | ||||
| { | { | ||||
| if (!ParseHost(line.Substring(6).Trim())) | |||||
| var location = line.Substring(6).Trim(); | |||||
| var locs = location.Split(':'); | |||||
| _targetHost = locs[0]; | |||||
| if (locs.Length > 1) | |||||
| { | |||||
| if (!int.TryParse(locs[1], out _targetPort)) | |||||
| { | |||||
| throw new Exception("Bad http header: " + line); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | { | ||||
| throw new Exception("Bad http header: " + line); | |||||
| _targetPort = 80; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||