oh dear
This commit is contained in:
@@ -0,0 +1,895 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using BestHTTP.Extensions;
|
||||
using BestHTTP.Logger;
|
||||
using BestHTTP.WebSocket.Frames;
|
||||
using Cpp2IlInjected;
|
||||
|
||||
namespace BestHTTP.WebSocket
|
||||
{
|
||||
// Token: 0x020018CA RID: 6346
|
||||
[Token(Token = "0x20018CA")]
|
||||
public sealed class WebSocketResponse : HTTPResponse, IHeartbeat, IProtocol
|
||||
{
|
||||
// Token: 0x170017B3 RID: 6067
|
||||
// (get) Token: 0x06009524 RID: 38180 RVA: 0x001EAC20 File Offset: 0x001E8E20
|
||||
// (set) Token: 0x06009525 RID: 38181 RVA: 0x001EAC34 File Offset: 0x001E8E34
|
||||
[Token(Token = "0x170017B3")]
|
||||
public WebSocket WebSocket
|
||||
{
|
||||
[Token(Token = "0x6009524")]
|
||||
[Address(RVA = "0x5F4E40", Offset = "0x5F3C40", VA = "0x1805F4E40")]
|
||||
get;
|
||||
[Token(Token = "0x6009525")]
|
||||
[Address(RVA = "0x7CB600", Offset = "0x7CA400", VA = "0x1807CB600")]
|
||||
internal set;
|
||||
}
|
||||
|
||||
// Token: 0x170017B4 RID: 6068
|
||||
// (get) Token: 0x06009526 RID: 38182 RVA: 0x001EAC48 File Offset: 0x001E8E48
|
||||
[Token(Token = "0x170017B4")]
|
||||
public bool IsClosed
|
||||
{
|
||||
[Token(Token = "0x6009526")]
|
||||
[Address(RVA = "0x1C44C10", Offset = "0x1C43A10", VA = "0x181C44C10", Slot = "7")]
|
||||
get
|
||||
{
|
||||
return this.closed;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x170017B5 RID: 6069
|
||||
// (get) Token: 0x06009527 RID: 38183 RVA: 0x001EAC5C File Offset: 0x001E8E5C
|
||||
// (set) Token: 0x06009528 RID: 38184 RVA: 0x001EAC70 File Offset: 0x001E8E70
|
||||
[Token(Token = "0x170017B5")]
|
||||
public TimeSpan PingFrequnecy
|
||||
{
|
||||
[Token(Token = "0x6009527")]
|
||||
[Address(RVA = "0x60CF40", Offset = "0x60BD40", VA = "0x18060CF40")]
|
||||
get;
|
||||
[Token(Token = "0x6009528")]
|
||||
[Address(RVA = "0x7B58A0", Offset = "0x7B46A0", VA = "0x1807B58A0")]
|
||||
private set;
|
||||
}
|
||||
|
||||
// Token: 0x170017B6 RID: 6070
|
||||
// (get) Token: 0x06009529 RID: 38185 RVA: 0x001EAC84 File Offset: 0x001E8E84
|
||||
// (set) Token: 0x0600952A RID: 38186 RVA: 0x001EAC98 File Offset: 0x001E8E98
|
||||
[Token(Token = "0x170017B6")]
|
||||
public ushort MaxFragmentSize
|
||||
{
|
||||
[Token(Token = "0x6009529")]
|
||||
[Address(RVA = "0x1C44C30", Offset = "0x1C43A30", VA = "0x181C44C30")]
|
||||
get;
|
||||
[Token(Token = "0x600952A")]
|
||||
[Address(RVA = "0x1C44C40", Offset = "0x1C43A40", VA = "0x181C44C40")]
|
||||
private set;
|
||||
}
|
||||
|
||||
// Token: 0x170017B7 RID: 6071
|
||||
// (get) Token: 0x0600952B RID: 38187 RVA: 0x001EACAC File Offset: 0x001E8EAC
|
||||
[Token(Token = "0x170017B7")]
|
||||
public int BufferedAmount
|
||||
{
|
||||
[Token(Token = "0x600952B")]
|
||||
[Address(RVA = "0x60CFD0", Offset = "0x60BDD0", VA = "0x18060CFD0")]
|
||||
get
|
||||
{
|
||||
return this._bufferedAmount;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x170017B8 RID: 6072
|
||||
// (get) Token: 0x0600952C RID: 38188 RVA: 0x001EACC0 File Offset: 0x001E8EC0
|
||||
// (set) Token: 0x0600952D RID: 38189 RVA: 0x001EACD4 File Offset: 0x001E8ED4
|
||||
[Token(Token = "0x170017B8")]
|
||||
public int Latency
|
||||
{
|
||||
[Token(Token = "0x600952C")]
|
||||
[Address(RVA = "0xD027E0", Offset = "0xD015E0", VA = "0x180D027E0")]
|
||||
get;
|
||||
[Token(Token = "0x600952D")]
|
||||
[Address(RVA = "0xD00030", Offset = "0xCFEE30", VA = "0x180D00030")]
|
||||
private set;
|
||||
}
|
||||
|
||||
// Token: 0x0600952E RID: 38190 RVA: 0x001EACE8 File Offset: 0x001E8EE8
|
||||
[Token(Token = "0x600952E")]
|
||||
[Address(RVA = "0x1C449D0", Offset = "0x1C437D0", VA = "0x181C449D0")]
|
||||
internal WebSocketResponse(HTTPRequest request, Stream stream, bool isStreamed, bool isFromCache)
|
||||
{
|
||||
List<WebSocketFrameReader> list = new List();
|
||||
this.IncompleteFrames = list;
|
||||
List<WebSocketFrameReader> list2 = new List();
|
||||
this.CompletedFrames = list2;
|
||||
List<WebSocketFrameReader> list3 = new List();
|
||||
this.frameCache = list3;
|
||||
object obj = new object();
|
||||
this.FrameLock = obj;
|
||||
object obj2 = new object();
|
||||
this.SendLock = obj2;
|
||||
List<WebSocketFrame> list4 = new List();
|
||||
this.unsentFrames = list4;
|
||||
int num;
|
||||
AutoResetEvent autoResetEvent = new AutoResetEvent(num != 0);
|
||||
num = 0;
|
||||
this.newFrameSignal = autoResetEvent;
|
||||
DateTime minValue = DateTime.MinValue;
|
||||
this.lastPing = minValue;
|
||||
DateTime minValue2 = DateTime.MinValue;
|
||||
this.lastMessage = minValue2;
|
||||
CircularBuffer<int> circularBuffer = new CircularBuffer(WebSocketResponse.RTTBufferCapacity);
|
||||
this.rtts = circularBuffer;
|
||||
this.<IsClosedManually>k__BackingField = true;
|
||||
this.MaxFragmentSize = (ushort)((uint)32767);
|
||||
this.closed = false;
|
||||
}
|
||||
|
||||
// Token: 0x0600952F RID: 38191 RVA: 0x001EADA8 File Offset: 0x001E8FA8
|
||||
[Token(Token = "0x600952F")]
|
||||
[Address(RVA = "0x1C44920", Offset = "0x1C43720", VA = "0x181C44920")]
|
||||
internal void StartReceive()
|
||||
{
|
||||
bool flag = ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReceiveThreadFunc));
|
||||
}
|
||||
|
||||
// Token: 0x06009530 RID: 38192 RVA: 0x001EADC8 File Offset: 0x001E8FC8
|
||||
[Token(Token = "0x6009530")]
|
||||
[Address(RVA = "0x1C42360", Offset = "0x1C41160", VA = "0x181C42360")]
|
||||
internal void CloseStream()
|
||||
{
|
||||
ConnectionBase connectionWith = HTTPManager.GetConnectionWith(this.baseRequest);
|
||||
if (connectionWith != 0)
|
||||
{
|
||||
connectionWith.Abort((HTTPConnectionStates)((uint)9));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06009531 RID: 38193 RVA: 0x001EADF0 File Offset: 0x001E8FF0
|
||||
[Token(Token = "0x6009531")]
|
||||
[Address(RVA = "0x1C44450", Offset = "0x1C43250", VA = "0x181C44450")]
|
||||
public void Send(string message)
|
||||
{
|
||||
int num;
|
||||
WebSocketFrame webSocketFrame;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
if (message == 0)
|
||||
{
|
||||
goto IL_A2;
|
||||
}
|
||||
object obj = Encoding.UTF8.Clone();
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(message);
|
||||
byte[] <Data>k__BackingField = webSocketFrame.<Data>k__BackingField;
|
||||
if (<Data>k__BackingField == 0)
|
||||
{
|
||||
goto IL_99;
|
||||
}
|
||||
ushort num2 = this.<MaxFragmentSize>k__BackingField;
|
||||
if (<Data>k__BackingField.Length <= (int)num2)
|
||||
{
|
||||
goto IL_99;
|
||||
}
|
||||
WebSocketFrame[] array = webSocketFrame.Fragment(num2);
|
||||
object sendLock = this.SendLock;
|
||||
this.Send(webSocketFrame);
|
||||
if (array != 0 && num < array.Length)
|
||||
{
|
||||
WebSocketFrame webSocketFrame2 = array[num];
|
||||
this.Send(webSocketFrame2);
|
||||
num++;
|
||||
}
|
||||
Monitor.Exit(sendLock);
|
||||
}
|
||||
while (num != 0);
|
||||
if (num != -1)
|
||||
{
|
||||
}
|
||||
IL_99:
|
||||
this.Send(webSocketFrame);
|
||||
return;
|
||||
IL_A2:
|
||||
ArgumentNullException ex = new ArgumentNullException("message must not be null!");
|
||||
throw new IndexOutOfRangeException();
|
||||
}
|
||||
|
||||
// Token: 0x06009532 RID: 38194 RVA: 0x001EAEB0 File Offset: 0x001E90B0
|
||||
[Token(Token = "0x6009532")]
|
||||
[Address(RVA = "0x1C43D70", Offset = "0x1C42B70", VA = "0x181C43D70")]
|
||||
public void Send(byte[] data)
|
||||
{
|
||||
int num;
|
||||
WebSocketFrame webSocketFrame;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
if (data == 0)
|
||||
{
|
||||
goto IL_9D;
|
||||
}
|
||||
int length;
|
||||
ulong num2;
|
||||
ulong num3;
|
||||
webSocketFrame = new WebSocketFrame(this.<WebSocket>k__BackingField, (WebSocketFrameTypes)((ulong)2L), data, (ulong)num, (ulong)length, num2 != 0UL, num3 != 0UL);
|
||||
length = data.Length;
|
||||
byte[] <Data>k__BackingField = webSocketFrame.<Data>k__BackingField;
|
||||
if (<Data>k__BackingField == 0)
|
||||
{
|
||||
goto IL_95;
|
||||
}
|
||||
ushort num4 = this.<MaxFragmentSize>k__BackingField;
|
||||
if (<Data>k__BackingField.Length <= (int)num4)
|
||||
{
|
||||
goto IL_95;
|
||||
}
|
||||
WebSocketFrame[] array = webSocketFrame.Fragment(num4);
|
||||
object sendLock = this.SendLock;
|
||||
this.Send(webSocketFrame);
|
||||
if (array != 0 && num < array.Length)
|
||||
{
|
||||
WebSocketFrame webSocketFrame2 = array[num];
|
||||
this.Send(webSocketFrame2);
|
||||
num++;
|
||||
}
|
||||
Monitor.Exit(sendLock);
|
||||
}
|
||||
while (num != 0);
|
||||
if (num != -1)
|
||||
{
|
||||
}
|
||||
IL_95:
|
||||
this.Send(webSocketFrame);
|
||||
return;
|
||||
IL_9D:
|
||||
ArgumentNullException ex = new ArgumentNullException("data must not be null!");
|
||||
throw new IndexOutOfRangeException();
|
||||
}
|
||||
|
||||
// Token: 0x06009533 RID: 38195 RVA: 0x001EAF6C File Offset: 0x001E916C
|
||||
[Token(Token = "0x6009533")]
|
||||
[Address(RVA = "0x1C43F90", Offset = "0x1C42D90", VA = "0x181C43F90")]
|
||||
public void Send(byte[] data, ulong offset, ulong count)
|
||||
{
|
||||
int num;
|
||||
WebSocketFrame webSocketFrame;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
if (data == 0)
|
||||
{
|
||||
goto IL_85;
|
||||
}
|
||||
int length = data.Length;
|
||||
byte[] <Data>k__BackingField = webSocketFrame.<Data>k__BackingField;
|
||||
if (<Data>k__BackingField == 0)
|
||||
{
|
||||
goto IL_7D;
|
||||
}
|
||||
ushort num2 = this.<MaxFragmentSize>k__BackingField;
|
||||
if (<Data>k__BackingField.Length <= (int)num2)
|
||||
{
|
||||
goto IL_7D;
|
||||
}
|
||||
WebSocketFrame[] array = webSocketFrame.Fragment(num2);
|
||||
object sendLock = this.SendLock;
|
||||
this.Send(webSocketFrame);
|
||||
if (array != 0 && num < array.Length)
|
||||
{
|
||||
WebSocketFrame webSocketFrame2 = array[num];
|
||||
this.Send(webSocketFrame2);
|
||||
num++;
|
||||
}
|
||||
Monitor.Exit(sendLock);
|
||||
}
|
||||
while (num != 0);
|
||||
if (num != -1)
|
||||
{
|
||||
}
|
||||
IL_7D:
|
||||
this.Send(webSocketFrame);
|
||||
return;
|
||||
IL_85:
|
||||
ArgumentNullException ex = new ArgumentNullException("data must not be null!");
|
||||
throw new IndexOutOfRangeException();
|
||||
}
|
||||
|
||||
// Token: 0x06009534 RID: 38196 RVA: 0x001EB010 File Offset: 0x001E9210
|
||||
[Token(Token = "0x6009534")]
|
||||
[Address(RVA = "0x1C44200", Offset = "0x1C43000", VA = "0x181C44200")]
|
||||
public void Send(WebSocketFrame frame)
|
||||
{
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
if (frame == 0)
|
||||
{
|
||||
goto IL_7C;
|
||||
}
|
||||
if (this.closed || this.closeSent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
object sendLock = this.SendLock;
|
||||
this.unsentFrames.Add(frame);
|
||||
if (!this.sendThreadCreated)
|
||||
{
|
||||
ILogger logger = HTTPManager.Logger;
|
||||
bool flag = ThreadPool.QueueUserWorkItem(new WaitCallback(this.SendThreadFunc));
|
||||
this.sendThreadCreated = true;
|
||||
}
|
||||
Monitor.Exit(sendLock);
|
||||
}
|
||||
while (num != 0);
|
||||
if (frame.<Data>k__BackingField != (ulong)0L)
|
||||
{
|
||||
}
|
||||
bool flag2 = this.newFrameSignal.Set();
|
||||
return;
|
||||
IL_7C:
|
||||
ArgumentNullException ex = new ArgumentNullException("frame is null!");
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
// Token: 0x06009535 RID: 38197 RVA: 0x001EB0B0 File Offset: 0x001E92B0
|
||||
[Token(Token = "0x6009535")]
|
||||
[Address(RVA = "0x1C42770", Offset = "0x1C41570", VA = "0x181C42770")]
|
||||
public void Insert(WebSocketFrame frame)
|
||||
{
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
if (frame == 0)
|
||||
{
|
||||
goto IL_83;
|
||||
}
|
||||
if (this.closed || this.closeSent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
object sendLock = this.SendLock;
|
||||
List<WebSocketFrame> list = this.unsentFrames;
|
||||
int num2 = 0;
|
||||
list.Insert(num2, frame);
|
||||
if (!this.sendThreadCreated)
|
||||
{
|
||||
ILogger logger = HTTPManager.Logger;
|
||||
bool flag = ThreadPool.QueueUserWorkItem(new WaitCallback(this.SendThreadFunc));
|
||||
this.sendThreadCreated = true;
|
||||
}
|
||||
Monitor.Exit(sendLock);
|
||||
}
|
||||
while (num != 0);
|
||||
if (frame.<Data>k__BackingField != (ulong)0L)
|
||||
{
|
||||
}
|
||||
bool flag2 = this.newFrameSignal.Set();
|
||||
return;
|
||||
IL_83:
|
||||
ArgumentNullException ex = new ArgumentNullException("frame is null!");
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
// Token: 0x06009536 RID: 38198 RVA: 0x001EB158 File Offset: 0x001E9358
|
||||
[Token(Token = "0x6009536")]
|
||||
[Address(RVA = "0x1C43420", Offset = "0x1C42220", VA = "0x181C43420")]
|
||||
public void SendNow(WebSocketFrame frame)
|
||||
{
|
||||
/*
|
||||
An exception occurred when decompiling this method (06009536)
|
||||
|
||||
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.WebSocket.WebSocketResponse::SendNow(BestHTTP.WebSocket.Frames.WebSocketFrame)
|
||||
|
||||
---> System.Exception: Basic block has to end with unconditional control flow.
|
||||
{
|
||||
IL_3C:
|
||||
stloc:ArgumentNullException(var_4_46, newobj:ArgumentNullException(ArgumentNullException::.ctor, ldstr:string("frame is null!")))
|
||||
}
|
||||
|
||||
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
|
||||
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
|
||||
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
|
||||
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
|
||||
--- End of inner exception stack trace ---
|
||||
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
|
||||
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
|
||||
*/;
|
||||
}
|
||||
|
||||
// Token: 0x06009537 RID: 38199 RVA: 0x001EB1AC File Offset: 0x001E93AC
|
||||
[Token(Token = "0x6009537")]
|
||||
[Address(RVA = "0x1C42730", Offset = "0x1C41530", VA = "0x181C42730")]
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
// Token: 0x06009538 RID: 38200 RVA: 0x001EB1BC File Offset: 0x001E93BC
|
||||
[Token(Token = "0x6009538")]
|
||||
[Address(RVA = "0x1C42590", Offset = "0x1C41390", VA = "0x181C42590")]
|
||||
public void Close(ushort code, string msg)
|
||||
{
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
if (this.closed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
object sendLock = this.SendLock;
|
||||
this.unsentFrames.Clear();
|
||||
Monitor.Exit(sendLock);
|
||||
}
|
||||
while (num != 0);
|
||||
WebSocket webSocket = this.<WebSocket>k__BackingField;
|
||||
byte[] array = WebSocket.EncodeCloseData(code, msg);
|
||||
ulong num2;
|
||||
int num3;
|
||||
ulong num4;
|
||||
ulong num5;
|
||||
WebSocketFrame webSocketFrame = new WebSocketFrame(webSocket, (WebSocketFrameTypes)((ulong)8L), array, num2, (ulong)num3, num4 != 0UL, num5 != 0UL);
|
||||
if (array != 0)
|
||||
{
|
||||
}
|
||||
num3 = 0;
|
||||
this.Send(webSocketFrame);
|
||||
}
|
||||
|
||||
// Token: 0x06009539 RID: 38201 RVA: 0x001EB234 File Offset: 0x001E9434
|
||||
[Token(Token = "0x6009539")]
|
||||
[Address(RVA = "0x1C44750", Offset = "0x1C43550", VA = "0x181C44750")]
|
||||
public void StartPinging(int frequency)
|
||||
{
|
||||
Delegate @delegate;
|
||||
int num;
|
||||
do
|
||||
{
|
||||
TimeSpan timeSpan;
|
||||
this.<PingFrequnecy>k__BackingField = timeSpan;
|
||||
DateTime utcNow = DateTime.UtcNow;
|
||||
this.lastMessage = utcNow;
|
||||
this.SendPing();
|
||||
HTTPManager.Heartbeats.Subscribe(this);
|
||||
Action<bool> onApplicationForegroundStateChanged = HTTPUpdateDelegator.OnApplicationForegroundStateChanged;
|
||||
Action<bool> action = new Action(this.OnApplicationForegroundStateChanged);
|
||||
@delegate = Delegate.Combine(onApplicationForegroundStateChanged, action);
|
||||
num = 0;
|
||||
}
|
||||
while (@delegate != 0 && @delegate == 0);
|
||||
HTTPUpdateDelegator.OnApplicationForegroundStateChanged = num;
|
||||
}
|
||||
|
||||
// Token: 0x0600953A RID: 38202 RVA: 0x001EB2AC File Offset: 0x001E94AC
|
||||
[Token(Token = "0x600953A")]
|
||||
[Address(RVA = "0x1C437B0", Offset = "0x1C425B0", VA = "0x181C437B0")]
|
||||
private void SendThreadFunc(object param)
|
||||
{
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
List<WebSocketFrame> list = new List();
|
||||
if (!this.closed && !this.closeSent)
|
||||
{
|
||||
AutoResetEvent autoResetEvent = this.newFrameSignal;
|
||||
object sendLock = this.SendLock;
|
||||
int size = this.unsentFrames._size;
|
||||
List<WebSocketFrame> list2 = this.unsentFrames;
|
||||
list.Clear();
|
||||
Monitor.Exit(sendLock);
|
||||
if (num != 0)
|
||||
{
|
||||
goto IL_118;
|
||||
}
|
||||
if ((ulong)((uint)(-1)) != (ulong)(-1L))
|
||||
{
|
||||
}
|
||||
int size2 = list._size;
|
||||
list.RemoveAt(size2);
|
||||
if (!this.closeSent)
|
||||
{
|
||||
int num2 = this.Stream.ReadByte();
|
||||
if (num != 0)
|
||||
{
|
||||
goto IL_11E;
|
||||
}
|
||||
if ((ulong)((uint)(-1)) != (ulong)(-1L))
|
||||
{
|
||||
}
|
||||
this.closeSent = true;
|
||||
}
|
||||
Stream stream = this.Stream;
|
||||
HTTPRequest baseRequest = this.baseRequest;
|
||||
baseRequest.<State>k__BackingField = (HTTPRequestStates)((ulong)5L);
|
||||
this.baseRequest.<Exception>k__BackingField = baseRequest;
|
||||
this.baseRequest.<State>k__BackingField = (HTTPRequestStates)((ulong)4L);
|
||||
this.closed = true;
|
||||
}
|
||||
this.sendThreadCreated = false;
|
||||
AutoResetEvent autoResetEvent2 = this.newFrameSignal;
|
||||
this.newFrameSignal = (ulong)0L;
|
||||
ILogger logger = HTTPManager.Logger;
|
||||
}
|
||||
while (num != 0);
|
||||
return;
|
||||
IL_118:
|
||||
throw new NullReferenceException();
|
||||
IL_11E:
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
// Token: 0x0600953B RID: 38203 RVA: 0x001EB40C File Offset: 0x001E960C
|
||||
[Token(Token = "0x600953B")]
|
||||
[Address(RVA = "0x1C42A30", Offset = "0x1C41830", VA = "0x181C42A30")]
|
||||
private void ReceiveThreadFunc(object param)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
int num = 0;
|
||||
ReadOnlyBufferedStream readOnlyBufferedStream = new ReadOnlyBufferedStream(this.Stream);
|
||||
int num2 = 0;
|
||||
uint num3;
|
||||
if (!this.closed)
|
||||
{
|
||||
DateTime utcNow = DateTime.UtcNow;
|
||||
this.lastMessage = utcNow;
|
||||
if (utcNow > (ulong)10L)
|
||||
{
|
||||
goto IL_69;
|
||||
}
|
||||
if (this.OnIncompleteFrame == (ulong)0L)
|
||||
{
|
||||
goto IL_8C;
|
||||
}
|
||||
object frameLock = this.FrameLock;
|
||||
List<WebSocketFrameReader> completedFrames = this.CompletedFrames;
|
||||
num3 += (uint)1;
|
||||
Monitor.Exit(frameLock);
|
||||
if (num != 0)
|
||||
{
|
||||
goto IL_247;
|
||||
}
|
||||
if (num3 != (uint)(-1))
|
||||
{
|
||||
goto IL_69;
|
||||
}
|
||||
IL_9F:
|
||||
WebSocket webSocket = this.<WebSocket>k__BackingField;
|
||||
object frameLock2 = this.FrameLock;
|
||||
List<WebSocketFrameReader> completedFrames2 = this.CompletedFrames;
|
||||
num3 += (uint)1;
|
||||
Monitor.Exit(frameLock2);
|
||||
if (num != 0)
|
||||
{
|
||||
goto IL_253;
|
||||
}
|
||||
if (num3 != (uint)(-1))
|
||||
{
|
||||
}
|
||||
if (this.closeSent || this.closed)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
WebSocketFrame webSocketFrame;
|
||||
if (!this.closeSent)
|
||||
{
|
||||
this.Send(webSocketFrame);
|
||||
}
|
||||
this.closed = true;
|
||||
this.Send(webSocketFrame);
|
||||
long num4;
|
||||
num4 -= num4;
|
||||
TimeSpan timeSpan = TimeSpan.FromTicks(num4);
|
||||
CircularBuffer<int> circularBuffer = this.rtts;
|
||||
int num5 = 0;
|
||||
circularBuffer.Add(num5);
|
||||
int num6 = this.CalculateLatency();
|
||||
this.<Latency>k__BackingField = num6;
|
||||
int num7 = 0;
|
||||
Monitor.Exit(circularBuffer);
|
||||
if (num != 0)
|
||||
{
|
||||
goto IL_26B;
|
||||
}
|
||||
if (num3 != (uint)(-1))
|
||||
{
|
||||
}
|
||||
IL_154:
|
||||
this.IncompleteFrames.Add(num7);
|
||||
uint num8;
|
||||
this.Close((ushort)num8, "Protocol Error: masked frame received from server!");
|
||||
this.IncompleteFrames.Clear();
|
||||
this.baseRequest.<State>k__BackingField = (HTTPRequestStates)((ulong)5L);
|
||||
this.closed = true;
|
||||
HTTPRequest baseRequest;
|
||||
if (!this.newFrameSignal.Set())
|
||||
{
|
||||
baseRequest = this.baseRequest;
|
||||
baseRequest.<State>k__BackingField = (HTTPRequestStates)((ulong)5L);
|
||||
}
|
||||
this.baseRequest.<Exception>k__BackingField = baseRequest;
|
||||
this.baseRequest.<State>k__BackingField = (HTTPRequestStates)((ulong)4L);
|
||||
this.closed = true;
|
||||
AutoResetEvent autoResetEvent = this.newFrameSignal;
|
||||
goto IL_1D8;
|
||||
IL_69:
|
||||
if (this.OnIncompleteFrame == (ulong)0L)
|
||||
{
|
||||
goto IL_154;
|
||||
}
|
||||
object frameLock3 = this.FrameLock;
|
||||
List<WebSocketFrameReader> completedFrames3 = this.CompletedFrames;
|
||||
num3 += (uint)1;
|
||||
IL_8C:
|
||||
List<WebSocketFrameReader> incompleteFrames = this.IncompleteFrames;
|
||||
this.IncompleteFrames.Clear();
|
||||
goto IL_9F;
|
||||
}
|
||||
IL_1D8:
|
||||
num3 += (uint)1;
|
||||
if (num2 != 0)
|
||||
{
|
||||
}
|
||||
if (num == 0)
|
||||
{
|
||||
if (num3 != (uint)(-1))
|
||||
{
|
||||
}
|
||||
HTTPManager.Heartbeats.Unsubscribe(this);
|
||||
Action<bool> onApplicationForegroundStateChanged = HTTPUpdateDelegator.OnApplicationForegroundStateChanged;
|
||||
Action<bool> action = new Action(this.OnApplicationForegroundStateChanged);
|
||||
Delegate @delegate = Delegate.Remove(onApplicationForegroundStateChanged, action);
|
||||
if (@delegate == 0 || @delegate != 0)
|
||||
{
|
||||
HTTPUpdateDelegator.OnApplicationForegroundStateChanged = @delegate;
|
||||
ILogger logger = HTTPManager.Logger;
|
||||
if (num == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
IL_247:
|
||||
throw new NullReferenceException();
|
||||
IL_253:
|
||||
throw new NullReferenceException();
|
||||
IL_26B:
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
// Token: 0x0600953C RID: 38204 RVA: 0x0000220F File Offset: 0x0000040F
|
||||
[Token(Token = "0x600953C")]
|
||||
[Address(RVA = "0x1C41D80", Offset = "0x1C40B80", VA = "0x181C41D80", Slot = "8")]
|
||||
void IProtocol.HandleEvents()
|
||||
{
|
||||
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
||||
}
|
||||
|
||||
// Token: 0x0600953D RID: 38205 RVA: 0x001EB6B4 File Offset: 0x001E98B4
|
||||
[Token(Token = "0x600953D")]
|
||||
[Address(RVA = "0x1C419D0", Offset = "0x1C407D0", VA = "0x181C419D0", Slot = "6")]
|
||||
void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif)
|
||||
{
|
||||
DateTime utcNow = DateTime.UtcNow;
|
||||
DateTime dateTime = this.lastPing;
|
||||
TimeSpan timeSpan = utcNow - dateTime;
|
||||
TimeSpan timeSpan2 = this.<PingFrequnecy>k__BackingField;
|
||||
if (timeSpan >= timeSpan2)
|
||||
{
|
||||
this.SendPing();
|
||||
}
|
||||
DateTime dateTime2 = this.lastMessage;
|
||||
TimeSpan timeSpan3 = this.<PingFrequnecy>k__BackingField;
|
||||
DateTime dateTime3 = dateTime2 + timeSpan3;
|
||||
TimeSpan timeSpan4 = utcNow - dateTime3;
|
||||
TimeSpan <CloseAfterNoMesssage>k__BackingField = this.<WebSocket>k__BackingField.<CloseAfterNoMesssage>k__BackingField;
|
||||
if (timeSpan4 > <CloseAfterNoMesssage>k__BackingField)
|
||||
{
|
||||
ILogger logger = HTTPManager.Logger;
|
||||
object[] array = new object[4];
|
||||
DateTime dateTime4 = this.lastMessage;
|
||||
if (array != 0)
|
||||
{
|
||||
}
|
||||
array[0] = array;
|
||||
TimeSpan timeSpan5 = this.<PingFrequnecy>k__BackingField;
|
||||
if (timeSpan5 != 0)
|
||||
{
|
||||
}
|
||||
array[1] = timeSpan5;
|
||||
TimeSpan <CloseAfterNoMesssage>k__BackingField2 = this.<WebSocket>k__BackingField.<CloseAfterNoMesssage>k__BackingField;
|
||||
if (<CloseAfterNoMesssage>k__BackingField2 != 0)
|
||||
{
|
||||
}
|
||||
array[2] = <CloseAfterNoMesssage>k__BackingField2;
|
||||
if (<CloseAfterNoMesssage>k__BackingField2 != 0)
|
||||
{
|
||||
}
|
||||
array[3] = <CloseAfterNoMesssage>k__BackingField2;
|
||||
string text = string.Format("No message received in the given time! Closing WebSocket. LastMessage: {0}, PingFrequency: {1}, Close After: {2}, Now: {3}", array);
|
||||
this.CloseWithError("No message received in the given time!");
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600953E RID: 38206 RVA: 0x001EB7BC File Offset: 0x001E99BC
|
||||
[Token(Token = "0x600953E")]
|
||||
[Address(RVA = "0x1C429C0", Offset = "0x1C417C0", VA = "0x181C429C0")]
|
||||
private void OnApplicationForegroundStateChanged(bool isPaused)
|
||||
{
|
||||
if (!isPaused)
|
||||
{
|
||||
DateTime utcNow = DateTime.UtcNow;
|
||||
this.lastMessage = utcNow;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600953F RID: 38207 RVA: 0x001EB7DC File Offset: 0x001E99DC
|
||||
[Token(Token = "0x600953F")]
|
||||
[Address(RVA = "0x1C435D0", Offset = "0x1C423D0", VA = "0x181C435D0")]
|
||||
private void SendPing()
|
||||
{
|
||||
DateTime utcNow = DateTime.UtcNow;
|
||||
this.lastPing = utcNow;
|
||||
DateTime utcNow2 = DateTime.UtcNow;
|
||||
byte[] array;
|
||||
ulong num;
|
||||
int num2;
|
||||
ulong num3;
|
||||
ulong num4;
|
||||
WebSocketFrame webSocketFrame = new WebSocketFrame(this.<WebSocket>k__BackingField, (WebSocketFrameTypes)((ulong)9L), array, num, (ulong)num2, num3 != 0UL, num4 != 0UL);
|
||||
if (array != 0)
|
||||
{
|
||||
}
|
||||
num2 = 0;
|
||||
this.Insert(webSocketFrame);
|
||||
ILogger logger = HTTPManager.Logger;
|
||||
}
|
||||
|
||||
// Token: 0x06009540 RID: 38208 RVA: 0x001EB844 File Offset: 0x001E9A44
|
||||
[Token(Token = "0x6009540")]
|
||||
[Address(RVA = "0x1C423E0", Offset = "0x1C411E0", VA = "0x181C423E0")]
|
||||
private void CloseWithError(string message)
|
||||
{
|
||||
Delegate @delegate;
|
||||
int num;
|
||||
do
|
||||
{
|
||||
HTTPRequest baseRequest = this.baseRequest;
|
||||
Exception ex = new Exception(message);
|
||||
baseRequest.<Exception>k__BackingField = ex;
|
||||
this.baseRequest.<State>k__BackingField = (HTTPRequestStates)((ulong)4L);
|
||||
this.closed = true;
|
||||
HTTPManager.Heartbeats.Unsubscribe(this);
|
||||
Action<bool> onApplicationForegroundStateChanged = HTTPUpdateDelegator.OnApplicationForegroundStateChanged;
|
||||
Action<bool> action = new Action(this.OnApplicationForegroundStateChanged);
|
||||
@delegate = Delegate.Remove(onApplicationForegroundStateChanged, action);
|
||||
num = 0;
|
||||
}
|
||||
while (@delegate != 0 && @delegate == 0);
|
||||
HTTPUpdateDelegator.OnApplicationForegroundStateChanged = num;
|
||||
bool flag = this.newFrameSignal.Set();
|
||||
this.CloseStream();
|
||||
}
|
||||
|
||||
// Token: 0x06009541 RID: 38209 RVA: 0x001EB8D4 File Offset: 0x001E9AD4
|
||||
[Token(Token = "0x6009541")]
|
||||
[Address(RVA = "0x1C422A0", Offset = "0x1C410A0", VA = "0x181C422A0")]
|
||||
private int CalculateLatency()
|
||||
{
|
||||
CircularBuffer<int> circularBuffer = this.rtts;
|
||||
int num = 0;
|
||||
int num2 = circularBuffer[num];
|
||||
num += num2;
|
||||
num++;
|
||||
CircularBuffer<int> circularBuffer2 = this.rtts;
|
||||
return num;
|
||||
}
|
||||
|
||||
// Token: 0x040065B0 RID: 26032
|
||||
[Token(Token = "0x40065B0")]
|
||||
public static int RTTBufferCapacity;
|
||||
|
||||
// Token: 0x040065B2 RID: 26034
|
||||
[FieldOffset(Offset = "0xE0")]
|
||||
[Token(Token = "0x40065B2")]
|
||||
public Action<WebSocketResponse, string> OnText;
|
||||
|
||||
// Token: 0x040065B3 RID: 26035
|
||||
[FieldOffset(Offset = "0xE8")]
|
||||
[Token(Token = "0x40065B3")]
|
||||
public Action<WebSocketResponse, byte[]> OnBinary;
|
||||
|
||||
// Token: 0x040065B4 RID: 26036
|
||||
[FieldOffset(Offset = "0xF0")]
|
||||
[Token(Token = "0x40065B4")]
|
||||
public Action<WebSocketResponse, WebSocketFrameReader> OnIncompleteFrame;
|
||||
|
||||
// Token: 0x040065B5 RID: 26037
|
||||
[FieldOffset(Offset = "0xF8")]
|
||||
[Token(Token = "0x40065B5")]
|
||||
public Action<WebSocketResponse, ushort, string> OnClosed;
|
||||
|
||||
// Token: 0x040065B8 RID: 26040
|
||||
[FieldOffset(Offset = "0x10C")]
|
||||
[Token(Token = "0x40065B8")]
|
||||
private int _bufferedAmount;
|
||||
|
||||
// Token: 0x040065BA RID: 26042
|
||||
[FieldOffset(Offset = "0x118")]
|
||||
[Token(Token = "0x40065BA")]
|
||||
private List<WebSocketFrameReader> IncompleteFrames;
|
||||
|
||||
// Token: 0x040065BB RID: 26043
|
||||
[FieldOffset(Offset = "0x120")]
|
||||
[Token(Token = "0x40065BB")]
|
||||
private List<WebSocketFrameReader> CompletedFrames;
|
||||
|
||||
// Token: 0x040065BC RID: 26044
|
||||
[FieldOffset(Offset = "0x128")]
|
||||
[Token(Token = "0x40065BC")]
|
||||
private List<WebSocketFrameReader> frameCache;
|
||||
|
||||
// Token: 0x040065BD RID: 26045
|
||||
[FieldOffset(Offset = "0x130")]
|
||||
[Token(Token = "0x40065BD")]
|
||||
private WebSocketFrameReader CloseFrame;
|
||||
|
||||
// Token: 0x040065BE RID: 26046
|
||||
[FieldOffset(Offset = "0x150")]
|
||||
[Token(Token = "0x40065BE")]
|
||||
private object FrameLock;
|
||||
|
||||
// Token: 0x040065BF RID: 26047
|
||||
[FieldOffset(Offset = "0x158")]
|
||||
[Token(Token = "0x40065BF")]
|
||||
private object SendLock;
|
||||
|
||||
// Token: 0x040065C0 RID: 26048
|
||||
[FieldOffset(Offset = "0x160")]
|
||||
[Token(Token = "0x40065C0")]
|
||||
private List<WebSocketFrame> unsentFrames;
|
||||
|
||||
// Token: 0x040065C1 RID: 26049
|
||||
[FieldOffset(Offset = "0x168")]
|
||||
[Token(Token = "0x40065C1")]
|
||||
private AutoResetEvent newFrameSignal;
|
||||
|
||||
// Token: 0x040065C2 RID: 26050
|
||||
[FieldOffset(Offset = "0x170")]
|
||||
[Token(Token = "0x40065C2")]
|
||||
private bool sendThreadCreated;
|
||||
|
||||
// Token: 0x040065C3 RID: 26051
|
||||
[FieldOffset(Offset = "0x171")]
|
||||
[Token(Token = "0x40065C3")]
|
||||
private bool closeSent;
|
||||
|
||||
// Token: 0x040065C4 RID: 26052
|
||||
[FieldOffset(Offset = "0x172")]
|
||||
[Token(Token = "0x40065C4")]
|
||||
private bool closed;
|
||||
|
||||
// Token: 0x040065C5 RID: 26053
|
||||
[FieldOffset(Offset = "0x178")]
|
||||
[Token(Token = "0x40065C5")]
|
||||
private DateTime lastPing;
|
||||
|
||||
// Token: 0x040065C6 RID: 26054
|
||||
[FieldOffset(Offset = "0x180")]
|
||||
[Token(Token = "0x40065C6")]
|
||||
private DateTime lastMessage;
|
||||
|
||||
// Token: 0x040065C7 RID: 26055
|
||||
[FieldOffset(Offset = "0x188")]
|
||||
[Token(Token = "0x40065C7")]
|
||||
private CircularBuffer<int> rtts;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user