a
This commit is contained in:
@@ -0,0 +1,781 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using Cpp2IlInjected;
|
||||
|
||||
namespace BestHTTP.PlatformSupport.TcpClient.General
|
||||
{
|
||||
// Token: 0x02001F74 RID: 8052
|
||||
[Token(Token = "0x2001F74")]
|
||||
public class TcpClient : IDisposable
|
||||
{
|
||||
// Token: 0x0600CBB7 RID: 52151 RVA: 0x002EADE0 File Offset: 0x002E8FE0
|
||||
[Token(Token = "0x600CBB7")]
|
||||
[Address(RVA = "0x26558B0", Offset = "0x26546B0", VA = "0x1826558B0")]
|
||||
private void Init(AddressFamily family)
|
||||
{
|
||||
Socket socket = this.client;
|
||||
this.active = false;
|
||||
if (socket != 0)
|
||||
{
|
||||
socket.Close();
|
||||
this.client = (ulong)0L;
|
||||
}
|
||||
Socket socket2;
|
||||
this.client = socket2;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBB8 RID: 52152 RVA: 0x002EAE18 File Offset: 0x002E9018
|
||||
[Token(Token = "0x600CBB8")]
|
||||
[Address(RVA = "0x2655CE0", Offset = "0x2654AE0", VA = "0x182655CE0")]
|
||||
public TcpClient()
|
||||
{
|
||||
this.Init(AddressFamily.InterNetwork);
|
||||
TimeSpan timeSpan;
|
||||
this.ConnectTimeout = timeSpan;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBB9 RID: 52153 RVA: 0x002EAE3C File Offset: 0x002E903C
|
||||
[Token(Token = "0x600CBB9")]
|
||||
[Address(RVA = "0x2655C20", Offset = "0x2654A20", VA = "0x182655C20")]
|
||||
public TcpClient(AddressFamily family)
|
||||
{
|
||||
/*
|
||||
An exception occurred when decompiling this method (0600CBB9)
|
||||
|
||||
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.PlatformSupport.TcpClient.General.TcpClient::.ctor(System.Net.Sockets.AddressFamily)
|
||||
|
||||
---> System.Exception: Basic block has to end with unconditional control flow.
|
||||
{
|
||||
IL_19:
|
||||
stloc:ArgumentException(var_2_28, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("Family must be InterNetwork or InterNetworkV6"), ldstr:string("family")))
|
||||
}
|
||||
|
||||
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.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
|
||||
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
|
||||
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1846
|
||||
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 1660
|
||||
*/;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBBA RID: 52154 RVA: 0x002EAE74 File Offset: 0x002E9074
|
||||
[Token(Token = "0x600CBBA")]
|
||||
[Address(RVA = "0x2655D60", Offset = "0x2654B60", VA = "0x182655D60")]
|
||||
public TcpClient(IPEndPoint localEP)
|
||||
{
|
||||
string text = localEP.ToString();
|
||||
TimeSpan timeSpan;
|
||||
this.ConnectTimeout = timeSpan;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBBB RID: 52155 RVA: 0x002EAE9C File Offset: 0x002E909C
|
||||
[Token(Token = "0x600CBBB")]
|
||||
[Address(RVA = "0x2655E00", Offset = "0x2654C00", VA = "0x182655E00")]
|
||||
public TcpClient(string hostname, int port)
|
||||
{
|
||||
TimeSpan timeSpan;
|
||||
this.ConnectTimeout = timeSpan;
|
||||
this.Connect(hostname, port);
|
||||
}
|
||||
|
||||
// Token: 0x1700205B RID: 8283
|
||||
// (get) Token: 0x0600CBBC RID: 52156 RVA: 0x002EAEC0 File Offset: 0x002E90C0
|
||||
// (set) Token: 0x0600CBBD RID: 52157 RVA: 0x002EAED4 File Offset: 0x002E90D4
|
||||
[Token(Token = "0x1700205B")]
|
||||
protected bool Active
|
||||
{
|
||||
[Token(Token = "0x600CBBC")]
|
||||
[Address(RVA = "0x42C2C0", Offset = "0x42B0C0", VA = "0x18042C2C0")]
|
||||
get
|
||||
{
|
||||
return this.active;
|
||||
}
|
||||
[Token(Token = "0x600CBBD")]
|
||||
[Address(RVA = "0x43DE90", Offset = "0x43CC90", VA = "0x18043DE90")]
|
||||
set
|
||||
{
|
||||
this.active = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x1700205C RID: 8284
|
||||
// (get) Token: 0x0600CBBE RID: 52158 RVA: 0x002EAEE8 File Offset: 0x002E90E8
|
||||
// (set) Token: 0x0600CBBF RID: 52159 RVA: 0x002EAEFC File Offset: 0x002E90FC
|
||||
[Token(Token = "0x1700205C")]
|
||||
public Socket Client
|
||||
{
|
||||
[Token(Token = "0x600CBBE")]
|
||||
[Address(RVA = "0x3F6400", Offset = "0x3F5200", VA = "0x1803F6400")]
|
||||
get
|
||||
{
|
||||
return this.client;
|
||||
}
|
||||
[Token(Token = "0x600CBBF")]
|
||||
[Address(RVA = "0x2655BA0", Offset = "0x26549A0", VA = "0x182655BA0")]
|
||||
set
|
||||
{
|
||||
this.client = value;
|
||||
this.stream = (ulong)0L;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x1700205D RID: 8285
|
||||
// (get) Token: 0x0600CBC0 RID: 52160 RVA: 0x002EAF1C File Offset: 0x002E911C
|
||||
[Token(Token = "0x1700205D")]
|
||||
public int Available
|
||||
{
|
||||
[Token(Token = "0x600CBC0")]
|
||||
[Address(RVA = "0x2655E90", Offset = "0x2654C90", VA = "0x182655E90")]
|
||||
get
|
||||
{
|
||||
return this.client.Available;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x1700205E RID: 8286
|
||||
// (get) Token: 0x0600CBC1 RID: 52161 RVA: 0x002EAF3C File Offset: 0x002E913C
|
||||
[Token(Token = "0x1700205E")]
|
||||
public bool Connected
|
||||
{
|
||||
[Token(Token = "0x600CBC1")]
|
||||
[Address(RVA = "0x2655EB0", Offset = "0x2654CB0", VA = "0x182655EB0")]
|
||||
get
|
||||
{
|
||||
return this.client.is_connected;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600CBC2 RID: 52162 RVA: 0x002EAF5C File Offset: 0x002E915C
|
||||
[Token(Token = "0x600CBC2")]
|
||||
[Address(RVA = "0x2655940", Offset = "0x2654740", VA = "0x182655940")]
|
||||
public bool IsConnected()
|
||||
{
|
||||
Socket socket = this.client;
|
||||
int num = 0;
|
||||
if (socket.Poll(1, (SelectMode)num))
|
||||
{
|
||||
int available = this.client.Available;
|
||||
}
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
// Token: 0x1700205F RID: 8287
|
||||
// (get) Token: 0x0600CBC3 RID: 52163 RVA: 0x002EAF98 File Offset: 0x002E9198
|
||||
// (set) Token: 0x0600CBC4 RID: 52164 RVA: 0x002EAFB8 File Offset: 0x002E91B8
|
||||
[Token(Token = "0x1700205F")]
|
||||
public bool ExclusiveAddressUse
|
||||
{
|
||||
[Token(Token = "0x600CBC3")]
|
||||
[Address(RVA = "0x2655ED0", Offset = "0x2654CD0", VA = "0x182655ED0")]
|
||||
get
|
||||
{
|
||||
return this.client.ExclusiveAddressUse;
|
||||
}
|
||||
[Token(Token = "0x600CBC4")]
|
||||
[Address(RVA = "0x2656270", Offset = "0x2655070", VA = "0x182656270")]
|
||||
set
|
||||
{
|
||||
this.client.ExclusiveAddressUse = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600CBC5 RID: 52165 RVA: 0x002EAFD8 File Offset: 0x002E91D8
|
||||
[Token(Token = "0x600CBC5")]
|
||||
[Address(RVA = "0x2655BA0", Offset = "0x26549A0", VA = "0x182655BA0")]
|
||||
internal void SetTcpClient(Socket s)
|
||||
{
|
||||
this.client = s;
|
||||
this.stream = (ulong)0L;
|
||||
}
|
||||
|
||||
// Token: 0x17002060 RID: 8288
|
||||
// (get) Token: 0x0600CBC6 RID: 52166 RVA: 0x002EAFF8 File Offset: 0x002E91F8
|
||||
// (set) Token: 0x0600CBC7 RID: 52167 RVA: 0x002EB038 File Offset: 0x002E9238
|
||||
[Token(Token = "0x17002060")]
|
||||
public LingerOption LingerState
|
||||
{
|
||||
[Token(Token = "0x600CBC6")]
|
||||
[Address(RVA = "0x2655EF0", Offset = "0x2654CF0", VA = "0x182655EF0")]
|
||||
get
|
||||
{
|
||||
while (this.values == (TcpClient.Properties)1)
|
||||
{
|
||||
object socketOption = this.client.GetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)128));
|
||||
if (socketOption == 0)
|
||||
{
|
||||
}
|
||||
if (socketOption != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return this.linger_state;
|
||||
}
|
||||
[Token(Token = "0x600CBC7")]
|
||||
[Address(RVA = "0x2656290", Offset = "0x2655090", VA = "0x182656290")]
|
||||
set
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if (socket.is_connected)
|
||||
{
|
||||
socket.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)128), value);
|
||||
return;
|
||||
}
|
||||
this.linger_state = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x17002061 RID: 8289
|
||||
// (get) Token: 0x0600CBC8 RID: 52168 RVA: 0x002EB078 File Offset: 0x002E9278
|
||||
// (set) Token: 0x0600CBC9 RID: 52169 RVA: 0x002EB0A4 File Offset: 0x002E92A4
|
||||
[Token(Token = "0x17002061")]
|
||||
public bool NoDelay
|
||||
{
|
||||
[Token(Token = "0x600CBC8")]
|
||||
[Address(RVA = "0x2655FA0", Offset = "0x2654DA0", VA = "0x182655FA0")]
|
||||
get
|
||||
{
|
||||
if (this.values == (TcpClient.Properties)2)
|
||||
{
|
||||
object socketOption = this.client.GetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.Debug);
|
||||
}
|
||||
return this.no_delay;
|
||||
}
|
||||
[Token(Token = "0x600CBC9")]
|
||||
[Address(RVA = "0x26562E0", Offset = "0x26550E0", VA = "0x1826562E0")]
|
||||
set
|
||||
{
|
||||
if (this.client.is_connected)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.no_delay = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x17002062 RID: 8290
|
||||
// (get) Token: 0x0600CBCA RID: 52170 RVA: 0x002EB0D0 File Offset: 0x002E92D0
|
||||
// (set) Token: 0x0600CBCB RID: 52171 RVA: 0x002EB108 File Offset: 0x002E9308
|
||||
[Token(Token = "0x17002062")]
|
||||
public int ReceiveBufferSize
|
||||
{
|
||||
[Token(Token = "0x600CBCA")]
|
||||
[Address(RVA = "0x2656030", Offset = "0x2654E30", VA = "0x182656030")]
|
||||
get
|
||||
{
|
||||
if (this.values == (TcpClient.Properties)4)
|
||||
{
|
||||
object socketOption = this.client.GetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4098));
|
||||
}
|
||||
return this.recv_buffer_size;
|
||||
}
|
||||
[Token(Token = "0x600CBCB")]
|
||||
[Address(RVA = "0x2656330", Offset = "0x2655130", VA = "0x182656330")]
|
||||
set
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if (socket.is_connected)
|
||||
{
|
||||
socket.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4098), value);
|
||||
return;
|
||||
}
|
||||
this.recv_buffer_size = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x17002063 RID: 8291
|
||||
// (get) Token: 0x0600CBCC RID: 52172 RVA: 0x002EB148 File Offset: 0x002E9348
|
||||
// (set) Token: 0x0600CBCD RID: 52173 RVA: 0x002EB180 File Offset: 0x002E9380
|
||||
[Token(Token = "0x17002063")]
|
||||
public int ReceiveTimeout
|
||||
{
|
||||
[Token(Token = "0x600CBCC")]
|
||||
[Address(RVA = "0x26560C0", Offset = "0x2654EC0", VA = "0x1826560C0")]
|
||||
get
|
||||
{
|
||||
if (this.values == (TcpClient.Properties)8)
|
||||
{
|
||||
object socketOption = this.client.GetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4102));
|
||||
}
|
||||
return this.recv_timeout;
|
||||
}
|
||||
[Token(Token = "0x600CBCD")]
|
||||
[Address(RVA = "0x2656380", Offset = "0x2655180", VA = "0x182656380")]
|
||||
set
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if (socket.is_connected)
|
||||
{
|
||||
socket.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4102), value);
|
||||
return;
|
||||
}
|
||||
this.recv_timeout = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x17002064 RID: 8292
|
||||
// (get) Token: 0x0600CBCE RID: 52174 RVA: 0x002EB1C0 File Offset: 0x002E93C0
|
||||
// (set) Token: 0x0600CBCF RID: 52175 RVA: 0x002EB1F8 File Offset: 0x002E93F8
|
||||
[Token(Token = "0x17002064")]
|
||||
public int SendBufferSize
|
||||
{
|
||||
[Token(Token = "0x600CBCE")]
|
||||
[Address(RVA = "0x2656150", Offset = "0x2654F50", VA = "0x182656150")]
|
||||
get
|
||||
{
|
||||
if (this.values == (TcpClient.Properties)16)
|
||||
{
|
||||
object socketOption = this.client.GetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4097));
|
||||
}
|
||||
return this.send_buffer_size;
|
||||
}
|
||||
[Token(Token = "0x600CBCF")]
|
||||
[Address(RVA = "0x26563D0", Offset = "0x26551D0", VA = "0x1826563D0")]
|
||||
set
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if (socket.is_connected)
|
||||
{
|
||||
socket.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4097), value);
|
||||
return;
|
||||
}
|
||||
this.send_buffer_size = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x17002065 RID: 8293
|
||||
// (get) Token: 0x0600CBD0 RID: 52176 RVA: 0x002EB238 File Offset: 0x002E9438
|
||||
// (set) Token: 0x0600CBD1 RID: 52177 RVA: 0x002EB270 File Offset: 0x002E9470
|
||||
[Token(Token = "0x17002065")]
|
||||
public int SendTimeout
|
||||
{
|
||||
[Token(Token = "0x600CBD0")]
|
||||
[Address(RVA = "0x26561E0", Offset = "0x2654FE0", VA = "0x1826561E0")]
|
||||
get
|
||||
{
|
||||
if (this.values == (TcpClient.Properties)32)
|
||||
{
|
||||
object socketOption = this.client.GetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4101));
|
||||
}
|
||||
return this.send_timeout;
|
||||
}
|
||||
[Token(Token = "0x600CBD1")]
|
||||
[Address(RVA = "0x2656420", Offset = "0x2655220", VA = "0x182656420")]
|
||||
set
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if (socket.is_connected)
|
||||
{
|
||||
socket.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4101), value);
|
||||
return;
|
||||
}
|
||||
this.send_timeout = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x17002066 RID: 8294
|
||||
// (get) Token: 0x0600CBD2 RID: 52178 RVA: 0x002EB2B0 File Offset: 0x002E94B0
|
||||
// (set) Token: 0x0600CBD3 RID: 52179 RVA: 0x002EB2C4 File Offset: 0x002E94C4
|
||||
[Token(Token = "0x17002066")]
|
||||
public TimeSpan ConnectTimeout
|
||||
{
|
||||
[Token(Token = "0x600CBD2")]
|
||||
[Address(RVA = "0x415290", Offset = "0x414090", VA = "0x180415290")]
|
||||
get;
|
||||
[Token(Token = "0x600CBD3")]
|
||||
[Address(RVA = "0x46AB00", Offset = "0x469900", VA = "0x18046AB00")]
|
||||
set;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBD4 RID: 52180 RVA: 0x0000220F File Offset: 0x0000040F
|
||||
[Token(Token = "0x600CBD4")]
|
||||
[Address(RVA = "0x2654E00", Offset = "0x2653C00", VA = "0x182654E00")]
|
||||
public void Close()
|
||||
{
|
||||
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
||||
}
|
||||
|
||||
// Token: 0x0600CBD5 RID: 52181 RVA: 0x002EB2D8 File Offset: 0x002E94D8
|
||||
[Token(Token = "0x600CBD5")]
|
||||
[Address(RVA = "0x2654E40", Offset = "0x2653C40", VA = "0x182654E40")]
|
||||
public void Connect(IPEndPoint remoteEP)
|
||||
{
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
TimeSpan timeSpan = this.<ConnectTimeout>k__BackingField;
|
||||
TimeSpan zero = TimeSpan.Zero;
|
||||
if (!(timeSpan > zero))
|
||||
{
|
||||
this.client.Connect(remoteEP);
|
||||
this.active = true;
|
||||
}
|
||||
int num2;
|
||||
ManualResetEvent manualResetEvent = new ManualResetEvent(num2 != 0);
|
||||
num2 = 0;
|
||||
ManualResetEvent mre = manualResetEvent;
|
||||
Socket socket = this.client;
|
||||
AsyncCallback asyncCallback = delegate(IAsyncResult res)
|
||||
{
|
||||
bool flag2 = mre.Set();
|
||||
};
|
||||
int num3 = 0;
|
||||
IAsyncResult asyncResult = socket.BeginConnect(remoteEP, asyncCallback, num3);
|
||||
ManualResetEvent mre2 = mre;
|
||||
TimeSpan timeSpan2 = this.<ConnectTimeout>k__BackingField;
|
||||
bool flag = mre2.WaitOne(timeSpan2);
|
||||
this.active = flag;
|
||||
if (!flag)
|
||||
{
|
||||
goto IL_B6;
|
||||
}
|
||||
this.client.EndConnect(asyncResult);
|
||||
this.CheckDisposed();
|
||||
}
|
||||
while (num != 0);
|
||||
return;
|
||||
IL_B6:
|
||||
throw new NullReferenceException();
|
||||
}
|
||||
|
||||
// Token: 0x0600CBD6 RID: 52182 RVA: 0x002EB3C4 File Offset: 0x002E95C4
|
||||
[Token(Token = "0x600CBD6")]
|
||||
[Address(RVA = "0x2655080", Offset = "0x2653E80", VA = "0x182655080")]
|
||||
public void Connect(IPAddress address, int port)
|
||||
{
|
||||
IPEndPoint ipendPoint = new IPEndPoint(address, port);
|
||||
this.Connect(ipendPoint);
|
||||
}
|
||||
|
||||
// Token: 0x0600CBD7 RID: 52183 RVA: 0x002EB3E0 File Offset: 0x002E95E0
|
||||
[Token(Token = "0x600CBD7")]
|
||||
[Address(RVA = "0x26559E0", Offset = "0x26547E0", VA = "0x1826559E0")]
|
||||
private void SetOptions()
|
||||
{
|
||||
TcpClient.Properties properties = this.values;
|
||||
int num = 0;
|
||||
this.values = (TcpClient.Properties)num;
|
||||
if (properties != (TcpClient.Properties)1)
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if ((socket.is_connected ? 1 : 0) != num)
|
||||
{
|
||||
LingerOption lingerOption = this.linger_state;
|
||||
socket.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)128), lingerOption);
|
||||
}
|
||||
this.values = (TcpClient.Properties)((ulong)1L);
|
||||
}
|
||||
if (properties != (TcpClient.Properties)2 && (this.client.is_connected ? 1 : 0) != num)
|
||||
{
|
||||
bool flag = (this.no_delay ? 1 : 0) != num;
|
||||
}
|
||||
if (properties != (TcpClient.Properties)4)
|
||||
{
|
||||
Socket socket2 = this.client;
|
||||
if ((socket2.is_connected ? 1 : 0) != num)
|
||||
{
|
||||
int num2 = this.recv_buffer_size;
|
||||
socket2.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4098), num2);
|
||||
}
|
||||
}
|
||||
if (properties != (TcpClient.Properties)8)
|
||||
{
|
||||
Socket socket3 = this.client;
|
||||
if ((socket3.is_connected ? 1 : 0) != num)
|
||||
{
|
||||
int num3 = this.recv_timeout;
|
||||
socket3.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4102), num3);
|
||||
}
|
||||
}
|
||||
if (properties != (TcpClient.Properties)16)
|
||||
{
|
||||
Socket socket4 = this.client;
|
||||
if ((socket4.is_connected ? 1 : 0) != num)
|
||||
{
|
||||
int num4 = this.send_buffer_size;
|
||||
socket4.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4097), num4);
|
||||
}
|
||||
}
|
||||
if (properties != (TcpClient.Properties)32)
|
||||
{
|
||||
Socket socket5 = this.client;
|
||||
int num5 = this.send_timeout;
|
||||
if ((socket5.is_connected ? 1 : 0) == num)
|
||||
{
|
||||
return;
|
||||
}
|
||||
socket5.SetSocketOption((SocketOptionLevel)((uint)65535), (SocketOptionName)((uint)4101), num5);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600CBD8 RID: 52184 RVA: 0x002EB530 File Offset: 0x002E9730
|
||||
[Token(Token = "0x600CBD8")]
|
||||
[Address(RVA = "0x2655100", Offset = "0x2653F00", VA = "0x182655100")]
|
||||
public void Connect(string hostname, int port)
|
||||
{
|
||||
/*
|
||||
An exception occurred when decompiling this method (0600CBD8)
|
||||
|
||||
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.PlatformSupport.TcpClient.General.TcpClient::Connect(System.String,System.Int32)
|
||||
|
||||
---> System.Exception: Basic block has to end with unconditional control flow.
|
||||
{
|
||||
IL_A5:
|
||||
stloc:TimeoutException(var_14_AF, newobj:TimeoutException(TimeoutException::.ctor, ldstr:string("DNS resolve timed out!")))
|
||||
}
|
||||
|
||||
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 1660
|
||||
*/;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBD9 RID: 52185 RVA: 0x002EB5F0 File Offset: 0x002E97F0
|
||||
[Token(Token = "0x600CBD9")]
|
||||
[Address(RVA = "0x26553A0", Offset = "0x26541A0", VA = "0x1826553A0")]
|
||||
public void Connect(IPAddress[] ipAddresses, int port)
|
||||
{
|
||||
/*
|
||||
An exception occurred when decompiling this method (0600CBD9)
|
||||
|
||||
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.PlatformSupport.TcpClient.General.TcpClient::Connect(System.Net.IPAddress[],System.Int32)
|
||||
|
||||
---> System.Exception: Basic block has to end with unconditional control flow.
|
||||
{
|
||||
IL_D8:
|
||||
stloc:ArgumentNullException(var_15_E2, newobj:ArgumentNullException(ArgumentNullException::.ctor, ldstr:string("ipAddresses")))
|
||||
}
|
||||
|
||||
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 1660
|
||||
*/;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBDA RID: 52186 RVA: 0x002EB6E0 File Offset: 0x002E98E0
|
||||
[Token(Token = "0x600CBDA")]
|
||||
[Address(RVA = "0x2655740", Offset = "0x2654540", VA = "0x182655740")]
|
||||
public void EndConnect(IAsyncResult asyncResult)
|
||||
{
|
||||
this.client.EndConnect(asyncResult);
|
||||
}
|
||||
|
||||
// Token: 0x0600CBDB RID: 52187 RVA: 0x002EB700 File Offset: 0x002E9900
|
||||
[Token(Token = "0x600CBDB")]
|
||||
[Address(RVA = "0x2654D10", Offset = "0x2653B10", VA = "0x182654D10")]
|
||||
public IAsyncResult BeginConnect(IPAddress address, int port, AsyncCallback requestCallback, object state)
|
||||
{
|
||||
Socket socket = this.client;
|
||||
IAsyncResult asyncResult;
|
||||
return asyncResult;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBDC RID: 52188 RVA: 0x002EB71C File Offset: 0x002E991C
|
||||
[Token(Token = "0x600CBDC")]
|
||||
[Address(RVA = "0x2654CE0", Offset = "0x2653AE0", VA = "0x182654CE0")]
|
||||
public IAsyncResult BeginConnect(IPAddress[] addresses, int port, AsyncCallback requestCallback, object state)
|
||||
{
|
||||
Socket socket = this.client;
|
||||
IAsyncResult asyncResult;
|
||||
return asyncResult;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBDD RID: 52189 RVA: 0x002EB738 File Offset: 0x002E9938
|
||||
[Token(Token = "0x600CBDD")]
|
||||
[Address(RVA = "0x2654D40", Offset = "0x2653B40", VA = "0x182654D40")]
|
||||
public IAsyncResult BeginConnect(string host, int port, AsyncCallback requestCallback, object state)
|
||||
{
|
||||
Socket socket = this.client;
|
||||
IAsyncResult asyncResult;
|
||||
return asyncResult;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBDE RID: 52190 RVA: 0x002EB754 File Offset: 0x002E9954
|
||||
[Token(Token = "0x600CBDE")]
|
||||
[Address(RVA = "0x2655BB0", Offset = "0x26549B0", VA = "0x182655BB0", Slot = "4")]
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
this.System.IDisposable.Dispose();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Token: 0x0600CBDF RID: 52191 RVA: 0x002EB770 File Offset: 0x002E9970
|
||||
[Token(Token = "0x600CBDF")]
|
||||
[Address(RVA = "0x26556E0", Offset = "0x26544E0", VA = "0x1826556E0", Slot = "5")]
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!this.disposed)
|
||||
{
|
||||
this.disposed = true;
|
||||
if (disposing)
|
||||
{
|
||||
NetworkStream networkStream = this.stream;
|
||||
this.stream = (ulong)0L;
|
||||
if (networkStream == 0)
|
||||
{
|
||||
Socket socket = this.client;
|
||||
if (socket != 0)
|
||||
{
|
||||
socket.Close();
|
||||
this.client = (ulong)0L;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int writeTimeout = networkStream.WriteTimeout;
|
||||
this.active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600CBE0 RID: 52192 RVA: 0x002EB7D0 File Offset: 0x002E99D0
|
||||
[Token(Token = "0x600CBE0")]
|
||||
[Address(RVA = "0x2655760", Offset = "0x2654560", VA = "0x182655760", Slot = "1")]
|
||||
protected override void Finalize()
|
||||
{
|
||||
int num;
|
||||
do
|
||||
{
|
||||
num = 0;
|
||||
this.System.IDisposable.Dispose();
|
||||
base..ctor();
|
||||
}
|
||||
while (num != 0);
|
||||
}
|
||||
|
||||
// Token: 0x0600CBE1 RID: 52193 RVA: 0x002EB7F0 File Offset: 0x002E99F0
|
||||
[Token(Token = "0x600CBE1")]
|
||||
[Address(RVA = "0x26557E0", Offset = "0x26545E0", VA = "0x1826557E0")]
|
||||
public Stream GetStream()
|
||||
{
|
||||
/*
|
||||
An exception occurred when decompiling this method (0600CBE1)
|
||||
|
||||
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.IO.Stream BestHTTP.PlatformSupport.TcpClient.General.TcpClient::GetStream()
|
||||
|
||||
---> System.Exception: Basic block has to end with unconditional control flow.
|
||||
{
|
||||
IL_1F:
|
||||
call:void(TcpClient::CheckDisposed, ldloc:TcpClient(this))
|
||||
brtrue(IL_00, cne:bool(ldloc:int32(var_0_01), ldc.i4:int32(0)))
|
||||
}
|
||||
|
||||
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.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
|
||||
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
|
||||
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1846
|
||||
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 1660
|
||||
*/;
|
||||
}
|
||||
|
||||
// Token: 0x0600CBE2 RID: 52194 RVA: 0x002EB828 File Offset: 0x002E9A28
|
||||
[Token(Token = "0x600CBE2")]
|
||||
[Address(RVA = "0x2654D70", Offset = "0x2653B70", VA = "0x182654D70")]
|
||||
private void CheckDisposed()
|
||||
{
|
||||
}
|
||||
|
||||
// Token: 0x040081F7 RID: 33271
|
||||
[FieldOffset(Offset = "0x10")]
|
||||
[Token(Token = "0x40081F7")]
|
||||
private NetworkStream stream;
|
||||
|
||||
// Token: 0x040081F8 RID: 33272
|
||||
[FieldOffset(Offset = "0x18")]
|
||||
[Token(Token = "0x40081F8")]
|
||||
private bool active;
|
||||
|
||||
// Token: 0x040081F9 RID: 33273
|
||||
[FieldOffset(Offset = "0x20")]
|
||||
[Token(Token = "0x40081F9")]
|
||||
private Socket client;
|
||||
|
||||
// Token: 0x040081FA RID: 33274
|
||||
[FieldOffset(Offset = "0x28")]
|
||||
[Token(Token = "0x40081FA")]
|
||||
private bool disposed;
|
||||
|
||||
// Token: 0x040081FB RID: 33275
|
||||
[FieldOffset(Offset = "0x2C")]
|
||||
[Token(Token = "0x40081FB")]
|
||||
private TcpClient.Properties values;
|
||||
|
||||
// Token: 0x040081FC RID: 33276
|
||||
[FieldOffset(Offset = "0x30")]
|
||||
[Token(Token = "0x40081FC")]
|
||||
private int recv_timeout;
|
||||
|
||||
// Token: 0x040081FD RID: 33277
|
||||
[FieldOffset(Offset = "0x34")]
|
||||
[Token(Token = "0x40081FD")]
|
||||
private int send_timeout;
|
||||
|
||||
// Token: 0x040081FE RID: 33278
|
||||
[FieldOffset(Offset = "0x38")]
|
||||
[Token(Token = "0x40081FE")]
|
||||
private int recv_buffer_size;
|
||||
|
||||
// Token: 0x040081FF RID: 33279
|
||||
[FieldOffset(Offset = "0x3C")]
|
||||
[Token(Token = "0x40081FF")]
|
||||
private int send_buffer_size;
|
||||
|
||||
// Token: 0x04008200 RID: 33280
|
||||
[FieldOffset(Offset = "0x40")]
|
||||
[Token(Token = "0x4008200")]
|
||||
private LingerOption linger_state;
|
||||
|
||||
// Token: 0x04008201 RID: 33281
|
||||
[FieldOffset(Offset = "0x48")]
|
||||
[Token(Token = "0x4008201")]
|
||||
private bool no_delay;
|
||||
|
||||
// Token: 0x02001F75 RID: 8053
|
||||
[Token(Token = "0x2001F75")]
|
||||
private enum Properties : uint
|
||||
{
|
||||
// Token: 0x04008204 RID: 33284
|
||||
[Token(Token = "0x4008204")]
|
||||
LingerState = 1U,
|
||||
// Token: 0x04008205 RID: 33285
|
||||
[Token(Token = "0x4008205")]
|
||||
NoDelay,
|
||||
// Token: 0x04008206 RID: 33286
|
||||
[Token(Token = "0x4008206")]
|
||||
ReceiveBufferSize = 4U,
|
||||
// Token: 0x04008207 RID: 33287
|
||||
[Token(Token = "0x4008207")]
|
||||
ReceiveTimeout = 8U,
|
||||
// Token: 0x04008208 RID: 33288
|
||||
[Token(Token = "0x4008208")]
|
||||
SendBufferSize = 16U,
|
||||
// Token: 0x04008209 RID: 33289
|
||||
[Token(Token = "0x4008209")]
|
||||
SendTimeout = 32U
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user