up
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user