Files
27Aug2021-Cpp2IL-Dump/Assembly-CSharp/BestHTTP/HTTPProxy.cs
T
niko c12fbe3fc6 m
2026-04-12 16:51:38 +02:00

323 lines
9.3 KiB
C#

using System;
using System.IO;
using System.Text;
using BestHTTP.Authentication;
using BestHTTP.Extensions;
using BestHTTP.Logger;
using Cpp2IlInjected;
namespace BestHTTP
{
// Token: 0x02001979 RID: 6521
[Token(Token = "0x2001979")]
public sealed class HTTPProxy : Proxy
{
// Token: 0x170017F5 RID: 6133
// (get) Token: 0x06009746 RID: 38726 RVA: 0x001ED684 File Offset: 0x001EB884
// (set) Token: 0x06009747 RID: 38727 RVA: 0x001ED698 File Offset: 0x001EB898
[Token(Token = "0x170017F5")]
public bool IsTransparent
{
[Token(Token = "0x6009746")]
[Address(RVA = "0x4700C0", Offset = "0x46F0C0", VA = "0x1804700C0")]
get;
[Token(Token = "0x6009747")]
[Address(RVA = "0x65E580", Offset = "0x65D580", VA = "0x18065E580")]
set;
}
// Token: 0x170017F6 RID: 6134
// (get) Token: 0x06009748 RID: 38728 RVA: 0x001ED6AC File Offset: 0x001EB8AC
// (set) Token: 0x06009749 RID: 38729 RVA: 0x001ED6C0 File Offset: 0x001EB8C0
[Token(Token = "0x170017F6")]
public bool SendWholeUri
{
[Token(Token = "0x6009748")]
[Address(RVA = "0x4700D0", Offset = "0x46F0D0", VA = "0x1804700D0")]
get;
[Token(Token = "0x6009749")]
[Address(RVA = "0xABE6B0", Offset = "0xABD6B0", VA = "0x180ABE6B0")]
set;
}
// Token: 0x170017F7 RID: 6135
// (get) Token: 0x0600974A RID: 38730 RVA: 0x001ED6D4 File Offset: 0x001EB8D4
// (set) Token: 0x0600974B RID: 38731 RVA: 0x001ED6E8 File Offset: 0x001EB8E8
[Token(Token = "0x170017F7")]
public bool NonTransparentForHTTPS
{
[Token(Token = "0x600974A")]
[Address(RVA = "0x4700E0", Offset = "0x46F0E0", VA = "0x1804700E0")]
get;
[Token(Token = "0x600974B")]
[Address(RVA = "0x1A1B9C0", Offset = "0x1A1A9C0", VA = "0x181A1B9C0")]
set;
}
// Token: 0x0600974C RID: 38732 RVA: 0x001ED6FC File Offset: 0x001EB8FC
[Token(Token = "0x600974C")]
[Address(RVA = "0x2A7A620", Offset = "0x2A79620", VA = "0x182A7A620")]
public HTTPProxy(Uri address)
{
int num = 0;
base..ctor(address, num);
this.IsTransparent = false;
this.NonTransparentForHTTPS = true;
}
// Token: 0x0600974D RID: 38733 RVA: 0x001ED724 File Offset: 0x001EB924
[Token(Token = "0x600974D")]
[Address(RVA = "0x2A7A690", Offset = "0x2A79690", VA = "0x182A7A690")]
public HTTPProxy(Uri address, Credentials credentials)
: base(address, credentials)
{
this.IsTransparent = false;
this.NonTransparentForHTTPS = true;
}
// Token: 0x0600974E RID: 38734 RVA: 0x001ED748 File Offset: 0x001EB948
[Token(Token = "0x600974E")]
[Address(RVA = "0x2A7A700", Offset = "0x2A79700", VA = "0x182A7A700")]
public HTTPProxy(Uri address, Credentials credentials, bool isTransparent)
: base(address, credentials)
{
this.IsTransparent = isTransparent;
this.SendWholeUri = true;
}
// Token: 0x0600974F RID: 38735 RVA: 0x001ED76C File Offset: 0x001EB96C
[Token(Token = "0x600974F")]
[Address(RVA = "0x2A7A6C0", Offset = "0x2A796C0", VA = "0x182A7A6C0")]
public HTTPProxy(Uri address, Credentials credentials, bool isTransparent, bool sendWholeUri)
: base(address, credentials)
{
this.IsTransparent = isTransparent;
this.SendWholeUri = false;
this.NonTransparentForHTTPS = true;
}
// Token: 0x06009750 RID: 38736 RVA: 0x001ED798 File Offset: 0x001EB998
[Token(Token = "0x6009750")]
[Address(RVA = "0x2A7A650", Offset = "0x2A79650", VA = "0x182A7A650")]
public HTTPProxy(Uri address, Credentials credentials, bool isTransparent, bool sendWholeUri, bool nonTransparentForHTTPS)
: base(address, credentials)
{
this.SendWholeUri = false;
this.IsTransparent = isTransparent;
this.NonTransparentForHTTPS = false;
}
// Token: 0x06009751 RID: 38737 RVA: 0x001ED7C4 File Offset: 0x001EB9C4
[Token(Token = "0x6009751")]
[Address(RVA = "0x2A7A550", Offset = "0x2A79550", VA = "0x182A7A550", Slot = "5")]
internal override string GetRequestPath(Uri uri)
{
if (this.<SendWholeUri>k__BackingField)
{
return uri.OriginalString;
}
string parts = uri.GetParts(UriComponents.PathAndQuery, UriFormat.UriEscaped);
return "/";
}
// Token: 0x06009752 RID: 38738 RVA: 0x001ED7F8 File Offset: 0x001EB9F8
[Token(Token = "0x6009752")]
[Address(RVA = "0x2A793E0", Offset = "0x2A783E0", VA = "0x182A793E0", Slot = "4")]
internal override void Connect(Stream stream, HTTPRequest request)
{
for (;;)
{
int num = 0;
if ((request.<IsRedirected>k__BackingField ? 1 : 0) != num)
{
}
bool flag = HTTPProtocolFactory.IsSecureProtocol(request.<Uri>k__BackingField);
if ((this.<IsTransparent>k__BackingField ? 1 : 0) == num || (flag && (this.<NonTransparentForHTTPS>k__BackingField ? 1 : 0) != num))
{
int uploadChunkSize = HTTPRequest.UploadChunkSize;
WriteOnlyBufferedStream writeOnlyBufferedStream = new WriteOnlyBufferedStream(stream, uploadChunkSize);
Encoding utf = Encoding.UTF8;
BinaryWriter binaryWriter = new BinaryWriter(writeOnlyBufferedStream, utf);
if (request.<IsRedirected>k__BackingField)
{
}
string host = request.<Uri>k__BackingField.Host;
if (request.<IsRedirected>k__BackingField)
{
}
int port = request.<Uri>k__BackingField.Port;
string text2;
string text = string.Format("CONNECT {0}:{1} HTTP/1.1", host, text2);
ILogger logger = HTTPManager.Logger;
int num2 = 0;
string text3 = "Sending " + text;
if (num < num2)
{
num += num;
num++;
}
if (num < text.m_stringLength)
{
char c = text[num];
binaryWriter.Write(c != '\0');
num++;
c += c;
}
byte[] eol = HTTPRequest.EOL;
binaryWriter.Write(eol);
char c2;
binaryWriter.Write(c2 != '\0');
num++;
byte[] eol2 = HTTPRequest.EOL;
binaryWriter.Write(eol2);
char c3;
binaryWriter.Write(c3 != '\0');
num++;
byte[] eol3 = HTTPRequest.EOL;
binaryWriter.Write(eol3);
if (request.<IsRedirected>k__BackingField)
{
}
string host2 = request.<Uri>k__BackingField.Host;
if (request.<IsRedirected>k__BackingField)
{
}
int port2 = request.<Uri>k__BackingField.Port;
string text5;
string text4 = string.Format("Host: {0}:{1}", host2, text5);
if (num < text4.m_stringLength)
{
char c4 = text4[num];
binaryWriter.Write(c4 != '\0');
num++;
}
byte[] eol4 = HTTPRequest.EOL;
binaryWriter.Write(eol4);
if (binaryWriter == 0)
{
goto IL_227;
}
Stream outStream = binaryWriter.OutStream;
if (outStream != 0)
{
if (outStream == 0)
{
goto IL_281;
}
if (outStream != (ulong)1L)
{
goto IL_227;
}
}
string text6;
if (DigestStore.Get(num) != 0 && text6 == 0)
{
string text7 = string.Format("Proxy-Authorization: {0}", text6);
if (HTTPManager.Logger <= (ulong)1L)
{
ILogger logger2 = HTTPManager.Logger;
string text8 = "Sending proxy authorization header: " + text7;
}
byte[] asciibytes = text7.GetASCIIBytes();
binaryWriter.Write(asciibytes);
byte[] eol5 = HTTPRequest.EOL;
binaryWriter.Write(eol5);
VariableSizedBufferPool.Release(asciibytes);
goto IL_227;
}
goto IL_227;
IL_31E:
HTTPResponse <ProxyResponse>k__BackingField = request.<ProxyResponse>k__BackingField;
if (<ProxyResponse>k__BackingField.<StatusCode>k__BackingField != 407)
{
int num3 = 0;
if (!<ProxyResponse>k__BackingField.IsSuccess)
{
goto IL_433;
}
num3 += num3;
}
string text9 = DigestStore.FindBest(<ProxyResponse>k__BackingField.GetHeaderValues("proxy-authenticate"));
if (text9 != 0)
{
goto IL_4CB;
}
Digest digest;
digest.ParseChallange(text9);
bool flag2;
if (!flag2)
{
goto IL_4CB;
}
if (request.<Headers>k__BackingField != 0)
{
break;
}
continue;
IL_227:
byte[] eol6 = HTTPRequest.EOL;
binaryWriter.Write(eol6);
HTTPResponse httpresponse;
request.<ProxyResponse>k__BackingField = httpresponse;
httpresponse.Dispose();
ILogger logger3 = HTTPManager.Logger;
ulong num4;
if ((ulong)num < num4)
{
num += num;
num++;
}
int num5 = 0;
if (num > 1)
{
goto IL_31E;
}
ILogger logger4 = HTTPManager.Logger;
object[] array = new object[6];
if ("Proxy returned - status code: " != 0)
{
goto IL_281;
}
IL_2DC:
if (request.<ProxyResponse>k__BackingField.<StatusCode>k__BackingField != 0)
{
}
if (" message: " != 0)
{
}
if (request.<ProxyResponse>k__BackingField.<Message>k__BackingField != 0)
{
}
if (" Body: " != 0)
{
}
if (request.<ProxyResponse>k__BackingField.DataAsText != 0)
{
}
num += num;
num++;
goto IL_31E;
IL_281:
int num6 = 0;
Encoding utf2 = Encoding.UTF8;
string text10 = num6 + ":" + num5;
string text12;
string text11 = "Basic " + text12;
byte[] asciibytes2 = string.Format("Proxy-Authorization: {0}", text11).GetASCIIBytes();
binaryWriter.Write(asciibytes2);
byte[] array2 = HTTPRequest.EOL;
binaryWriter.Write(array2);
array2 += array2;
goto IL_2DC;
}
return;
}
throw new NullReferenceException();
IL_433:
throw new NullReferenceException();
IL_4CB:
throw new NullReferenceException();
}
}
}