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