Commit ec6a8de6 authored by Honfika's avatar Honfika

Headerbulder improvement

parent 6b2348db
...@@ -87,12 +87,13 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -87,12 +87,13 @@ namespace Titanium.Web.Proxy.Helpers
/// <summary> /// <summary>
/// Write the headers to client /// Write the headers to client
/// </summary> /// </summary>
/// <param name="header"></param> /// <param name="headerBuilder"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
internal async Task WriteHeadersAsync(HeaderBuilder header, CancellationToken cancellationToken = default) internal async Task WriteHeadersAsync(HeaderBuilder headerBuilder, CancellationToken cancellationToken = default)
{ {
await WriteAsync(header.GetBytes(), true, cancellationToken); var buffer = headerBuilder.GetBuffer();
await WriteAsync(buffer.Array, buffer.Offset, buffer.Count, true, cancellationToken);
} }
/// <summary> /// <summary>
...@@ -279,7 +280,7 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -279,7 +280,7 @@ namespace Titanium.Web.Proxy.Helpers
{ {
var body = requestResponse.CompressBodyAndUpdateContentLength(); var body = requestResponse.CompressBodyAndUpdateContentLength();
headerBuilder.WriteHeaders(requestResponse.Headers); headerBuilder.WriteHeaders(requestResponse.Headers);
await WriteAsync(headerBuilder.GetBytes(), true, cancellationToken); await WriteHeadersAsync(headerBuilder, cancellationToken);
if (body != null) if (body != null)
{ {
......
...@@ -10,7 +10,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -10,7 +10,7 @@ namespace Titanium.Web.Proxy.Http
{ {
internal class HeaderBuilder internal class HeaderBuilder
{ {
private MemoryStream stream = new MemoryStream(); private readonly MemoryStream stream = new MemoryStream();
public void WriteRequestLine(string httpMethod, string httpUrl, Version version) public void WriteRequestLine(string httpMethod, string httpUrl, Version version)
{ {
...@@ -83,9 +83,16 @@ namespace Titanium.Web.Proxy.Http ...@@ -83,9 +83,16 @@ namespace Titanium.Web.Proxy.Http
#endif #endif
} }
public byte[] GetBytes() public ArraySegment<byte> GetBuffer()
{ {
return stream.ToArray(); stream.TryGetBuffer(out var buffer);
return buffer;
}
public string GetString(Encoding encoding)
{
stream.TryGetBuffer(out var buffer);
return encoding.GetString(buffer.Array, buffer.Offset, buffer.Count);
} }
} }
} }
...@@ -147,9 +147,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -147,9 +147,7 @@ namespace Titanium.Web.Proxy.Http
headerBuilder.WriteLine(); headerBuilder.WriteLine();
var data = headerBuilder.GetBytes(); await writer.WriteHeadersAsync(headerBuilder, cancellationToken);
await writer.WriteAsync(data, 0, data.Length, cancellationToken);
if (enable100ContinueBehaviour && Request.ExpectContinue) if (enable100ContinueBehaviour && Request.ExpectContinue)
{ {
......
...@@ -157,7 +157,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -157,7 +157,7 @@ namespace Titanium.Web.Proxy.Http
var headerBuilder = new HeaderBuilder(); var headerBuilder = new HeaderBuilder();
headerBuilder.WriteRequestLine(Method, RequestUriString, HttpVersion); headerBuilder.WriteRequestLine(Method, RequestUriString, HttpVersion);
headerBuilder.WriteHeaders(Headers); headerBuilder.WriteHeaders(Headers);
return HttpHelper.HeaderEncoding.GetString(headerBuilder.GetBytes()); return headerBuilder.GetString(HttpHelper.HeaderEncoding);
} }
} }
......
...@@ -102,7 +102,7 @@ namespace Titanium.Web.Proxy.Http ...@@ -102,7 +102,7 @@ namespace Titanium.Web.Proxy.Http
var headerBuilder = new HeaderBuilder(); var headerBuilder = new HeaderBuilder();
headerBuilder.WriteResponseLine(HttpVersion, StatusCode, StatusDescription); headerBuilder.WriteResponseLine(HttpVersion, StatusCode, StatusDescription);
headerBuilder.WriteHeaders(Headers); headerBuilder.WriteHeaders(Headers);
return HttpHelper.HeaderEncoding.GetString(headerBuilder.GetBytes()); return headerBuilder.GetString(HttpHelper.HeaderEncoding);
} }
} }
......
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