using System; using BestHTTP.Decompression.Zlib; using BestHTTP.Extensions; using BestHTTP.WebSocket.Frames; using Cpp2IlInjected; namespace BestHTTP.WebSocket.Extensions { // Token: 0x020018D1 RID: 6353 [Token(Token = "0x20018D1")] public sealed class PerMessageCompression : IExtension { // Token: 0x170017C6 RID: 6086 // (get) Token: 0x0600956E RID: 38254 RVA: 0x001EBF7C File Offset: 0x001EA17C // (set) Token: 0x0600956F RID: 38255 RVA: 0x001EBF90 File Offset: 0x001EA190 [Token(Token = "0x170017C6")] public bool ClientNoContextTakeover { [Token(Token = "0x600956E")] [Address(RVA = "0x42D5E0", Offset = "0x42C3E0", VA = "0x18042D5E0")] get; [Token(Token = "0x600956F")] [Address(RVA = "0x495D50", Offset = "0x494B50", VA = "0x180495D50")] private set; } // Token: 0x170017C7 RID: 6087 // (get) Token: 0x06009570 RID: 38256 RVA: 0x001EBFA4 File Offset: 0x001EA1A4 // (set) Token: 0x06009571 RID: 38257 RVA: 0x001EBFB8 File Offset: 0x001EA1B8 [Token(Token = "0x170017C7")] public bool ServerNoContextTakeover { [Token(Token = "0x6009570")] [Address(RVA = "0x49E540", Offset = "0x49D340", VA = "0x18049E540")] get; [Token(Token = "0x6009571")] [Address(RVA = "0x756A50", Offset = "0x755850", VA = "0x180756A50")] private set; } // Token: 0x170017C8 RID: 6088 // (get) Token: 0x06009572 RID: 38258 RVA: 0x001EBFCC File Offset: 0x001EA1CC // (set) Token: 0x06009573 RID: 38259 RVA: 0x001EBFE0 File Offset: 0x001EA1E0 [Token(Token = "0x170017C8")] public int ClientMaxWindowBits { [Token(Token = "0x6009572")] [Address(RVA = "0x495080", Offset = "0x493E80", VA = "0x180495080")] get; [Token(Token = "0x6009573")] [Address(RVA = "0x52EC20", Offset = "0x52DA20", VA = "0x18052EC20")] private set; } // Token: 0x170017C9 RID: 6089 // (get) Token: 0x06009574 RID: 38260 RVA: 0x001EBFF4 File Offset: 0x001EA1F4 // (set) Token: 0x06009575 RID: 38261 RVA: 0x001EC008 File Offset: 0x001EA208 [Token(Token = "0x170017C9")] public int ServerMaxWindowBits { [Token(Token = "0x6009574")] [Address(RVA = "0x40B720", Offset = "0x40A520", VA = "0x18040B720")] get; [Token(Token = "0x6009575")] [Address(RVA = "0x41F740", Offset = "0x41E540", VA = "0x18041F740")] private set; } // Token: 0x170017CA RID: 6090 // (get) Token: 0x06009576 RID: 38262 RVA: 0x001EC01C File Offset: 0x001EA21C // (set) Token: 0x06009577 RID: 38263 RVA: 0x001EC030 File Offset: 0x001EA230 [Token(Token = "0x170017CA")] public CompressionLevel Level { [Token(Token = "0x6009576")] [Address(RVA = "0x41F5B0", Offset = "0x41E3B0", VA = "0x18041F5B0")] get; [Token(Token = "0x6009577")] [Address(RVA = "0x41F730", Offset = "0x41E530", VA = "0x18041F730")] private set; } // Token: 0x170017CB RID: 6091 // (get) Token: 0x06009578 RID: 38264 RVA: 0x001EC044 File Offset: 0x001EA244 // (set) Token: 0x06009579 RID: 38265 RVA: 0x001EC058 File Offset: 0x001EA258 [Token(Token = "0x170017CB")] public int MinimumDataLegthToCompress { [Token(Token = "0x6009578")] [Address(RVA = "0x3F7310", Offset = "0x3F6110", VA = "0x1803F7310")] get; [Token(Token = "0x6009579")] [Address(RVA = "0x420360", Offset = "0x41F160", VA = "0x180420360")] set; } // Token: 0x0600957A RID: 38266 RVA: 0x001EC06C File Offset: 0x001EA26C [Token(Token = "0x600957A")] [Address(RVA = "0x1C3C490", Offset = "0x1C3B290", VA = "0x181C3C490")] public PerMessageCompression() { this.Level = (CompressionLevel)((ulong)6L); this.ClientNoContextTakeover = false; this.ClientMaxWindowBits = (int)((ulong)15L); this.ServerMaxWindowBits = (int)((ulong)15L); this.MinimumDataLegthToCompress = (int)((ulong)256L); } // Token: 0x0600957B RID: 38267 RVA: 0x001EC0B0 File Offset: 0x001EA2B0 [Token(Token = "0x600957B")] [Address(RVA = "0x1C3C440", Offset = "0x1C3B240", VA = "0x181C3C440")] public PerMessageCompression(CompressionLevel level, bool clientNoContextTakeover, bool serverNoContextTakeover, int desiredClientMaxWindowBits, int desiredServerMaxWindowBits, int minDatalengthToCompress) { this.ClientMaxWindowBits = 0; this.ServerMaxWindowBits = 0; this.Level = level; this.MinimumDataLegthToCompress = 0; this.ClientNoContextTakeover = clientNoContextTakeover; } // Token: 0x0600957C RID: 38268 RVA: 0x001EC0E8 File Offset: 0x001EA2E8 [Token(Token = "0x600957C")] [Address(RVA = "0x1C3B8F0", Offset = "0x1C3A6F0", VA = "0x181C3B8F0", Slot = "4")] public void AddNegotiation(HTTPRequest request) { if (this.k__BackingField) { string text = "permessage-deflate" + "; server_no_context_takeover"; } string text2; if (this.k__BackingField) { text2 = "permessage-deflate" + "; client_no_context_takeover"; } int num = this.k__BackingField; if (num == 15) { this.k__BackingField = num; } string text4; string text3 = text2 + "; server_max_window_bits=" + text4; if (this.k__BackingField == 15) { string text5 = text3 + "; client_max_window_bits"; this.k__BackingField = (int)((ulong)15L); } string text7; string text6 = text3 + "; client_max_window_bits=" + text7; request.AddHeader("Sec-WebSocket-Extensions", text6); } // Token: 0x0600957D RID: 38269 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x600957D")] [Address(RVA = "0x1C3C0B0", Offset = "0x1C3AEB0", VA = "0x181C3C0B0", Slot = "5")] public bool ParseNegotiation(WebSocketResponse resp) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x0600957E RID: 38270 RVA: 0x001EC190 File Offset: 0x001EA390 [Token(Token = "0x600957E")] [Address(RVA = "0x1C3C070", Offset = "0x1C3AE70", VA = "0x181C3C070", Slot = "6")] public byte GetFrameHeader(WebSocketFrame writer, byte inFlag) { WebSocketFrameTypes k__BackingField = writer.k__BackingField; if (writer.k__BackingField != 0) { int num = this.k__BackingField; } return inFlag; } // Token: 0x0600957F RID: 38271 RVA: 0x001EC1BC File Offset: 0x001EA3BC [Token(Token = "0x600957F")] [Address(RVA = "0x1C3BFC0", Offset = "0x1C3ADC0", VA = "0x181C3BFC0", Slot = "7")] public byte[] Encode(WebSocketFrame writer) { byte[] k__BackingField = writer.k__BackingField; if (k__BackingField != 0) { return k__BackingField; } return VariableSizedBufferPool.NoData; } // Token: 0x06009580 RID: 38272 RVA: 0x001EC1F4 File Offset: 0x001EA3F4 [Token(Token = "0x6009580")] [Address(RVA = "0x1C3BC90", Offset = "0x1C3AA90", VA = "0x181C3BC90", Slot = "8")] public byte[] Decode(byte header, byte[] data, int length) { return this.Decompress(data, length); } // Token: 0x06009581 RID: 38273 RVA: 0x001EC20C File Offset: 0x001EA40C [Token(Token = "0x6009581")] [Address(RVA = "0x1C3BA20", Offset = "0x1C3A820", VA = "0x181C3BA20")] private byte[] Compress(byte[] data, int length) { int num; byte[] array; do { num = 0; if (this.compressorOutputStream == 0) { BufferPoolMemoryStream bufferPoolMemoryStream = new BufferPoolMemoryStream(); this.compressorOutputStream = bufferPoolMemoryStream; } if (this.compressorDeflateStream == num) { CompressionLevel compressionLevel = this.k__BackingField; int num2 = this.k__BackingField; DeflateStream deflateStream; this.compressorDeflateStream = deflateStream; FlushType flushMode = deflateStream.FlushMode; } int num3 = this.compressorDeflateStream.ReadByte(); DeflateStream deflateStream2 = this.compressorDeflateStream; long position = this.compressorOutputStream.Position; bool canWrite = this.compressorOutputStream.CanWrite; array = this.compressorOutputStream.ToArray(); if (this.k__BackingField) { this.compressorDeflateStream.Dispose(); this.compressorDeflateStream = (ulong)0L; } } while (num != 0); return array; } // Token: 0x06009582 RID: 38274 RVA: 0x001EC2EC File Offset: 0x001EA4EC [Token(Token = "0x6009582")] [Address(RVA = "0x1C3BCB0", Offset = "0x1C3AAB0", VA = "0x181C3BCB0")] private byte[] Decompress(byte[] data, int length) { BufferPoolMemoryStream bufferPoolMemoryStream = this.decompressorInputStream; if (bufferPoolMemoryStream == 0) { int num; BufferPoolMemoryStream bufferPoolMemoryStream2 = new BufferPoolMemoryStream(num); num = data.Length; num += 4; this.decompressorInputStream = bufferPoolMemoryStream2; } int num2 = bufferPoolMemoryStream.ReadByte(); BufferPoolMemoryStream bufferPoolMemoryStream3 = this.decompressorInputStream; byte[] trailer = PerMessageCompression.Trailer; int num3 = bufferPoolMemoryStream3.ReadByte(); long position = this.decompressorInputStream.Position; int num4 = 0; if (this.decompressorDeflateStream == num4) { BufferPoolMemoryStream bufferPoolMemoryStream4 = this.decompressorInputStream; int num5 = this.k__BackingField; ulong num6; DeflateStream deflateStream = new DeflateStream(bufferPoolMemoryStream4, CompressionMode.Decompress, CompressionLevel.Default, num6 != 0UL, num5); this.decompressorDeflateStream = deflateStream; FlushType flushMode = deflateStream.FlushMode; } if (this.decompressorOutputStream == 0) { BufferPoolMemoryStream bufferPoolMemoryStream5 = new BufferPoolMemoryStream(); this.decompressorOutputStream = bufferPoolMemoryStream5; } uint num7; ulong num8; byte[] array = VariableSizedBufferPool.Get((long)num7, num8 != 0UL); DeflateStream deflateStream2 = this.decompressorDeflateStream; int num9 = this.decompressorOutputStream.ReadByte(); VariableSizedBufferPool.Release(array); DeflateStream deflateStream3 = this.decompressorDeflateStream; byte[] array2 = this.decompressorOutputStream.ToArray(); if ((this.k__BackingField ? 1 : 0) != num4) { this.decompressorDeflateStream.Dispose(); this.decompressorDeflateStream = num4; } return array2; } // Token: 0x06009583 RID: 38275 RVA: 0x001EC400 File Offset: 0x001EA600 // Note: this type is marked as 'beforefieldinit'. [Token(Token = "0x6009583")] [Address(RVA = "0x1C3C3B0", Offset = "0x1C3B1B0", VA = "0x181C3C3B0")] static PerMessageCompression() { byte[] array = new byte[4]; array[0] = (byte)((ulong)255L); array[0] = (byte)((ulong)255L); PerMessageCompression.Trailer = array; } // Token: 0x040065EC RID: 26092 [Token(Token = "0x40065EC")] public const int MinDataLengthToCompressDefault = 256; // Token: 0x040065ED RID: 26093 [Token(Token = "0x40065ED")] private static readonly byte[] Trailer; // Token: 0x040065F4 RID: 26100 [FieldOffset(Offset = "0x28")] [Token(Token = "0x40065F4")] private BufferPoolMemoryStream compressorOutputStream; // Token: 0x040065F5 RID: 26101 [FieldOffset(Offset = "0x30")] [Token(Token = "0x40065F5")] private DeflateStream compressorDeflateStream; // Token: 0x040065F6 RID: 26102 [FieldOffset(Offset = "0x38")] [Token(Token = "0x40065F6")] private BufferPoolMemoryStream decompressorInputStream; // Token: 0x040065F7 RID: 26103 [FieldOffset(Offset = "0x40")] [Token(Token = "0x40065F7")] private BufferPoolMemoryStream decompressorOutputStream; // Token: 0x040065F8 RID: 26104 [FieldOffset(Offset = "0x48")] [Token(Token = "0x40065F8")] private DeflateStream decompressorDeflateStream; } }