Files
Aug2021-Cpp2IL-Dump/Assembly-CSharp/BestHTTP/WebSocket/Extensions/PerMessageCompression.cs
T
2026-04-10 22:50:51 +02:00

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;
}
}