From af09eb0218ebef61efb8a5ea101f4cde8973f181 Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Tue, 25 Sep 2018 15:36:54 -0400 Subject: [PATCH 1/3] Adds brotli compression support to the proxy. --- src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs | 2 ++ src/Titanium.Web.Proxy/Http/KnownHeaders.cs | 1 + src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj | 1 + src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec | 1 + 4 files changed, 5 insertions(+) diff --git a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs index f8a0fc1dd..455918932 100644 --- a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs @@ -18,6 +18,8 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) return new GZipStream(stream, CompressionMode.Decompress, leaveOpen); case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen); + case KnownHeaders.ContentEncodingBrotli: + return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Decompress, leaveOpen); default: throw new Exception($"Unsupported decompression mode: {type}"); } diff --git a/src/Titanium.Web.Proxy/Http/KnownHeaders.cs b/src/Titanium.Web.Proxy/Http/KnownHeaders.cs index d6e664242..9636a1fdd 100644 --- a/src/Titanium.Web.Proxy/Http/KnownHeaders.cs +++ b/src/Titanium.Web.Proxy/Http/KnownHeaders.cs @@ -39,6 +39,7 @@ public static class KnownHeaders public const string ContentEncoding = "content-encoding"; public const string ContentEncodingDeflate = "deflate"; public const string ContentEncodingGzip = "gzip"; + public const string ContentEncodingBrotli = "br"; public const string Location = "Location"; diff --git a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj index e4ac9802b..6f4ed48d0 100644 --- a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj +++ b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec index 0eccf8634..7a0c21d76 100644 --- a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec +++ b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec @@ -16,6 +16,7 @@ + From 51e29b6cd6f53568a292df55d11e99ccfb73f4f6 Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Tue, 25 Sep 2018 16:08:35 -0400 Subject: [PATCH 2/3] Forgot to add compression support for Brotli in last commit. --- src/Titanium.Web.Proxy/Compression/CompressionFactory.cs | 8 ++++++++ .../Compression/DecompressionFactory.cs | 6 ++++++ src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs index fdae2ce3d..fd07687bf 100644 --- a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.IO.Compression; +using Titanium.Web.Proxy.Helpers; using Titanium.Web.Proxy.Http; namespace Titanium.Web.Proxy.Compression @@ -18,6 +19,13 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) return new GZipStream(stream, CompressionMode.Compress, leaveOpen); case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Compress, leaveOpen); + case KnownHeaders.ContentEncodingBrotli: + if (!RunTime.IsWindows) + { + throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); + } + + return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Compress, leaveOpen); default: throw new Exception($"Unsupported compression mode: {type}"); } diff --git a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs index 455918932..07991ec82 100644 --- a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.IO.Compression; +using Titanium.Web.Proxy.Helpers; using Titanium.Web.Proxy.Http; namespace Titanium.Web.Proxy.Compression @@ -19,6 +20,11 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen); case KnownHeaders.ContentEncodingBrotli: + if(!RunTime.IsWindows) + { + throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); + } + return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Decompress, leaveOpen); default: throw new Exception($"Unsupported decompression mode: {type}"); diff --git a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj index 6f4ed48d0..996f3deca 100644 --- a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj +++ b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj @@ -13,7 +13,7 @@ - + From 158534b4e2edc76753be755874c6c127061bf04b Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Thu, 4 Oct 2018 13:16:55 -0400 Subject: [PATCH 3/3] Removed unneeded RunTime.IsWindows check. --- src/Titanium.Web.Proxy/Compression/CompressionFactory.cs | 5 ----- src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs | 5 ----- 2 files changed, 10 deletions(-) diff --git a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs index fd07687bf..fcfc86aaa 100644 --- a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs @@ -20,11 +20,6 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Compress, leaveOpen); case KnownHeaders.ContentEncodingBrotli: - if (!RunTime.IsWindows) - { - throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); - } - return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Compress, leaveOpen); default: throw new Exception($"Unsupported compression mode: {type}"); diff --git a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs index 07991ec82..713c678fb 100644 --- a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs @@ -20,11 +20,6 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen); case KnownHeaders.ContentEncodingBrotli: - if(!RunTime.IsWindows) - { - throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); - } - return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Decompress, leaveOpen); default: throw new Exception($"Unsupported decompression mode: {type}");