Commit ec6a8de6 authored by Honfika's avatar Honfika

Headerbulder improvement

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