123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- using System.IO;
- using Org.BouncyCastle.Utilities.Zlib;
- namespace Org.BouncyCastle.Crypto.Tls
- {
- public class TlsDeflateCompression : TlsCompression
- {
- public const int LEVEL_NONE = JZlib.Z_NO_COMPRESSION;
- public const int LEVEL_FASTEST = JZlib.Z_BEST_SPEED;
- public const int LEVEL_SMALLEST = JZlib.Z_BEST_COMPRESSION;
- public const int LEVEL_DEFAULT = JZlib.Z_DEFAULT_COMPRESSION;
- protected readonly ZStream zIn, zOut;
- public TlsDeflateCompression()
- : this(LEVEL_DEFAULT)
- {
- }
- public TlsDeflateCompression(int level)
- {
- this.zIn = new ZStream();
- this.zIn.inflateInit();
- this.zOut = new ZStream();
- this.zOut.deflateInit(level);
- }
- public virtual Stream Compress(Stream output)
- {
- return new DeflateOutputStream(output, zOut, true);
- }
- public virtual Stream Decompress(Stream output)
- {
- return new DeflateOutputStream(output, zIn, false);
- }
- protected class DeflateOutputStream : ZOutputStream
- {
- public DeflateOutputStream(Stream output, ZStream z, bool compress)
- : base(output, z)
- {
- this.compress = compress;
- /*
- * See discussion at http://www.bolet.org/~pornin/deflate-flush.html .
- */
- this.FlushMode = JZlib.Z_SYNC_FLUSH;
- }
- public override void Flush()
- {
- /*
- * TODO The inflateSyncPoint doesn't appear to work the way I hoped at the moment.
- * In any case, we may like to accept PARTIAL_FLUSH input, not just SYNC_FLUSH.
- * It's not clear how to check this in the Inflater.
- */
- //if (!this.compress && (z == null || z.istate == null || z.istate.inflateSyncPoint(z) <= 0))
- //{
- // throw new TlsFatalAlert(AlertDescription.decompression_failure);
- //}
- }
- }
- }
- }
- #endif
|