using System; using System.Runtime.InteropServices; using BestHTTP.Decompression.Zlib; using BestHTTP.Extensions; using BestHTTP.WebSocket.Frames; using Cpp2IlInjected; namespace BestHTTP.WebSocket.Extensions { // Token: 0x020012F2 RID: 4850 [Token(Token = "0x20012F2")] [StructLayout(3)] public sealed class PerMessageCompression : IExtension { // Token: 0x170013C1 RID: 5057 // (get) Token: 0x06007982 RID: 31106 RVA: 0x001944E8 File Offset: 0x001926E8 // (set) Token: 0x06007983 RID: 31107 RVA: 0x001944FC File Offset: 0x001926FC [Token(Token = "0x170013C1")] public bool ClientNoContextTakeover { [Token(Token = "0x6007982")] [Address(RVA = "0x559440", Offset = "0x557E40", VA = "0x180559440")] get; [Token(Token = "0x6007983")] [Address(RVA = "0x559450", Offset = "0x557E50", VA = "0x180559450")] private set; } // Token: 0x170013C2 RID: 5058 // (get) Token: 0x06007984 RID: 31108 RVA: 0x00194510 File Offset: 0x00192710 // (set) Token: 0x06007985 RID: 31109 RVA: 0x00194524 File Offset: 0x00192724 [Token(Token = "0x170013C2")] public bool ServerNoContextTakeover { [Token(Token = "0x6007984")] [Address(RVA = "0x6E4A50", Offset = "0x6E3450", VA = "0x1806E4A50")] get; [Token(Token = "0x6007985")] [Address(RVA = "0x6E4A60", Offset = "0x6E3460", VA = "0x1806E4A60")] private set; } // Token: 0x170013C3 RID: 5059 // (get) Token: 0x06007986 RID: 31110 RVA: 0x00194538 File Offset: 0x00192738 // (set) Token: 0x06007987 RID: 31111 RVA: 0x0019454C File Offset: 0x0019274C [Token(Token = "0x170013C3")] public int ClientMaxWindowBits { [Token(Token = "0x6007986")] [Address(RVA = "0x55D550", Offset = "0x55BF50", VA = "0x18055D550")] get; [Token(Token = "0x6007987")] [Address(RVA = "0x55D5D0", Offset = "0x55BFD0", VA = "0x18055D5D0")] private set; } // Token: 0x170013C4 RID: 5060 // (get) Token: 0x06007988 RID: 31112 RVA: 0x00194560 File Offset: 0x00192760 // (set) Token: 0x06007989 RID: 31113 RVA: 0x00194574 File Offset: 0x00192774 [Token(Token = "0x170013C4")] public int ServerMaxWindowBits { [Token(Token = "0x6007988")] [Address(RVA = "0x3EE8D0", Offset = "0x3ED2D0", VA = "0x1803EE8D0")] get; [Token(Token = "0x6007989")] [Address(RVA = "0x4F8C20", Offset = "0x4F7620", VA = "0x1804F8C20")] private set; } // Token: 0x170013C5 RID: 5061 // (get) Token: 0x0600798A RID: 31114 RVA: 0x00194588 File Offset: 0x00192788 // (set) Token: 0x0600798B RID: 31115 RVA: 0x0019459C File Offset: 0x0019279C [Token(Token = "0x170013C5")] public CompressionLevel Level { [Token(Token = "0x600798A")] [Address(RVA = "0x4F8C10", Offset = "0x4F7610", VA = "0x1804F8C10")] get; [Token(Token = "0x600798B")] [Address(RVA = "0x420CD0", Offset = "0x41F6D0", VA = "0x180420CD0")] private set; } // Token: 0x170013C6 RID: 5062 // (get) Token: 0x0600798C RID: 31116 RVA: 0x001945B0 File Offset: 0x001927B0 // (set) Token: 0x0600798D RID: 31117 RVA: 0x001945C4 File Offset: 0x001927C4 [Token(Token = "0x170013C6")] public int MinimumDataLegthToCompress { [Token(Token = "0x600798C")] [Address(RVA = "0x4FBD40", Offset = "0x4FA740", VA = "0x1804FBD40")] get; [Token(Token = "0x600798D")] [Address(RVA = "0x4E90F0", Offset = "0x4E7AF0", VA = "0x1804E90F0")] set; } // Token: 0x0600798E RID: 31118 RVA: 0x001945D8 File Offset: 0x001927D8 [Token(Token = "0x600798E")] [Address(RVA = "0x6F3F00", Offset = "0x6F2900", VA = "0x1806F3F00")] 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: 0x0600798F RID: 31119 RVA: 0x0019461C File Offset: 0x0019281C [Token(Token = "0x600798F")] [Address(RVA = "0x6F3EB0", Offset = "0x6F28B0", VA = "0x1806F3EB0")] 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: 0x06007990 RID: 31120 RVA: 0x00194654 File Offset: 0x00192854 [Token(Token = "0x6007990")] [Address(RVA = "0x6F3340", Offset = "0x6F1D40", VA = "0x1806F3340", Slot = "4")] public void AddNegotiation(HTTPRequest request) { if (this.k__BackingField) { string text = "permessage-deflate" + "; server_no_context_takeover"; } if (this.k__BackingField) { string text2 = "permessage-deflate" + "; client_no_context_takeover"; } int num = this.k__BackingField; if (num == 15) { this.k__BackingField = num; } string text4; string text3; if (this.k__BackingField == 15) { text3 = text4 + "; client_max_window_bits"; this.k__BackingField = (int)((ulong)15L); } string text5 = text4 + "; client_max_window_bits=" + text3; request.AddHeader("Sec-WebSocket-Extensions", text5); } // Token: 0x06007991 RID: 31121 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6007991")] [Address(RVA = "0x6F3B20", Offset = "0x6F2520", VA = "0x1806F3B20", Slot = "5")] public bool ParseNegotiation(WebSocketResponse resp) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x06007992 RID: 31122 RVA: 0x001946EC File Offset: 0x001928EC [Token(Token = "0x6007992")] [Address(RVA = "0x6F3AE0", Offset = "0x6F24E0", VA = "0x1806F3AE0", 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: 0x06007993 RID: 31123 RVA: 0x00194718 File Offset: 0x00192918 [Token(Token = "0x6007993")] [Address(RVA = "0x6F3A30", Offset = "0x6F2430", VA = "0x1806F3A30", Slot = "7")] public byte[] Encode(WebSocketFrame writer) { byte[] k__BackingField = writer.k__BackingField; if (k__BackingField != 0) { return k__BackingField; } return VariableSizedBufferPool.NoData; } // Token: 0x06007994 RID: 31124 RVA: 0x00194750 File Offset: 0x00192950 [Token(Token = "0x6007994")] [Address(RVA = "0x6F3700", Offset = "0x6F2100", VA = "0x1806F3700", Slot = "8")] public byte[] Decode(byte header, byte[] data, int length) { return this.Decompress(data, length); } // Token: 0x06007995 RID: 31125 RVA: 0x00194768 File Offset: 0x00192968 [Token(Token = "0x6007995")] [Address(RVA = "0x6F3470", Offset = "0x6F1E70", VA = "0x1806F3470")] 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(); int num4 = 0; if (this.k__BackingField) { this.compressorDeflateStream.Dispose(); this.compressorDeflateStream = (ulong)0L; } if (num4 != -1) { } } while (num != 0); return array; } // Token: 0x06007996 RID: 31126 RVA: 0x00194850 File Offset: 0x00192A50 [Token(Token = "0x6007996")] [Address(RVA = "0x6F3720", Offset = "0x6F2120", VA = "0x1806F3720")] 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: 0x06007997 RID: 31127 RVA: 0x00194964 File Offset: 0x00192B64 // Note: this type is marked as 'beforefieldinit'. [Token(Token = "0x6007997")] [Address(RVA = "0x6F3E20", Offset = "0x6F2820", VA = "0x1806F3E20")] static PerMessageCompression() { byte[] array = new byte[4]; array[0] = (byte)((ulong)255L); array[0] = (byte)((ulong)255L); PerMessageCompression.Trailer = array; } // Token: 0x040057A7 RID: 22439 [Token(Token = "0x40057A7")] public const int MinDataLengthToCompressDefault = 256; // Token: 0x040057A8 RID: 22440 [Token(Token = "0x40057A8")] private static readonly byte[] Trailer; // Token: 0x040057AF RID: 22447 [global::Cpp2IlInjected.FieldOffset(Offset = "0x28")] [Token(Token = "0x40057AF")] private BufferPoolMemoryStream compressorOutputStream; // Token: 0x040057B0 RID: 22448 [global::Cpp2IlInjected.FieldOffset(Offset = "0x30")] [Token(Token = "0x40057B0")] private DeflateStream compressorDeflateStream; // Token: 0x040057B1 RID: 22449 [global::Cpp2IlInjected.FieldOffset(Offset = "0x38")] [Token(Token = "0x40057B1")] private BufferPoolMemoryStream decompressorInputStream; // Token: 0x040057B2 RID: 22450 [global::Cpp2IlInjected.FieldOffset(Offset = "0x40")] [Token(Token = "0x40057B2")] private BufferPoolMemoryStream decompressorOutputStream; // Token: 0x040057B3 RID: 22451 [global::Cpp2IlInjected.FieldOffset(Offset = "0x48")] [Token(Token = "0x40057B3")] private DeflateStream decompressorDeflateStream; } }