Files
2026-04-10 22:50:51 +02:00

883 lines
35 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using BestHTTP.Authentication;
using BestHTTP.Caching;
using BestHTTP.Cookies;
using BestHTTP.Extensions;
using BestHTTP.Logger;
using BestHTTP.PlatformSupport.TcpClient.General;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Tls;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
using Cpp2IlInjected;
using Org.BouncyCastle.Crypto.Tls;
namespace BestHTTP
{
// Token: 0x02001890 RID: 6288
[Token(Token = "0x2001890")]
internal sealed class HTTPConnection : ConnectionBase
{
// Token: 0x17001741 RID: 5953
// (get) Token: 0x0600931E RID: 37662 RVA: 0x001E21C0 File Offset: 0x001E03C0
[Token(Token = "0x17001741")]
public override bool IsRemovable
{
[Token(Token = "0x600931E")]
[Address(RVA = "0x1717F00", Offset = "0x1716D00", VA = "0x181717F00", Slot = "5")]
get
{
if (!base.IsRemovable)
{
if (base.IsFree && this.KeepAlive != (ulong)0L)
{
DateTime utcNow = DateTime.UtcNow;
DateTime lastProcessTime = this.LastProcessTime;
TimeSpan timeSpan = utcNow - lastProcessTime;
TimeSpan <TimeOut>k__BackingField = this.KeepAlive.<TimeOut>k__BackingField;
if (!(timeSpan >= <TimeOut>k__BackingField))
{
}
}
}
return true;
}
}
// Token: 0x0600931F RID: 37663 RVA: 0x001E2224 File Offset: 0x001E0424
[Token(Token = "0x600931F")]
[Address(RVA = "0x1714D10", Offset = "0x1713B10", VA = "0x181714D10")]
internal HTTPConnection(string serverAddress)
: base(serverAddress)
{
}
// Token: 0x06009320 RID: 37664 RVA: 0x001E2238 File Offset: 0x001E0438
[Token(Token = "0x6009320")]
[Address(RVA = "0x17166A0", Offset = "0x17154A0", VA = "0x1817166A0", Slot = "7")]
protected override void ThreadFunc(object param)
{
for (;;)
{
int num = 0;
if (!this.TryLoadAllFromCache())
{
TcpClient client = this.Client;
if (client != 0 && !client.IsConnected())
{
this.Close();
}
if (num == 1)
{
this.Close();
Thread.Sleep(100);
}
HTTPRequest <CurrentRequest>k__BackingField = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField.<IsRedirected>k__BackingField)
{
}
Uri <Uri>k__BackingField = <CurrentRequest>k__BackingField.<Uri>k__BackingField;
this.<LastProcessedUri>k__BackingField = <Uri>k__BackingField;
this.Connect();
uint num2;
num2 += (uint)1;
if (num != 0)
{
goto IL_721;
}
if (num2 != (uint)(-1))
{
}
HTTPRequest <CurrentRequest>k__BackingField2 = this.<CurrentRequest>k__BackingField;
if (!<CurrentRequest>k__BackingField2.disableCache)
{
HTTPCacheService.SetHeaders(<CurrentRequest>k__BackingField2);
}
TcpClient client2 = this.Client;
bool <TryToMinimizeTCPLatency>k__BackingField = this.<CurrentRequest>k__BackingField.<TryToMinimizeTCPLatency>k__BackingField;
client2.NoDelay = <TryToMinimizeTCPLatency>k__BackingField;
HTTPRequest <CurrentRequest>k__BackingField3 = this.<CurrentRequest>k__BackingField;
Stream stream = this.Stream;
<CurrentRequest>k__BackingField3.SendOutTo(stream);
num2 += (uint)1;
if (num != 0)
{
goto IL_727;
}
if (num2 != (uint)(-1))
{
}
bool flag = this.Receive();
num2 += (uint)1;
if (num != 0)
{
goto IL_727;
}
if (num2 != (uint)(-1))
{
}
HTTPConnectionStates <State>k__BackingField = this.<State>k__BackingField;
if (<State>k__BackingField == HTTPConnectionStates.TimedOut || <State>k__BackingField == HTTPConnectionStates.AbortRequested)
{
goto IL_88D;
}
if (flag || this.<CurrentRequest>k__BackingField.<DisableRetry>k__BackingField == flag)
{
}
HTTPRequest <CurrentRequest>k__BackingField4 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField4.<Response>k__BackingField != (ulong)0L)
{
int num3;
if (<CurrentRequest>k__BackingField4.<IsCookiesEnabled>k__BackingField)
{
CookieJar.Set(this.<CurrentRequest>k__BackingField.<Response>k__BackingField);
CookieJar.Persist();
num2 += (uint)1;
num3 = 0;
if (num != 0)
{
goto IL_733;
}
if (num2 != (uint)(-1))
{
}
}
HTTPRequest <CurrentRequest>k__BackingField5 = this.<CurrentRequest>k__BackingField;
int <StatusCode>k__BackingField = <CurrentRequest>k__BackingField5.<Response>k__BackingField.<StatusCode>k__BackingField;
if (<StatusCode>k__BackingField <= 308)
{
goto IL_319;
}
if (<StatusCode>k__BackingField == 401)
{
string text = DigestStore.FindBest(<CurrentRequest>k__BackingField5.<Response>k__BackingField.GetHeaderValues("www-authenticate"));
if (!string.IsNullOrEmpty(text))
{
HTTPRequest <CurrentRequest>k__BackingField6 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField6.<IsRedirected>k__BackingField)
{
}
Digest orCreate = DigestStore.GetOrCreate(<CurrentRequest>k__BackingField6.<Uri>k__BackingField);
orCreate.ParseChallange(text);
HTTPRequest <CurrentRequest>k__BackingField7 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField7.<Credentials>k__BackingField != (ulong)0L)
{
if (<CurrentRequest>k__BackingField7.<IsRedirected>k__BackingField)
{
}
Uri <Uri>k__BackingField2 = <CurrentRequest>k__BackingField7.<Uri>k__BackingField;
if (!orCreate.IsUriProtected(<Uri>k__BackingField2) || !this.<CurrentRequest>k__BackingField.HasHeader("Authorization") || orCreate.<Stale>k__BackingField)
{
}
}
}
HTTPRequest <CurrentRequest>k__BackingField8 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField8.useStreaming || <CurrentRequest>k__BackingField8.disableCache || <CurrentRequest>k__BackingField8.<Response>k__BackingField == (ulong)0L || !HTTPCacheService.IsSupported)
{
goto IL_4C9;
}
if (!this.<CurrentRequest>k__BackingField.<IsRedirected>k__BackingField)
{
goto IL_45E;
}
}
while ("Authorization" != (ulong)407L)
{
}
List<string> list;
string text2 = DigestStore.FindBest(list);
if (string.IsNullOrEmpty(text2))
{
continue;
}
Digest orCreate2 = DigestStore.GetOrCreate(this.<CurrentRequest>k__BackingField.<Proxy>k__BackingField.<Address>k__BackingField);
orCreate2.ParseChallange(text2);
Proxy <Proxy>k__BackingField = this.<CurrentRequest>k__BackingField.<Proxy>k__BackingField;
while (<Proxy>k__BackingField.<Credentials>k__BackingField == (ulong)0L)
{
}
Uri <Address>k__BackingField = <Proxy>k__BackingField.<Address>k__BackingField;
if (!orCreate2.IsUriProtected(<Address>k__BackingField))
{
continue;
}
HTTPRequest <CurrentRequest>k__BackingField9 = this.<CurrentRequest>k__BackingField;
bool flag2 = <CurrentRequest>k__BackingField9.HasHeader("Proxy-Authorization");
if (flag2)
{
while (!orCreate2.<Stale>k__BackingField)
{
}
goto IL_319;
}
goto IL_319;
IL_4C9:
HTTPResponse <Response>k__BackingField = this.<CurrentRequest>k__BackingField.<Response>k__BackingField;
if (<Response>k__BackingField != 0 && <Response>k__BackingField.<IsClosedManually>k__BackingField)
{
goto IL_51C;
}
if (<Response>k__BackingField == 0)
{
}
uint num4;
if (num4 != (uint)0)
{
goto IL_522;
}
List<string> list2;
if (num4 != (uint)0 && list2 != 0)
{
KeepAliveHeader keepAliveHeader;
if (this.KeepAlive == 0)
{
keepAliveHeader = new KeepAliveHeader();
this.KeepAlive = keepAliveHeader;
}
keepAliveHeader.Parse(list2);
goto IL_51C;
}
goto IL_51C;
IL_45E:
HTTPRequest <CurrentRequest>k__BackingField10;
Uri <Uri>k__BackingField3 = <CurrentRequest>k__BackingField10.<Uri>k__BackingField;
HTTPMethods <MethodType>k__BackingField = <CurrentRequest>k__BackingField10.<MethodType>k__BackingField;
HTTPResponse <Response>k__BackingField2 = <CurrentRequest>k__BackingField10.<Response>k__BackingField;
if (HTTPCacheService.IsCacheble(<Uri>k__BackingField3, <MethodType>k__BackingField, <Response>k__BackingField2))
{
HTTPRequest <CurrentRequest>k__BackingField11 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField11.<IsRedirected>k__BackingField)
{
}
Uri <Uri>k__BackingField4 = <CurrentRequest>k__BackingField11.<Uri>k__BackingField;
HTTPMethods <MethodType>k__BackingField2 = <CurrentRequest>k__BackingField11.<MethodType>k__BackingField;
HTTPResponse <Response>k__BackingField3 = <CurrentRequest>k__BackingField11.<Response>k__BackingField;
HTTPCacheFileInfo httpcacheFileInfo = HTTPCacheService.Store(<Uri>k__BackingField4, <MethodType>k__BackingField2, <Response>k__BackingField3);
HTTPCacheService.SaveLibrary();
goto IL_4C9;
}
goto IL_4C9;
IL_319:
if (flag2 > true)
{
while (flag2 > true)
{
}
}
int i = <CurrentRequest>k__BackingField9.<RedirectCount>k__BackingField;
while (i >= <CurrentRequest>k__BackingField9.<MaxRedirects>k__BackingField)
{
}
i++;
<CurrentRequest>k__BackingField9.<RedirectCount>k__BackingField = i;
string firstHeaderValue = this.<CurrentRequest>k__BackingField.<Response>k__BackingField.GetFirstHeaderValue("location");
if (!string.IsNullOrEmpty(firstHeaderValue))
{
Uri redirectUri = this.GetRedirectUri(firstHeaderValue);
if (HTTPManager.Logger == 0)
{
ILogger logger = HTTPManager.Logger;
HTTPRequest <CurrentRequest>k__BackingField12 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField12.<IsRedirected>k__BackingField)
{
}
int hashCode = <CurrentRequest>k__BackingField12.<Uri>k__BackingField.GetHashCode();
string text3 = string.Format("{0} - Redirected to Location: '{1}' redirectUri: '{1}'", hashCode, firstHeaderValue, redirectUri);
}
HTTPRequest <CurrentRequest>k__BackingField13 = this.<CurrentRequest>k__BackingField;
OnBeforeRedirectionDelegate onBeforeRedirection = <CurrentRequest>k__BackingField13.onBeforeRedirection;
if (onBeforeRedirection != 0)
{
HTTPResponse <Response>k__BackingField4 = <CurrentRequest>k__BackingField13.<Response>k__BackingField;
if (!onBeforeRedirection(<CurrentRequest>k__BackingField13, <Response>k__BackingField4, redirectUri))
{
ILogger logger2 = HTTPManager.Logger;
}
}
Dictionary<string, List<string>> <Headers>k__BackingField = this.<CurrentRequest>k__BackingField.<Headers>k__BackingField;
if (<Headers>k__BackingField != 0)
{
bool flag3 = <Headers>k__BackingField.Remove("Host");
}
HTTPRequest <CurrentRequest>k__BackingField14 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField14.<IsRedirected>k__BackingField)
{
}
int hashCode2 = <CurrentRequest>k__BackingField14.<Uri>k__BackingField.GetHashCode();
this.<CurrentRequest>k__BackingField.<RedirectUri>k__BackingField = redirectUri;
this.<CurrentRequest>k__BackingField.<Response>k__BackingField = num3;
<CurrentRequest>k__BackingField10 = this.<CurrentRequest>k__BackingField;
<CurrentRequest>k__BackingField10.<IsRedirected>k__BackingField = true;
goto IL_45E;
}
goto IL_79F;
}
IL_51C:
uint num5;
while (num5 != (uint)0)
{
}
IL_522:
this.Close();
this.Close();
HTTPConnectionStates <State>k__BackingField2 = this.<State>k__BackingField;
if (<State>k__BackingField2 == HTTPConnectionStates.TimedOut || <State>k__BackingField2 == HTTPConnectionStates.AbortRequested || this.<CurrentRequest>k__BackingField.<DisableRetry>k__BackingField)
{
goto IL_8AB;
}
}
HTTPRequest <CurrentRequest>k__BackingField15 = this.<CurrentRequest>k__BackingField;
int num6 = 0;
<CurrentRequest>k__BackingField15.<Response>k__BackingField = num6;
this.<CurrentRequest>k__BackingField.<Exception>k__BackingField = <CurrentRequest>k__BackingField15;
this.<CurrentRequest>k__BackingField.<State>k__BackingField = (HTTPRequestStates)((ulong)6L);
this.Close();
HTTPRequest <CurrentRequest>k__BackingField16 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField16 == 0)
{
goto IL_609;
}
Uri <Uri>k__BackingField5;
if (<CurrentRequest>k__BackingField16.useStreaming)
{
if (<CurrentRequest>k__BackingField16.<IsRedirected>k__BackingField)
{
}
<Uri>k__BackingField5 = <CurrentRequest>k__BackingField16.<Uri>k__BackingField;
ulong num7;
bool flag4 = HTTPCacheService.DeleteEntity(<Uri>k__BackingField5, num7 != 0UL);
}
HTTPRequest <CurrentRequest>k__BackingField17 = this.<CurrentRequest>k__BackingField;
int num8 = 0;
<CurrentRequest>k__BackingField17.<Response>k__BackingField = num8;
HTTPConnectionStates <State>k__BackingField3 = this.<State>k__BackingField;
if (<Uri>k__BackingField5 != 0)
{
if (<Uri>k__BackingField5 == 0)
{
goto IL_612;
}
if (<Uri>k__BackingField5 != (ulong)1L)
{
this.<CurrentRequest>k__BackingField.<Exception>k__BackingField = <State>k__BackingField3;
this.<CurrentRequest>k__BackingField.<State>k__BackingField = (HTTPRequestStates)((ulong)4L);
goto IL_609;
}
}
IL_620:
uint num9;
this.<CurrentRequest>k__BackingField.<State>k__BackingField = (HTTPRequestStates)num9;
object locker = HTTPManager.Locker;
int num10;
Monitor.Enter(locker, num10);
HTTPRequest <CurrentRequest>k__BackingField18 = this.<CurrentRequest>k__BackingField;
HTTPResponse <Response>k__BackingField5;
if (<CurrentRequest>k__BackingField18 != 0)
{
<Response>k__BackingField5 = <CurrentRequest>k__BackingField18.<Response>k__BackingField;
if (<Response>k__BackingField5 != 0 && <Response>k__BackingField5.<IsUpgraded>k__BackingField)
{
this.<State>k__BackingField = (HTTPConnectionStates)((ulong)3L);
}
}
uint num11;
<CurrentRequest>k__BackingField18.<MethodType>k__BackingField = (HTTPMethods)num11;
byte[] <RawData>k__BackingField = <CurrentRequest>k__BackingField18.<RawData>k__BackingField;
Exception ex;
if ("{il2cpp array field local192->}" == (ulong)2L && <Response>k__BackingField5 == (ulong)4294967291L && "{il2cpp array field local192->}" == (ulong)0L)
{
HTTPRequestStates httprequestStates;
int hashCode3 = httprequestStates.GetHashCode();
HTTPRequestStates httprequestStates2 = httprequestStates;
ex = new Exception(string.Format("Remote server closed the connection before sending response header! Previous request state: {0}. Connection state: {1}", hashCode3, httprequestStates2));
<RawData>k__BackingField[12] = ex;
this.<CurrentRequest>k__BackingField.<State>k__BackingField = (HTTPRequestStates)((ulong)4L);
}
if (this.<CurrentRequest>k__BackingField.<State>k__BackingField == HTTPRequestStates.ConnectionTimedOut)
{
this.<State>k__BackingField = (HTTPConnectionStates)num11;
}
DateTime utcNow = DateTime.UtcNow;
this.LastProcessTime = utcNow;
base.RecycleNow();
Monitor.Exit(locker);
if (ex == 0 && num11 == (uint)0)
{
break;
}
continue;
IL_612:
this.<CurrentRequest>k__BackingField.<State>k__BackingField = (HTTPRequestStates)((ulong)7L);
goto IL_620;
IL_609:
num10 = 0;
this.Close();
goto IL_612;
}
return;
IL_721:
throw new NullReferenceException();
IL_727:
throw new NullReferenceException();
IL_733:
throw new NullReferenceException();
IL_79F:
throw new NullReferenceException();
IL_88D:
Exception ex2 = new Exception("AbortRequested");
throw new NullReferenceException();
IL_8AB:
Exception ex3 = new Exception("AbortRequested");
throw new NullReferenceException();
}
// Token: 0x06009321 RID: 37665 RVA: 0x001E2B4C File Offset: 0x001E0D4C
[Token(Token = "0x6009321")]
[Address(RVA = "0x1714EB0", Offset = "0x1713CB0", VA = "0x181714EB0")]
private void Connect()
{
int num;
TcpClient client5;
TlsClientProtocol tlsClientProtocol;
List<string> list;
Uri <Uri>k__BackingField2;
for (;;)
{
HTTPRequest <CurrentRequest>k__BackingField = this.<CurrentRequest>k__BackingField;
num = 0;
if (<CurrentRequest>k__BackingField.<Proxy>k__BackingField != 0)
{
}
if ((<CurrentRequest>k__BackingField.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
Uri <Uri>k__BackingField = <CurrentRequest>k__BackingField.<Uri>k__BackingField;
TcpClient tcpClient;
if (this.Client == 0)
{
tcpClient = new TcpClient();
this.Client = tcpClient;
}
if (tcpClient.Connected)
{
if (HTTPManager.Logger > (ulong)1L)
{
goto IL_239;
}
ILogger logger = HTTPManager.Logger;
string host = <Uri>k__BackingField.Host;
int port = <Uri>k__BackingField.Port;
}
HTTPRequest <CurrentRequest>k__BackingField2 = this.<CurrentRequest>k__BackingField;
TcpClient client = this.Client;
TimeSpan <ConnectTimeout>k__BackingField = <CurrentRequest>k__BackingField2.<ConnectTimeout>k__BackingField;
client.<ConnectTimeout>k__BackingField = <ConnectTimeout>k__BackingField;
if (HTTPManager.Logger == 0)
{
ILogger logger2 = HTTPManager.Logger;
HTTPRequest <CurrentRequest>k__BackingField3 = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField3.<IsRedirected>k__BackingField ? 1 : 0) == num)
{
continue;
}
int hashCode = <CurrentRequest>k__BackingField3.<RedirectUri>k__BackingField.m_String.GetHashCode();
string host2 = <Uri>k__BackingField.Host;
int port2 = <Uri>k__BackingField.Port;
string text2;
string text = string.Format("'{0}' - Connecting to {1}:{2}", hashCode, host2, text2);
}
TcpClient client2 = this.Client;
int sendBufferSize = HTTPManager.SendBufferSize;
client2.SendBufferSize = sendBufferSize;
TcpClient client3 = this.Client;
int receiveBufferSize = HTTPManager.ReceiveBufferSize;
client3.ReceiveBufferSize = receiveBufferSize;
if (HTTPManager.Logger == 0)
{
ILogger logger3 = HTTPManager.Logger;
object[] array = new object[4];
HTTPRequest <CurrentRequest>k__BackingField4 = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField4.<IsRedirected>k__BackingField ? 1 : 0) == num)
{
continue;
}
int hashCode2 = <CurrentRequest>k__BackingField4.<RedirectUri>k__BackingField.m_String.GetHashCode();
if (hashCode2 != 0)
{
}
array[0] = hashCode2;
int sendBufferSize2 = this.Client.SendBufferSize;
string text3;
if (text3 != 0)
{
}
array[1] = text3;
int receiveBufferSize2 = this.Client.ReceiveBufferSize;
string text4;
if (text4 != 0)
{
}
array[2] = text4;
bool is_blocking = this.Client.client.is_blocking;
string text5;
if (text5 != 0)
{
}
array[3] = text5;
string text6 = string.Format("'{0}' - Buffer sizes - Send: {1} Receive: {2} Blocking: {3}", array);
}
TcpClient client4 = this.Client;
string host3 = <Uri>k__BackingField.Host;
int port3 = <Uri>k__BackingField.Port;
client4.Connect(host3, port3);
if (HTTPManager.Logger <= (ulong)1L)
{
ILogger logger4 = HTTPManager.Logger;
string host4 = <Uri>k__BackingField.Host;
int port4 = <Uri>k__BackingField.Port;
string text8;
string text7 = "Connected to " + host4 + ":" + text8;
}
IL_239:
DateTime utcNow = DateTime.UtcNow;
this.<StartTime>k__BackingField = utcNow;
if (this.Stream != num)
{
return;
}
HTTPRequest <CurrentRequest>k__BackingField5 = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField5.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
bool flag = HTTPProtocolFactory.IsSecureProtocol(<CurrentRequest>k__BackingField5.<Uri>k__BackingField);
Stream stream = this.Client.GetStream();
HTTPRequest <CurrentRequest>k__BackingField6 = this.<CurrentRequest>k__BackingField;
this.Stream = stream;
Proxy <Proxy>k__BackingField = <CurrentRequest>k__BackingField6.<Proxy>k__BackingField;
if (<Proxy>k__BackingField != 0)
{
string text9 = <Proxy>k__BackingField.ToString();
}
if (!flag)
{
return;
}
HTTPRequest <CurrentRequest>k__BackingField7 = this.<CurrentRequest>k__BackingField;
client5 = this.Client;
if ((<CurrentRequest>k__BackingField7.<UseAlternateSSL>k__BackingField ? 1 : 0) == num)
{
break;
}
SecureRandom secureRandom = new SecureRandom();
Stream stream2;
tlsClientProtocol = new TlsClientProtocol(stream2, secureRandom);
HTTPRequest <CurrentRequest>k__BackingField8 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField8.<CustomTLSServerNameList>k__BackingField != 0)
{
}
if ((<CurrentRequest>k__BackingField8.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
if (!<CurrentRequest>k__BackingField8.<Uri>k__BackingField.IsHostIsAnIPAddress())
{
list = new List(1);
HTTPRequest <CurrentRequest>k__BackingField9 = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField9.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
string host5 = <CurrentRequest>k__BackingField9.<Uri>k__BackingField.Host;
list.Add(host5);
}
HTTPRequest <CurrentRequest>k__BackingField10 = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField10.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
<Uri>k__BackingField2 = <CurrentRequest>k__BackingField10.<Uri>k__BackingField;
if (<CurrentRequest>k__BackingField10.<CustomCertificateVerifyer>k__BackingField == 0)
{
goto Block_14;
}
}
Stream stream3 = client5.GetStream();
RemoteCertificateValidationCallback remoteCertificateValidationCallback = delegate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
{
HTTPRequest <CurrentRequest>k__BackingField12 = this.<CurrentRequest>k__BackingField;
Func<HTTPRequest, X509Certificate, X509Chain, bool> customCertificationValidator = <CurrentRequest>k__BackingField12.CustomCertificationValidator;
return customCertificationValidator == 0 || customCertificationValidator(<CurrentRequest>k__BackingField12, cert, chain) != null;
};
int num2;
SslStream sslStream = new SslStream(stream3, num2 != 0, remoteCertificateValidationCallback);
num2 = 0;
if (sslStream == 0)
{
HTTPRequest <CurrentRequest>k__BackingField11 = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField11.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
string host6 = <CurrentRequest>k__BackingField11.<Uri>k__BackingField.Host;
bool isAuthenticated = sslStream.IsAuthenticated;
}
this.Stream = sslStream;
return;
Block_14:
AlwaysValidVerifyer alwaysValidVerifyer = new AlwaysValidVerifyer();
IClientCredentialsProvider <CustomClientCredentialsProvider>k__BackingField = this.<CurrentRequest>k__BackingField.<CustomClientCredentialsProvider>k__BackingField;
LegacyTlsClient legacyTlsClient = new LegacyTlsClient(<Uri>k__BackingField2, alwaysValidVerifyer, <CustomClientCredentialsProvider>k__BackingField, list);
tlsClientProtocol.RefuseRenegotiation();
throw new NullReferenceException();
}
// Token: 0x06009322 RID: 37666 RVA: 0x001E2F4C File Offset: 0x001E114C
[Token(Token = "0x6009322")]
[Address(RVA = "0x1716020", Offset = "0x1714E20", VA = "0x181716020")]
private bool Receive()
{
/*
An exception occurred when decompiling this method (06009322)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Boolean BestHTTP.HTTPConnection::Receive()
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_22E:
stloc:Exception(var_36_238, newobj:Exception(Exception::.ctor, ldstr:string("Malformed URI in GetProtocolFromUri")))
}
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: 0x06009323 RID: 37667 RVA: 0x001E3194 File Offset: 0x001E1394
[Token(Token = "0x6009323")]
[Address(RVA = "0x1715B10", Offset = "0x1714910", VA = "0x181715B10")]
private bool LoadFromCache(Uri uri)
{
int num;
List<string> list;
do
{
num = 0;
if (HTTPManager.Logger == 0)
{
ILogger logger = HTTPManager.Logger;
HTTPRequest <CurrentRequest>k__BackingField = this.<CurrentRequest>k__BackingField;
if ((<CurrentRequest>k__BackingField.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
int hashCode = <CurrentRequest>k__BackingField.<Uri>k__BackingField.GetHashCode();
int hashCode2 = uri.GetHashCode();
string text = string.Format("{0} - LoadFromCache for Uri: {1}", hashCode, hashCode2);
}
HTTPCacheFileInfo entity = HTTPCacheService.GetEntity(uri);
if (entity == 0)
{
goto IL_11F;
}
HTTPRequest <CurrentRequest>k__BackingField2 = this.<CurrentRequest>k__BackingField;
HTTPResponse httpresponse = entity.ReadResponseTo(<CurrentRequest>k__BackingField2);
HTTPRequest <CurrentRequest>k__BackingField3 = this.<CurrentRequest>k__BackingField;
if (httpresponse != 0)
{
return true;
}
<CurrentRequest>k__BackingField3.<Response>k__BackingField.<CacheFileInfo>k__BackingField = entity;
Stream stream;
if (stream != 0)
{
if (this.<CurrentRequest>k__BackingField.<Response>k__BackingField.GetHeaderValues("content-length") == 0)
{
Dictionary<string, List<string>> <Headers>k__BackingField = this.<CurrentRequest>k__BackingField.<Response>k__BackingField.<Headers>k__BackingField;
list = new List(1);
string text2;
list.Add(text2);
<Headers>k__BackingField.Add("content-length", list);
}
this.<CurrentRequest>k__BackingField.<Response>k__BackingField.<IsFromCache>k__BackingField = true;
HTTPRequest <CurrentRequest>k__BackingField4 = this.<CurrentRequest>k__BackingField;
if (!<CurrentRequest>k__BackingField4.cacheOnly)
{
HTTPResponse <Response>k__BackingField = <CurrentRequest>k__BackingField4.<Response>k__BackingField;
}
}
if (stream != 0)
{
}
}
while (num != 0);
if (num != -1)
{
}
return true;
IL_11F:
int num2 = 0;
ILogger logger2 = HTTPManager.Logger;
int hashCode3 = num2.GetHashCode();
int hashCode4 = list.GetHashCode();
string text3 = string.Format("{0} - LoadFromCache for Uri: {1} - Cached entity not found!", hashCode3, hashCode4);
throw new NullReferenceException();
}
// Token: 0x06009324 RID: 37668 RVA: 0x001E3300 File Offset: 0x001E1500
[Token(Token = "0x6009324")]
[Address(RVA = "0x1717A60", Offset = "0x1716860", VA = "0x181717A60")]
private bool TryLoadAllFromCache()
{
if (!this.<CurrentRequest>k__BackingField.disableCache && HTTPCacheService.IsSupported)
{
HTTPRequest <CurrentRequest>k__BackingField = this.<CurrentRequest>k__BackingField;
if (HTTPCacheService.IsCachedEntityExpiresInTheFuture(<CurrentRequest>k__BackingField))
{
if (HTTPManager.Logger == 0)
{
ILogger logger = HTTPManager.Logger;
HTTPRequest <CurrentRequest>k__BackingField2 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField2.<IsRedirected>k__BackingField)
{
}
int hashCode = <CurrentRequest>k__BackingField2.<Uri>k__BackingField.GetHashCode();
string text = string.Format("{0} - TryLoadAllFromCache - whole response loading from cache", hashCode);
}
HTTPRequest <CurrentRequest>k__BackingField3 = this.<CurrentRequest>k__BackingField;
HTTPResponse fullResponse = HTTPCacheService.GetFullResponse(<CurrentRequest>k__BackingField3);
<CurrentRequest>k__BackingField3.<Response>k__BackingField = fullResponse;
if (this.<CurrentRequest>k__BackingField.<Response>k__BackingField != (ulong)0L)
{
return true;
}
}
if (<CurrentRequest>k__BackingField.<IsRedirected>k__BackingField)
{
}
bool flag = HTTPCacheService.DeleteEntity(<CurrentRequest>k__BackingField.<Uri>k__BackingField, true);
}
throw new NullReferenceException();
}
// Token: 0x06009325 RID: 37669 RVA: 0x001E33F4 File Offset: 0x001E15F4
[Token(Token = "0x6009325")]
[Address(RVA = "0x1717CF0", Offset = "0x1716AF0", VA = "0x181717CF0")]
private void TryStoreInCache()
{
HTTPRequest <CurrentRequest>k__BackingField = this.<CurrentRequest>k__BackingField;
if (!<CurrentRequest>k__BackingField.useStreaming && !<CurrentRequest>k__BackingField.disableCache && <CurrentRequest>k__BackingField.<Response>k__BackingField != (ulong)0L && HTTPCacheService.IsSupported)
{
HTTPRequest <CurrentRequest>k__BackingField2 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField2.<IsRedirected>k__BackingField)
{
}
Uri <Uri>k__BackingField = <CurrentRequest>k__BackingField2.<Uri>k__BackingField;
HTTPMethods <MethodType>k__BackingField = <CurrentRequest>k__BackingField2.<MethodType>k__BackingField;
HTTPResponse <Response>k__BackingField = <CurrentRequest>k__BackingField2.<Response>k__BackingField;
if (HTTPCacheService.IsCacheble(<Uri>k__BackingField, <MethodType>k__BackingField, <Response>k__BackingField))
{
HTTPRequest <CurrentRequest>k__BackingField3 = this.<CurrentRequest>k__BackingField;
if (<CurrentRequest>k__BackingField3.<IsRedirected>k__BackingField)
{
}
Uri <Uri>k__BackingField2 = <CurrentRequest>k__BackingField3.<Uri>k__BackingField;
HTTPMethods <MethodType>k__BackingField2 = <CurrentRequest>k__BackingField3.<MethodType>k__BackingField;
HTTPResponse <Response>k__BackingField2 = <CurrentRequest>k__BackingField3.<Response>k__BackingField;
HTTPCacheFileInfo httpcacheFileInfo = HTTPCacheService.Store(<Uri>k__BackingField2, <MethodType>k__BackingField2, <Response>k__BackingField2);
HTTPCacheService.SaveLibrary();
}
}
}
// Token: 0x06009326 RID: 37670 RVA: 0x001E34B4 File Offset: 0x001E16B4
[Token(Token = "0x6009326")]
[Address(RVA = "0x1715980", Offset = "0x1714780", VA = "0x181715980")]
private Uri GetRedirectUri(string location)
{
int num;
int num2;
do
{
Uri uri = new Uri(location);
if (uri.IsFile || string.Equals(uri.AbsolutePath, location))
{
}
num = 0;
num2 = 0;
}
while (!(num == num2));
Uri <Uri>k__BackingField = this.<CurrentRequest>k__BackingField.<Uri>k__BackingField;
string scheme = <Uri>k__BackingField.Scheme;
string host = <Uri>k__BackingField.Host;
int port = <Uri>k__BackingField.Port;
return new UriBuilder(scheme, host, port, location).Uri;
}
// Token: 0x06009327 RID: 37671 RVA: 0x001E3538 File Offset: 0x001E1738
[Token(Token = "0x6009327")]
[Address(RVA = "0x1714D20", Offset = "0x1713B20", VA = "0x181714D20", Slot = "6")]
internal override void Abort(HTTPConnectionStates newState)
{
this.<State>k__BackingField = newState;
if (newState == HTTPConnectionStates.TimedOut)
{
DateTime utcNow = DateTime.UtcNow;
this.<TimedOutStart>k__BackingField = utcNow;
}
if (this.Stream != (ulong)0L)
{
this.Stream.Dispose();
}
}
// Token: 0x06009328 RID: 37672 RVA: 0x001E3580 File Offset: 0x001E1780
[Token(Token = "0x6009328")]
[Address(RVA = "0x1714DD0", Offset = "0x1713BD0", VA = "0x181714DD0")]
private void Close()
{
int num;
do
{
num = 0;
this.KeepAlive = num;
this.<LastProcessedUri>k__BackingField = num;
if (this.Client == num)
{
break;
}
this.Client.Close();
this.Stream = (ulong)0L;
this.Client = (ulong)0L;
}
while (num != 0);
}
// Token: 0x06009329 RID: 37673 RVA: 0x001E35D0 File Offset: 0x001E17D0
[Token(Token = "0x6009329")]
[Address(RVA = "0x1715950", Offset = "0x1714750", VA = "0x181715950", Slot = "8")]
protected override void Dispose(bool disposing)
{
this.Close();
base.Dispose(disposing);
}
// Token: 0x04006481 RID: 25729
[FieldOffset(Offset = "0x58")]
[Token(Token = "0x4006481")]
private TcpClient Client;
// Token: 0x04006482 RID: 25730
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x4006482")]
private Stream Stream;
// Token: 0x04006483 RID: 25731
[FieldOffset(Offset = "0x68")]
[Token(Token = "0x4006483")]
private KeepAliveHeader KeepAlive;
}
}