Commit 8e5b6754 authored by Honfika's avatar Honfika

Compression as stream

parent ad0d2565
......@@ -8,9 +8,9 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
internal class DefaultCompression : ICompression
{
public async Task<byte[]> Compress(byte[] body)
public Stream GetStream(Stream stream)
{
return body;
return stream;
}
}
}
......@@ -9,17 +9,9 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
internal class DeflateCompression : ICompression
{
public async Task<byte[]> Compress(byte[] body)
public Stream GetStream(Stream stream)
{
using (var ms = new MemoryStream())
{
using (var zip = new DeflateStream(ms, CompressionMode.Compress, true))
{
await zip.WriteAsync(body, 0, body.Length);
}
return ms.ToArray();
}
return new DeflateStream(stream, CompressionMode.Compress, true);
}
}
}
......@@ -9,17 +9,9 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
internal class GZipCompression : ICompression
{
public async Task<byte[]> Compress(byte[] body)
public Stream GetStream(Stream stream)
{
using (var ms = new MemoryStream())
{
using (var zip = new GZipStream(ms, CompressionMode.Compress, true))
{
await zip.WriteAsync(body, 0, body.Length);
}
return ms.ToArray();
}
return new GZipStream(stream, CompressionMode.Compress, true);
}
}
}
using System.Threading.Tasks;
using System.IO;
using System.Threading.Tasks;
namespace Titanium.Web.Proxy.Compression
{
......@@ -7,6 +8,6 @@ namespace Titanium.Web.Proxy.Compression
/// </summary>
interface ICompression
{
Task<byte[]> Compress(byte[] body);
Stream GetStream(Stream stream);
}
}
......@@ -12,7 +12,7 @@ namespace Titanium.Web.Proxy.Decompression
{
public Stream GetStream(Stream stream)
{
return new DeflateStream(stream, CompressionMode.Decompress);
return new DeflateStream(stream, CompressionMode.Decompress, true);
}
}
}
......@@ -12,7 +12,7 @@ namespace Titanium.Web.Proxy.Decompression
{
public Stream GetStream(Stream stream)
{
return new GZipStream(stream, CompressionMode.Decompress);
return new GZipStream(stream, CompressionMode.Decompress, true);
}
}
}
......@@ -530,13 +530,13 @@ namespace Titanium.Web.Proxy
//If request was modified by user
if (request.IsBodyRead)
{
var body = request.Body;
if (request.ContentEncoding != null)
{
request.Body = await GetCompressedResponseBody(request.ContentEncoding, request.Body);
body = GetCompressedResponseBody(request.ContentEncoding, body);
}
var body = request.Body;
//chunked send is not supported as of now
request.ContentLength = body.Length;
......
using System;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Threading.Tasks;
using Titanium.Web.Proxy.Compression;
......@@ -83,7 +85,7 @@ namespace Titanium.Web.Proxy
var body = response.Body;
if (contentEncoding != null)
{
body = await GetCompressedResponseBody(contentEncoding, body);
body = GetCompressedResponseBody(contentEncoding, body);
if (isChunked == false)
{
......@@ -119,12 +121,20 @@ namespace Titanium.Web.Proxy
/// get the compressed response body from give response bytes
/// </summary>
/// <param name="encodingType"></param>
/// <param name="responseBodyStream"></param>
/// <param name="responseBody"></param>
/// <returns></returns>
private async Task<byte[]> GetCompressedResponseBody(string encodingType, byte[] responseBodyStream)
private byte[] GetCompressedResponseBody(string encodingType, byte[] responseBody)
{
var compressor = CompressionFactory.GetCompression(encodingType);
return await compressor.Compress(responseBodyStream);
using (var ms = new MemoryStream())
{
using (var zip = compressor.GetStream(ms))
{
zip.Write(responseBody, 0, responseBody.Length);
}
return ms.ToArray();
}
}
......
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