This commit is contained in:
noisyfox
2016-12-16 12:17:20 +11:00
parent eef990f529
commit dc48546fed
@@ -64,7 +64,7 @@ namespace Shadowsocks.Controller.Service
Close();
}
private static readonly Regex HttpRequestHeaderRegex = new Regex(@"^(?<method>[A-Z]+?) (?<path>[^\s]+) (?<tail>HTTP/1\.\d)$", RegexOptions.Compiled);
private static readonly Regex HttpRequestHeaderRegex = new Regex(@"^([A-Z]+?) ([^\s]+) HTTP/1\.\d$");
private int _requestLineCount = 0;
private bool _isConnect = false;
@@ -101,57 +101,31 @@ namespace Shadowsocks.Controller.Service
Logging.Debug(line);
if (!line.StartsWith("Proxy-"))
{
_headers.Enqueue(line);
}
if (_requestLineCount == 0)
{
var m = HttpRequestHeaderRegex.Match(line);
if (m.Success)
{
var method = m.Groups["method"].Value;
var path = m.Groups["path"].Value;
var method = m.Groups[1].Value;
if (method == "CONNECT")
{
_isConnect = true;
if (!ParseHost(path))
if (!ParseHost(m.Groups[2].Value))
{
throw new Exception("Bad http header: " + line);
}
}
else
{
var targetUrl = new Uri(path);
if (!ParseHost(targetUrl.Authority))
{
throw new Exception("Bad http header: " + line);
}
var newRequestLine = $"{method} {targetUrl.PathAndQuery} {m.Groups["tail"].Value}";
_headers.Enqueue(newRequestLine);
}
}
else
{
throw new FormatException("Not a vaild request line");
}
}
else
{
// Handle Proxy-x Headers
if (!line.StartsWith("Proxy-"))
{
_headers.Enqueue(line);
}
else
{
if (line.StartsWith("Proxy-Connection: "))
{
_headers.Enqueue(line.Substring(6));
}
}
if (line.IsNullOrEmpty())
{
return true;