Commit 5494a981 authored by justcoding121's avatar justcoding121

unify buffer size

parent ec38010b
...@@ -104,7 +104,7 @@ namespace Titanium.Web.Proxy.EventArguments ...@@ -104,7 +104,7 @@ namespace Titanium.Web.Proxy.EventArguments
this.httpResponseHandler = httpResponseHandler; this.httpResponseHandler = httpResponseHandler;
ProxyClient = new ProxyClient(); ProxyClient = new ProxyClient();
WebSession = new HttpWebClient(); WebSession = new HttpWebClient(bufferSize);
WebSession.ProcessId = new Lazy<int>(() => WebSession.ProcessId = new Lazy<int>(() =>
{ {
......
...@@ -3,7 +3,7 @@ using System.Security.Cryptography.X509Certificates; ...@@ -3,7 +3,7 @@ using System.Security.Cryptography.X509Certificates;
namespace Titanium.Web.Proxy.Extensions namespace Titanium.Web.Proxy.Extensions
{ {
internal static class DotNetStandardExtensions internal static class DotNet45Extensions
{ {
#if NET45 #if NET45
/// <summary> /// <summary>
......
...@@ -17,9 +17,9 @@ namespace Titanium.Web.Proxy.Extensions ...@@ -17,9 +17,9 @@ namespace Titanium.Web.Proxy.Extensions
/// <param name="input"></param> /// <param name="input"></param>
/// <param name="output"></param> /// <param name="output"></param>
/// <param name="onCopy"></param> /// <param name="onCopy"></param>
internal static async Task CopyToAsync(this Stream input, Stream output, Action<byte[], int, int> onCopy) internal static async Task CopyToAsync(this Stream input, Stream output, Action<byte[], int, int> onCopy, int bufferSize)
{ {
byte[] buffer = new byte[81920]; byte[] buffer = new byte[bufferSize];
while (true) while (true)
{ {
int num = await input.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); int num = await input.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
......
...@@ -4,7 +4,8 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -4,7 +4,8 @@ namespace Titanium.Web.Proxy.Helpers
{ {
sealed class HttpRequestWriter : HttpWriter sealed class HttpRequestWriter : HttpWriter
{ {
public HttpRequestWriter(Stream stream) : base(stream, true) public HttpRequestWriter(Stream stream, int bufferSize)
: base(stream, bufferSize, true)
{ {
} }
} }
......
...@@ -12,7 +12,8 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -12,7 +12,8 @@ namespace Titanium.Web.Proxy.Helpers
{ {
sealed class HttpResponseWriter : HttpWriter sealed class HttpResponseWriter : HttpWriter
{ {
public HttpResponseWriter(Stream stream) : base(stream, true) public HttpResponseWriter(Stream stream, int bufferSize)
: base(stream, bufferSize, true)
{ {
} }
......
...@@ -8,7 +8,8 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -8,7 +8,8 @@ namespace Titanium.Web.Proxy.Helpers
{ {
abstract class HttpWriter : StreamWriter abstract class HttpWriter : StreamWriter
{ {
protected HttpWriter(Stream stream, bool leaveOpen) : base(stream, Encoding.ASCII, 1024, leaveOpen) protected HttpWriter(Stream stream, int bufferSize, bool leaveOpen)
: base(stream, Encoding.ASCII, bufferSize, leaveOpen)
{ {
NewLine = ProxyConstants.NewLine; NewLine = ProxyConstants.NewLine;
} }
......
...@@ -116,12 +116,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -116,12 +116,13 @@ namespace Titanium.Web.Proxy.Helpers
/// <param name="onDataSend"></param> /// <param name="onDataSend"></param>
/// <param name="onDataReceive"></param> /// <param name="onDataReceive"></param>
/// <returns></returns> /// <returns></returns>
internal static async Task SendRaw(Stream clientStream, Stream serverStream, Action<byte[], int, int> onDataSend, Action<byte[], int, int> onDataReceive) internal static async Task SendRaw(Stream clientStream, Stream serverStream, int bufferSize,
Action<byte[], int, int> onDataSend, Action<byte[], int, int> onDataReceive)
{ {
//Now async relay all server=>client & client=>server data //Now async relay all server=>client & client=>server data
var sendRelay = clientStream.CopyToAsync(serverStream, onDataSend); var sendRelay = clientStream.CopyToAsync(serverStream, onDataSend, bufferSize);
var receiveRelay = serverStream.CopyToAsync(clientStream, onDataReceive); var receiveRelay = serverStream.CopyToAsync(clientStream, onDataReceive, bufferSize);
await Task.WhenAll(sendRelay, receiveRelay); await Task.WhenAll(sendRelay, receiveRelay);
} }
......
...@@ -13,6 +13,8 @@ namespace Titanium.Web.Proxy.Http ...@@ -13,6 +13,8 @@ namespace Titanium.Web.Proxy.Http
/// </summary> /// </summary>
public class HttpWebClient : IDisposable public class HttpWebClient : IDisposable
{ {
private int bufferSize;
/// <summary> /// <summary>
/// Connection to server /// Connection to server
/// </summary> /// </summary>
...@@ -49,8 +51,10 @@ namespace Titanium.Web.Proxy.Http ...@@ -49,8 +51,10 @@ namespace Titanium.Web.Proxy.Http
/// </summary> /// </summary>
public bool IsHttps => Request.IsHttps; public bool IsHttps => Request.IsHttps;
internal HttpWebClient() internal HttpWebClient(int bufferSize)
{ {
this.bufferSize = bufferSize;
RequestId = Guid.NewGuid(); RequestId = Guid.NewGuid();
Request = new Request(); Request = new Request();
Response = new Response(); Response = new Response();
...@@ -77,7 +81,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -77,7 +81,7 @@ namespace Titanium.Web.Proxy.Http
byte[] requestBytes; byte[] requestBytes;
using (var ms = new MemoryStream()) using (var ms = new MemoryStream())
using (var writer = new HttpRequestWriter(ms)) using (var writer = new HttpRequestWriter(ms, bufferSize))
{ {
var upstreamProxy = ServerConnection.UpStreamHttpProxy; var upstreamProxy = ServerConnection.UpStreamHttpProxy;
......
...@@ -72,7 +72,7 @@ namespace Titanium.Web.Proxy.Network.Tcp ...@@ -72,7 +72,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
if (useUpstreamProxy && (isConnect || isHttps)) if (useUpstreamProxy && (isConnect || isHttps))
{ {
using (var writer = new HttpRequestWriter(stream)) using (var writer = new HttpRequestWriter(stream, server.BufferSize))
{ {
await writer.WriteLineAsync($"CONNECT {remoteHostName}:{remotePort} HTTP/{httpVersion}"); await writer.WriteLineAsync($"CONNECT {remoteHostName}:{remotePort} HTTP/{httpVersion}");
await writer.WriteLineAsync($"Host: {remoteHostName}:{remotePort}"); await writer.WriteLineAsync($"Host: {remoteHostName}:{remotePort}");
......
...@@ -37,7 +37,7 @@ namespace Titanium.Web.Proxy ...@@ -37,7 +37,7 @@ namespace Titanium.Web.Proxy
var clientStream = new CustomBufferedStream(tcpClient.GetStream(), BufferSize); var clientStream = new CustomBufferedStream(tcpClient.GetStream(), BufferSize);
var clientStreamReader = new CustomBinaryReader(clientStream, BufferSize); var clientStreamReader = new CustomBinaryReader(clientStream, BufferSize);
var clientStreamWriter = new HttpResponseWriter(clientStream); var clientStreamWriter = new HttpResponseWriter(clientStream, BufferSize);
Uri httpRemoteUri; Uri httpRemoteUri;
...@@ -147,7 +147,7 @@ namespace Titanium.Web.Proxy ...@@ -147,7 +147,7 @@ namespace Titanium.Web.Proxy
clientStreamReader.Dispose(); clientStreamReader.Dispose();
clientStreamReader = new CustomBinaryReader(clientStream, BufferSize); clientStreamReader = new CustomBinaryReader(clientStream, BufferSize);
clientStreamWriter = new HttpResponseWriter(clientStream); clientStreamWriter = new HttpResponseWriter(clientStream, BufferSize);
} }
catch catch
{ {
...@@ -179,7 +179,7 @@ namespace Titanium.Web.Proxy ...@@ -179,7 +179,7 @@ namespace Titanium.Web.Proxy
((ConnectResponse)connectArgs.WebSession.Response).ServerHelloInfo = serverHelloInfo; ((ConnectResponse)connectArgs.WebSession.Response).ServerHelloInfo = serverHelloInfo;
} }
await TcpHelper.SendRaw(clientStream, connection.Stream, await TcpHelper.SendRaw(clientStream, connection.Stream, BufferSize,
(buffer, offset, count) => { connectArgs.OnDataSent(buffer, offset, count); }, (buffer, offset, count) => { connectArgs.OnDataReceived(buffer, offset, count); }); (buffer, offset, count) => { connectArgs.OnDataSent(buffer, offset, count); }, (buffer, offset, count) => { connectArgs.OnDataReceived(buffer, offset, count); });
UpdateServerConnectionCount(false); UpdateServerConnectionCount(false);
} }
...@@ -243,7 +243,7 @@ namespace Titanium.Web.Proxy ...@@ -243,7 +243,7 @@ namespace Titanium.Web.Proxy
} }
clientStreamReader = new CustomBinaryReader(clientStream, BufferSize); clientStreamReader = new CustomBinaryReader(clientStream, BufferSize);
clientStreamWriter = new HttpResponseWriter(clientStream); clientStreamWriter = new HttpResponseWriter(clientStream, BufferSize);
//now read the request line //now read the request line
string httpCmd = await clientStreamReader.ReadLineAsync(); string httpCmd = await clientStreamReader.ReadLineAsync();
...@@ -374,7 +374,7 @@ namespace Titanium.Web.Proxy ...@@ -374,7 +374,7 @@ namespace Titanium.Web.Proxy
var requestHeaders = args.WebSession.Request.RequestHeaders; var requestHeaders = args.WebSession.Request.RequestHeaders;
byte[] requestBytes; byte[] requestBytes;
using (var ms = new MemoryStream()) using (var ms = new MemoryStream())
using (var writer = new HttpRequestWriter(ms)) using (var writer = new HttpRequestWriter(ms, BufferSize))
{ {
writer.WriteLine(httpCmd); writer.WriteLine(httpCmd);
writer.WriteHeaders(requestHeaders); writer.WriteHeaders(requestHeaders);
...@@ -402,7 +402,7 @@ namespace Titanium.Web.Proxy ...@@ -402,7 +402,7 @@ namespace Titanium.Web.Proxy
await BeforeResponse.InvokeParallelAsync(this, args, ExceptionFunc); await BeforeResponse.InvokeParallelAsync(this, args, ExceptionFunc);
} }
await TcpHelper.SendRaw(clientStream, connection.Stream, await TcpHelper.SendRaw(clientStream, connection.Stream, BufferSize,
(buffer, offset, count) => { args.OnDataSent(buffer, offset, count); }, (buffer, offset, count) => { args.OnDataReceived(buffer, offset, count); }); (buffer, offset, count) => { args.OnDataSent(buffer, offset, count); }, (buffer, offset, count) => { args.OnDataReceived(buffer, offset, count); });
args.Dispose(); args.Dispose();
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
<Compile Include="Exceptions\ProxyException.cs" /> <Compile Include="Exceptions\ProxyException.cs" />
<Compile Include="Exceptions\ProxyHttpException.cs" /> <Compile Include="Exceptions\ProxyHttpException.cs" />
<Compile Include="Extensions\ByteArrayExtensions.cs" /> <Compile Include="Extensions\ByteArrayExtensions.cs" />
<Compile Include="Extensions\DotNetStandardExtensions.cs" /> <Compile Include="Extensions\DotNet45Extensions.cs" />
<Compile Include="Extensions\FuncExtensions.cs" /> <Compile Include="Extensions\FuncExtensions.cs" />
<Compile Include="Extensions\HttpWebRequestExtensions.cs" /> <Compile Include="Extensions\HttpWebRequestExtensions.cs" />
<Compile Include="Extensions\HttpWebResponseExtensions.cs" /> <Compile Include="Extensions\HttpWebResponseExtensions.cs" />
......
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