Unverified Commit afff5229 authored by honfika's avatar honfika Committed by GitHub

Merge pull request #731 from justcoding121/master

beta
parents fce77d70 fcb8301f
...@@ -128,7 +128,7 @@ ...@@ -128,7 +128,7 @@
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_ConnectRequest.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.ConnectRequest%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_ConnectRequest.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.ConnectRequest%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L66">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L67">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_ConnectRequest_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ConnectRequest*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_ConnectRequest_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ConnectRequest*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_ConnectRequest" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ConnectRequest">ConnectRequest</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_ConnectRequest" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ConnectRequest">ConnectRequest</h4>
...@@ -159,7 +159,7 @@ ...@@ -159,7 +159,7 @@
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_IsHttps.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.IsHttps%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_IsHttps.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.IsHttps%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L87">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L88">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_IsHttps_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.IsHttps*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_IsHttps_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.IsHttps*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_IsHttps" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.IsHttps">IsHttps</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_IsHttps" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.IsHttps">IsHttps</h4>
...@@ -190,7 +190,7 @@ ...@@ -190,7 +190,7 @@
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_ProcessId.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.ProcessId%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_ProcessId.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.ProcessId%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L82">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L83">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_ProcessId_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ProcessId*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_ProcessId_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ProcessId*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_ProcessId" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ProcessId">ProcessId</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_ProcessId" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.ProcessId">ProcessId</h4>
...@@ -222,7 +222,7 @@ If client is remote then this will return</p> ...@@ -222,7 +222,7 @@ If client is remote then this will return</p>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_Request.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.Request%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_Request.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.Request%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L71">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L72">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_Request_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Request*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_Request_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Request*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_Request" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Request">Request</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_Request" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Request">Request</h4>
...@@ -253,7 +253,7 @@ If client is remote then this will return</p> ...@@ -253,7 +253,7 @@ If client is remote then this will return</p>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_Response.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.Response%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_Response.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.Response%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L76">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L77">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_Response_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Response*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_Response_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Response*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_Response" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Response">Response</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_Response" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.Response">Response</h4>
...@@ -284,7 +284,7 @@ If client is remote then this will return</p> ...@@ -284,7 +284,7 @@ If client is remote then this will return</p>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_UpStreamEndPoint.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.UpStreamEndPoint%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_UpStreamEndPoint.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.UpStreamEndPoint%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L61">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L62">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_UpStreamEndPoint_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UpStreamEndPoint*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_UpStreamEndPoint_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UpStreamEndPoint*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_UpStreamEndPoint" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UpStreamEndPoint">UpStreamEndPoint</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_UpStreamEndPoint" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UpStreamEndPoint">UpStreamEndPoint</h4>
...@@ -315,7 +315,7 @@ If client is remote then this will return</p> ...@@ -315,7 +315,7 @@ If client is remote then this will return</p>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_UserData.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.UserData%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient_UserData.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient.UserData%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span> </span>
<span class="small pull-right mobile-hide"> <span class="small pull-right mobile-hide">
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L56">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L57">View Source</a>
</span> </span>
<a id="Titanium_Web_Proxy_Http_HttpWebClient_UserData_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UserData*"></a> <a id="Titanium_Web_Proxy_Http_HttpWebClient_UserData_" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UserData*"></a>
<h4 id="Titanium_Web_Proxy_Http_HttpWebClient_UserData" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UserData">UserData</h4> <h4 id="Titanium_Web_Proxy_Http_HttpWebClient_UserData" data-uid="Titanium.Web.Proxy.Http.HttpWebClient.UserData">UserData</h4>
...@@ -352,7 +352,7 @@ If client is remote then this will return</p> ...@@ -352,7 +352,7 @@ If client is remote then this will return</p>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A" class="contribution-link">Improve this Doc</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/new/master/apiSpec/new?filename=Titanium_Web_Proxy_Http_HttpWebClient.md&amp;value=---%0Auid%3A%20Titanium.Web.Proxy.Http.HttpWebClient%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A" class="contribution-link">Improve this Doc</a>
</li> </li>
<li> <li>
<a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L13" class="contribution-link">View Source</a> <a href="https://github.com/justcoding121/Titanium-Web-Proxy/blob/master/src/Titanium.Web.Proxy/Http/HttpWebClient.cs/#L14" class="contribution-link">View Source</a>
</li> </li>
</ul> </ul>
</div> </div>
......
...@@ -103,7 +103,7 @@ namespace Titanium.Web.Proxy ...@@ -103,7 +103,7 @@ namespace Titanium.Web.Proxy
} }
// write back successful CONNECT response // write back successful CONNECT response
var response = ConnectResponse.CreateSuccessfulConnectResponse(requestLine.Version); var response = ConnectResponse.CreateSuccessfulConnectResponse(connectRequest.HttpVersion);
// Set ContentLength explicitly to properly handle HTTP 1.0 // Set ContentLength explicitly to properly handle HTTP 1.0
response.ContentLength = 0; response.ContentLength = 0;
......
using System; using System;
using Titanium.Web.Proxy.Models;
namespace Titanium.Web.Proxy.Extensions namespace Titanium.Web.Proxy.Extensions
{ {
internal static class UriExtensions internal static class UriExtensions
{ {
internal static string GetOriginalPathAndQuery(this Uri uri) public static string GetOriginalPathAndQuery(this Uri uri)
{ {
string leftPart = uri.GetLeftPart(UriPartial.Authority); string leftPart = uri.GetLeftPart(UriPartial.Authority);
if (uri.OriginalString.StartsWith(leftPart)) if (uri.OriginalString.StartsWith(leftPart))
...@@ -12,5 +13,47 @@ namespace Titanium.Web.Proxy.Extensions ...@@ -12,5 +13,47 @@ namespace Titanium.Web.Proxy.Extensions
return uri.IsWellFormedOriginalString() ? uri.PathAndQuery : uri.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped); return uri.IsWellFormedOriginalString() ? uri.PathAndQuery : uri.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
} }
public static ByteString GetScheme(ByteString str)
{
if (str.Length < 3)
{
return ByteString.Empty;
}
// regex: "^[a-z]*://"
int i;
for (i = 0; i < str.Length - 3; i++)
{
byte ch = str[i];
if (ch == ':')
{
break;
}
if (ch < 'A' || ch > 'z' || (ch > 'Z' && ch < 'a')) // ASCII letter
{
return ByteString.Empty;
}
}
if (str[i++] != ':')
{
return ByteString.Empty;
}
if (str[i++] != '/')
{
return ByteString.Empty;
}
if (str[i] != '/')
{
return ByteString.Empty;
}
return new ByteString(str.Data.Slice(0, i - 2));
}
} }
} }
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using System.Net; using System.Net;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Titanium.Web.Proxy.Extensions;
using Titanium.Web.Proxy.Models; using Titanium.Web.Proxy.Models;
using Titanium.Web.Proxy.Network.Tcp; using Titanium.Web.Proxy.Network.Tcp;
...@@ -113,11 +114,22 @@ namespace Titanium.Web.Proxy.Http ...@@ -113,11 +114,22 @@ namespace Titanium.Web.Proxy.Http
string? upstreamProxyPassword = null; string? upstreamProxyPassword = null;
string url; string url;
if (!useUpstreamProxy || isTransparent) if (isTransparent)
{
url = Request.RequestUriString;
}
else if (!useUpstreamProxy)
{
if (UriExtensions.GetScheme(Request.RequestUriString8).Length == 0)
{ {
url = Request.RequestUriString; url = Request.RequestUriString;
} }
else else
{
url = Request.RequestUri.GetOriginalPathAndQuery();
}
}
else
{ {
url = Request.RequestUri.ToString(); url = Request.RequestUri.ToString();
...@@ -129,6 +141,11 @@ namespace Titanium.Web.Proxy.Http ...@@ -129,6 +141,11 @@ namespace Titanium.Web.Proxy.Http
} }
} }
if (url == string.Empty)
{
url = "/";
}
// prepare the request & headers // prepare the request & headers
var headerBuilder = new HeaderBuilder(); var headerBuilder = new HeaderBuilder();
headerBuilder.WriteRequestLine(Request.Method, url, Request.HttpVersion); headerBuilder.WriteRequestLine(Request.Method, url, Request.HttpVersion);
......
...@@ -30,7 +30,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -30,7 +30,7 @@ namespace Titanium.Web.Proxy.Http
set set
{ {
requestUriString8 = value; requestUriString8 = value;
var scheme = getUriScheme(value); var scheme = UriExtensions.GetScheme(value);
if (scheme.Length > 0) if (scheme.Length > 0)
{ {
IsHttps = scheme.Equals(ProxyServer.UriSchemeHttps8); IsHttps = scheme.Equals(ProxyServer.UriSchemeHttps8);
...@@ -71,7 +71,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -71,7 +71,7 @@ namespace Titanium.Web.Proxy.Http
get get
{ {
string url = RequestUriString8.GetString(); string url = RequestUriString8.GetString();
if (getUriScheme(RequestUriString8).Length == 0) if (UriExtensions.GetScheme(RequestUriString8).Length == 0)
{ {
string? hostAndPath = Host ?? Authority.GetString(); string? hostAndPath = Host ?? Authority.GetString();
...@@ -105,7 +105,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -105,7 +105,7 @@ namespace Titanium.Web.Proxy.Http
{ {
RequestUriString8 = (ByteString)value; RequestUriString8 = (ByteString)value;
var scheme = getUriScheme(RequestUriString8); var scheme = UriExtensions.GetScheme(RequestUriString8);
if (scheme.Length > 0 && Host != null) if (scheme.Length > 0 && Host != null)
{ {
var uri = new Uri(value); var uri = new Uri(value);
...@@ -307,47 +307,5 @@ namespace Titanium.Web.Proxy.Http ...@@ -307,47 +307,5 @@ namespace Titanium.Web.Proxy.Http
return true; return true;
} }
private ByteString getUriScheme(ByteString str)
{
if (str.Length < 3)
{
return ByteString.Empty;
}
// regex: "^[a-z]*://"
int i;
for (i = 0; i < str.Length - 3; i++)
{
byte ch = str[i];
if (ch == ':')
{
break;
}
if (ch < 'A' || ch > 'z' || (ch > 'Z' && ch < 'a')) // ASCII letter
{
return ByteString.Empty;
}
}
if (str[i++] != ':')
{
return ByteString.Empty;
}
if (str[i++] != '/')
{
return ByteString.Empty;
}
if (str[i] != '/')
{
return ByteString.Empty;
}
return new ByteString(str.Data.Slice(0, i - 2));
}
} }
} }
...@@ -30,14 +30,14 @@ namespace Titanium.Web.Proxy.Network ...@@ -30,14 +30,14 @@ namespace Titanium.Web.Proxy.Network
/// <inheritdoc /> /// <inheritdoc />
public X509Certificate2? LoadCertificate(string subjectName, X509KeyStorageFlags storageFlags) public X509Certificate2? LoadCertificate(string subjectName, X509KeyStorageFlags storageFlags)
{ {
string path = Path.Combine(getCertificatePath(), subjectName + defaultCertificateFileExtension); string filePath = Path.Combine(getCertificatePath(false), subjectName + defaultCertificateFileExtension);
return loadCertificate(path, string.Empty, storageFlags); return loadCertificate(filePath, string.Empty, storageFlags);
} }
/// <inheritdoc /> /// <inheritdoc />
public void SaveCertificate(string subjectName, X509Certificate2 certificate) public void SaveCertificate(string subjectName, X509Certificate2 certificate)
{ {
string filePath = Path.Combine(getCertificatePath(), subjectName + defaultCertificateFileExtension); string filePath = Path.Combine(getCertificatePath(true), subjectName + defaultCertificateFileExtension);
byte[] exported = certificate.Export(X509ContentType.Pkcs12); byte[] exported = certificate.Export(X509ContentType.Pkcs12);
File.WriteAllBytes(filePath, exported); File.WriteAllBytes(filePath, exported);
} }
...@@ -46,9 +46,13 @@ namespace Titanium.Web.Proxy.Network ...@@ -46,9 +46,13 @@ namespace Titanium.Web.Proxy.Network
{ {
try try
{ {
Directory.Delete(getCertificatePath(), true); string path = getCertificatePath(false);
if (Directory.Exists(path))
{
Directory.Delete(path, true);
}
} }
catch (DirectoryNotFoundException) catch (Exception)
{ {
// do nothing // do nothing
} }
...@@ -89,14 +93,14 @@ namespace Titanium.Web.Proxy.Network ...@@ -89,14 +93,14 @@ namespace Titanium.Web.Proxy.Network
string.IsNullOrEmpty(pathOrName) ? defaultRootCertificateFileName : pathOrName); string.IsNullOrEmpty(pathOrName) ? defaultRootCertificateFileName : pathOrName);
} }
private string getCertificatePath() private string getCertificatePath(bool create)
{ {
if (certificatePath == null) if (certificatePath == null)
{ {
string path = getRootCertificateDirectory(); string path = getRootCertificateDirectory();
string certPath = Path.Combine(path, defaultCertificateDirectoryName); string certPath = Path.Combine(path, defaultCertificateDirectoryName);
if (!Directory.Exists(certPath)) if (create && !Directory.Exists(certPath))
{ {
Directory.CreateDirectory(certPath); Directory.CreateDirectory(certPath);
} }
......
...@@ -439,7 +439,7 @@ namespace Titanium.Web.Proxy ...@@ -439,7 +439,7 @@ namespace Titanium.Web.Proxy
if (systemProxySettingsManager == null) if (systemProxySettingsManager == null)
{ {
throw new NotSupportedException(@"Setting system proxy settings are only supported in Windows. throw new NotSupportedException(@"Setting system proxy settings are only supported in Windows.
Please manually confugure you operating system to use this proxy's port and address."); Please manually configure you operating system to use this proxy's port and address.");
} }
validateEndPointAsSystemProxy(endPoint); validateEndPointAsSystemProxy(endPoint);
......
...@@ -68,9 +68,10 @@ namespace Titanium.Web.Proxy ...@@ -68,9 +68,10 @@ namespace Titanium.Web.Proxy
UserData = connectArgs?.UserData UserData = connectArgs?.UserData
}; };
var request = args.HttpClient.Request;
if (isHttps) if (isHttps)
{ {
args.HttpClient.Request.IsHttps = true; request.IsHttps = true;
} }
try try
...@@ -81,7 +82,6 @@ namespace Titanium.Web.Proxy ...@@ -81,7 +82,6 @@ namespace Titanium.Web.Proxy
await HeaderParser.ReadHeaders(clientStream, args.HttpClient.Request.Headers, await HeaderParser.ReadHeaders(clientStream, args.HttpClient.Request.Headers,
cancellationToken); cancellationToken);
var request = args.HttpClient.Request;
if (connectRequest != null) if (connectRequest != null)
{ {
request.IsHttps = connectRequest.IsHttps; request.IsHttps = connectRequest.IsHttps;
...@@ -93,6 +93,12 @@ namespace Titanium.Web.Proxy ...@@ -93,6 +93,12 @@ namespace Titanium.Web.Proxy
request.Method = requestLine.Method; request.Method = requestLine.Method;
request.HttpVersion = requestLine.Version; request.HttpVersion = requestLine.Version;
// we need this to syphon out data from connection if API user changes them.
request.SetOriginalHeaders();
// If user requested interception do it
await onBeforeRequest(args);
if (!args.IsTransparent && !args.IsSocks) if (!args.IsTransparent && !args.IsSocks)
{ {
// proxy authorization check // proxy authorization check
...@@ -117,12 +123,6 @@ namespace Titanium.Web.Proxy ...@@ -117,12 +123,6 @@ namespace Titanium.Web.Proxy
await args.GetRequestBody(cancellationToken); await args.GetRequestBody(cancellationToken);
} }
// we need this to syphon out data from connection if API user changes them.
request.SetOriginalHeaders();
// If user requested interception do it
await onBeforeRequest(args);
var response = args.HttpClient.Response; var response = args.HttpClient.Response;
if (request.CancelRequest) if (request.CancelRequest)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment