329 lines
9.5 KiB
C#
329 lines
9.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using BestHTTP.Authentication;
|
|
using BestHTTP.Extensions;
|
|
using BestHTTP.Logger;
|
|
using Cpp2IlInjected;
|
|
|
|
namespace BestHTTP
|
|
{
|
|
// Token: 0x02001899 RID: 6297
|
|
[Token(Token = "0x2001899")]
|
|
public sealed class HTTPProxy : Proxy
|
|
{
|
|
// Token: 0x17001758 RID: 5976
|
|
// (get) Token: 0x06009378 RID: 37752 RVA: 0x001E45C4 File Offset: 0x001E27C4
|
|
// (set) Token: 0x06009379 RID: 37753 RVA: 0x001E45D8 File Offset: 0x001E27D8
|
|
[Token(Token = "0x17001758")]
|
|
public bool IsTransparent
|
|
{
|
|
[Token(Token = "0x6009378")]
|
|
[Address(RVA = "0x3F71D0", Offset = "0x3F5FD0", VA = "0x1803F71D0")]
|
|
get;
|
|
[Token(Token = "0x6009379")]
|
|
[Address(RVA = "0x41EF80", Offset = "0x41DD80", VA = "0x18041EF80")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x17001759 RID: 5977
|
|
// (get) Token: 0x0600937A RID: 37754 RVA: 0x001E45EC File Offset: 0x001E27EC
|
|
// (set) Token: 0x0600937B RID: 37755 RVA: 0x001E4600 File Offset: 0x001E2800
|
|
[Token(Token = "0x17001759")]
|
|
public bool SendWholeUri
|
|
{
|
|
[Token(Token = "0x600937A")]
|
|
[Address(RVA = "0x41ED50", Offset = "0x41DB50", VA = "0x18041ED50")]
|
|
get;
|
|
[Token(Token = "0x600937B")]
|
|
[Address(RVA = "0x41EF90", Offset = "0x41DD90", VA = "0x18041EF90")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x1700175A RID: 5978
|
|
// (get) Token: 0x0600937C RID: 37756 RVA: 0x001E4614 File Offset: 0x001E2814
|
|
// (set) Token: 0x0600937D RID: 37757 RVA: 0x001E4628 File Offset: 0x001E2828
|
|
[Token(Token = "0x1700175A")]
|
|
public bool NonTransparentForHTTPS
|
|
{
|
|
[Token(Token = "0x600937C")]
|
|
[Address(RVA = "0x439BB0", Offset = "0x4389B0", VA = "0x180439BB0")]
|
|
get;
|
|
[Token(Token = "0x600937D")]
|
|
[Address(RVA = "0x439DF0", Offset = "0x438BF0", VA = "0x180439DF0")]
|
|
set;
|
|
}
|
|
|
|
// Token: 0x0600937E RID: 37758 RVA: 0x001E463C File Offset: 0x001E283C
|
|
[Token(Token = "0x600937E")]
|
|
[Address(RVA = "0x171E970", Offset = "0x171D770", VA = "0x18171E970")]
|
|
public HTTPProxy(Uri address)
|
|
{
|
|
int num = 0;
|
|
base..ctor(address, num);
|
|
this.IsTransparent = false;
|
|
this.NonTransparentForHTTPS = true;
|
|
}
|
|
|
|
// Token: 0x0600937F RID: 37759 RVA: 0x001E4664 File Offset: 0x001E2864
|
|
[Token(Token = "0x600937F")]
|
|
[Address(RVA = "0x171E9E0", Offset = "0x171D7E0", VA = "0x18171E9E0")]
|
|
public HTTPProxy(Uri address, Credentials credentials)
|
|
: base(address, credentials)
|
|
{
|
|
this.IsTransparent = false;
|
|
this.NonTransparentForHTTPS = true;
|
|
}
|
|
|
|
// Token: 0x06009380 RID: 37760 RVA: 0x001E4688 File Offset: 0x001E2888
|
|
[Token(Token = "0x6009380")]
|
|
[Address(RVA = "0x171EA50", Offset = "0x171D850", VA = "0x18171EA50")]
|
|
public HTTPProxy(Uri address, Credentials credentials, bool isTransparent)
|
|
: base(address, credentials)
|
|
{
|
|
this.IsTransparent = isTransparent;
|
|
this.SendWholeUri = true;
|
|
}
|
|
|
|
// Token: 0x06009381 RID: 37761 RVA: 0x001E46AC File Offset: 0x001E28AC
|
|
[Token(Token = "0x6009381")]
|
|
[Address(RVA = "0x171EA10", Offset = "0x171D810", VA = "0x18171EA10")]
|
|
public HTTPProxy(Uri address, Credentials credentials, bool isTransparent, bool sendWholeUri)
|
|
: base(address, credentials)
|
|
{
|
|
this.IsTransparent = isTransparent;
|
|
this.SendWholeUri = false;
|
|
this.NonTransparentForHTTPS = true;
|
|
}
|
|
|
|
// Token: 0x06009382 RID: 37762 RVA: 0x001E46D8 File Offset: 0x001E28D8
|
|
[Token(Token = "0x6009382")]
|
|
[Address(RVA = "0x171E9A0", Offset = "0x171D7A0", VA = "0x18171E9A0")]
|
|
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: 0x06009383 RID: 37763 RVA: 0x001E4704 File Offset: 0x001E2904
|
|
[Token(Token = "0x6009383")]
|
|
[Address(RVA = "0x171E8A0", Offset = "0x171D6A0", VA = "0x18171E8A0", 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: 0x06009384 RID: 37764 RVA: 0x001E4738 File Offset: 0x001E2938
|
|
[Token(Token = "0x6009384")]
|
|
[Address(RVA = "0x171D720", Offset = "0x171C520", VA = "0x18171D720", 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;
|
|
int num3 = <ProxyResponse>k__BackingField.<StatusCode>k__BackingField;
|
|
if (num3 != 407)
|
|
{
|
|
int num4 = <ProxyResponse>k__BackingField.<StatusCode>k__BackingField;
|
|
if (num3 > 99)
|
|
{
|
|
if (num4 != 304)
|
|
{
|
|
goto IL_450;
|
|
}
|
|
num4 += num4;
|
|
num3 += 13;
|
|
num3 += 19;
|
|
}
|
|
}
|
|
string text9 = DigestStore.FindBest(<ProxyResponse>k__BackingField.GetHeaderValues("proxy-authenticate"));
|
|
if (text9 != 0)
|
|
{
|
|
goto IL_4E8;
|
|
}
|
|
Digest digest;
|
|
digest.ParseChallange(text9);
|
|
bool flag2;
|
|
if (!flag2)
|
|
{
|
|
goto IL_4E8;
|
|
}
|
|
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 num5;
|
|
if ((ulong)num < num5)
|
|
{
|
|
num += num;
|
|
num++;
|
|
}
|
|
int num6 = 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 num7 = 0;
|
|
Encoding utf2 = Encoding.UTF8;
|
|
string text10 = num7 + ":" + num6;
|
|
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_450:
|
|
throw new NullReferenceException();
|
|
IL_4E8:
|
|
throw new NullReferenceException();
|
|
}
|
|
}
|
|
}
|