332 lines
12 KiB
C#
332 lines
12 KiB
C#
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.<ServerNoContextTakeover>k__BackingField)
|
|
{
|
|
string text = "permessage-deflate" + "; server_no_context_takeover";
|
|
}
|
|
if (this.<ClientNoContextTakeover>k__BackingField)
|
|
{
|
|
string text2 = "permessage-deflate" + "; client_no_context_takeover";
|
|
}
|
|
int num = this.<ServerMaxWindowBits>k__BackingField;
|
|
if (num == 15)
|
|
{
|
|
this.<ServerMaxWindowBits>k__BackingField = num;
|
|
}
|
|
string text4;
|
|
string text3;
|
|
if (this.<ClientMaxWindowBits>k__BackingField == 15)
|
|
{
|
|
text3 = text4 + "; client_max_window_bits";
|
|
this.<ClientMaxWindowBits>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 <Type>k__BackingField = writer.<Type>k__BackingField;
|
|
if (writer.<Data>k__BackingField != 0)
|
|
{
|
|
int num = this.<MinimumDataLegthToCompress>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[] <Data>k__BackingField = writer.<Data>k__BackingField;
|
|
if (<Data>k__BackingField != 0)
|
|
{
|
|
return <Data>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.<Level>k__BackingField;
|
|
int num2 = this.<ClientMaxWindowBits>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.<ClientNoContextTakeover>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.<ServerMaxWindowBits>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.<ServerNoContextTakeover>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;
|
|
}
|
|
}
|