Commit 8e5b6754 authored by Honfika's avatar Honfika

Compression as stream

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