using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Text; using BestHTTP.Authentication; using BestHTTP.Extensions; using BestHTTP.Logger; using Cpp2IlInjected; namespace BestHTTP { // Token: 0x020012A8 RID: 4776 [Token(Token = "0x20012A8")] [StructLayout(3)] public sealed class HTTPProxy : Proxy { // Token: 0x1700133F RID: 4927 // (get) Token: 0x060076F8 RID: 30456 RVA: 0x0018A124 File Offset: 0x00188324 // (set) Token: 0x060076F9 RID: 30457 RVA: 0x0018A138 File Offset: 0x00188338 [Token(Token = "0x1700133F")] public bool IsTransparent { [Token(Token = "0x60076F8")] [Address(RVA = "0x4F5370", Offset = "0x4F3D70", VA = "0x1804F5370")] get; [Token(Token = "0x60076F9")] [Address(RVA = "0x4F5390", Offset = "0x4F3D90", VA = "0x1804F5390")] set; } // Token: 0x17001340 RID: 4928 // (get) Token: 0x060076FA RID: 30458 RVA: 0x0018A14C File Offset: 0x0018834C // (set) Token: 0x060076FB RID: 30459 RVA: 0x0018A160 File Offset: 0x00188360 [Token(Token = "0x17001340")] public bool SendWholeUri { [Token(Token = "0x60076FA")] [Address(RVA = "0x5C5EB0", Offset = "0x5C48B0", VA = "0x1805C5EB0")] get; [Token(Token = "0x60076FB")] [Address(RVA = "0x60FB10", Offset = "0x60E510", VA = "0x18060FB10")] set; } // Token: 0x17001341 RID: 4929 // (get) Token: 0x060076FC RID: 30460 RVA: 0x0018A174 File Offset: 0x00188374 // (set) Token: 0x060076FD RID: 30461 RVA: 0x0018A188 File Offset: 0x00188388 [Token(Token = "0x17001341")] public bool NonTransparentForHTTPS { [Token(Token = "0x60076FC")] [Address(RVA = "0x72A810", Offset = "0x729210", VA = "0x18072A810")] get; [Token(Token = "0x60076FD")] [Address(RVA = "0x72AA50", Offset = "0x729450", VA = "0x18072AA50")] set; } // Token: 0x060076FE RID: 30462 RVA: 0x0018A19C File Offset: 0x0018839C [Token(Token = "0x60076FE")] [Address(RVA = "0x1C93B90", Offset = "0x1C92590", VA = "0x181C93B90")] public HTTPProxy(Uri address) { int num = 0; base..ctor(address, num); this.IsTransparent = false; this.NonTransparentForHTTPS = true; } // Token: 0x060076FF RID: 30463 RVA: 0x0018A1C4 File Offset: 0x001883C4 [Token(Token = "0x60076FF")] [Address(RVA = "0x1C93C00", Offset = "0x1C92600", VA = "0x181C93C00")] public HTTPProxy(Uri address, Credentials credentials) : base(address, credentials) { this.IsTransparent = false; this.NonTransparentForHTTPS = true; } // Token: 0x06007700 RID: 30464 RVA: 0x0018A1E8 File Offset: 0x001883E8 [Token(Token = "0x6007700")] [Address(RVA = "0x1C93C70", Offset = "0x1C92670", VA = "0x181C93C70")] public HTTPProxy(Uri address, Credentials credentials, bool isTransparent) : base(address, credentials) { this.IsTransparent = isTransparent; this.SendWholeUri = true; } // Token: 0x06007701 RID: 30465 RVA: 0x0018A20C File Offset: 0x0018840C [Token(Token = "0x6007701")] [Address(RVA = "0x1C93C30", Offset = "0x1C92630", VA = "0x181C93C30")] public HTTPProxy(Uri address, Credentials credentials, bool isTransparent, bool sendWholeUri) : base(address, credentials) { this.IsTransparent = isTransparent; this.SendWholeUri = false; this.NonTransparentForHTTPS = true; } // Token: 0x06007702 RID: 30466 RVA: 0x0018A238 File Offset: 0x00188438 [Token(Token = "0x6007702")] [Address(RVA = "0x1C93BC0", Offset = "0x1C925C0", VA = "0x181C93BC0")] 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: 0x06007703 RID: 30467 RVA: 0x0018A264 File Offset: 0x00188464 [Token(Token = "0x6007703")] [Address(RVA = "0x1C93AC0", Offset = "0x1C924C0", VA = "0x181C93AC0", Slot = "5")] internal override string GetRequestPath(Uri uri) { if (this.k__BackingField) { return uri.OriginalString; } string parts = uri.GetParts(UriComponents.PathAndQuery, UriFormat.UriEscaped); return "/"; } // Token: 0x06007704 RID: 30468 RVA: 0x0018A298 File Offset: 0x00188498 [Token(Token = "0x6007704")] [Address(RVA = "0x1C92930", Offset = "0x1C91330", VA = "0x181C92930", Slot = "4")] internal override void Connect(Stream stream, HTTPRequest request) { for (;;) { int num = 0; if ((request.k__BackingField ? 1 : 0) != num) { } bool flag = HTTPProtocolFactory.IsSecureProtocol(request.k__BackingField); if ((this.k__BackingField ? 1 : 0) == num || (flag && (this.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.k__BackingField) { } string host = request.k__BackingField.Host; if (request.k__BackingField) { } int port = request.k__BackingField.Port; string text = string.Format("CONNECT {0}:{1} HTTP/1.1", host, port); ILogger logger = HTTPManager.Logger; int num2 = 0; string text2 = "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.k__BackingField) { } string host2 = request.k__BackingField.Host; if (request.k__BackingField) { } int port2 = request.k__BackingField.Port; string text3 = string.Format("Host: {0}:{1}", host2, port2); if (num < text3.m_stringLength) { char c4 = text3[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 text4; if (DigestStore.Get(num) != 0 && text4 == 0) { string text5 = string.Format("Proxy-Authorization: {0}", text4); if (HTTPManager.Logger <= (ulong)1L) { ILogger logger2 = HTTPManager.Logger; string text6 = "Sending proxy authorization header: " + text5; } byte[] asciibytes = text5.GetASCIIBytes(); binaryWriter.Write(asciibytes); byte[] eol5 = HTTPRequest.EOL; binaryWriter.Write(eol5); VariableSizedBufferPool.Release(asciibytes); goto IL_227; } goto IL_227; IL_31E: HTTPResponse k__BackingField = request.k__BackingField; int num3 = k__BackingField.k__BackingField; if (num3 != 407) { int num4 = k__BackingField.k__BackingField; if (num3 > 99) { if (num4 != 304) { goto IL_45F; } num4 += num4; num3 += 13; num3 += 19; } } string text7 = DigestStore.FindBest(k__BackingField.GetHeaderValues("proxy-authenticate")); if (text7 != 0) { goto IL_4F7; } Digest digest; digest.ParseChallange(text7); bool flag2; if (!flag2) { goto IL_4F7; } Dictionary> k__BackingField = request.k__BackingField; while (k__BackingField == 0) { } if (!k__BackingField.ContainsKey("Proxy-Authorization")) { continue; } if (!digest.k__BackingField) { goto IL_4F7; } if (binaryWriter != 0) { } if (digest != (ulong)(-1L)) { } if (num != 0) { continue; } ILogger logger3; if (logger3 != 0) { } if (digest != (ulong)(-1L)) { } if (num == 0) { break; } continue; IL_227: byte[] eol6 = HTTPRequest.EOL; binaryWriter.Write(eol6); HTTPResponse httpresponse; request.k__BackingField = httpresponse; httpresponse.Dispose(); ILogger logger4 = HTTPManager.Logger; ulong num5; if ((ulong)num < num5) { num += num; num++; } int num6 = 0; if (num > 1) { goto IL_31E; } logger3 = HTTPManager.Logger; object[] array = new object[6]; if ("Proxy returned - status code: " != 0) { goto IL_281; } IL_2DC: if (request.k__BackingField.k__BackingField != 0) { } if (" message: " != 0) { } if (request.k__BackingField.k__BackingField != 0) { } if (" Body: " != 0) { } if (request.k__BackingField.DataAsText != 0) { } num += num; num++; goto IL_31E; IL_281: int num7 = 0; Encoding utf2 = Encoding.UTF8; string text8 = num7 + ":" + num6; string text10; string text9 = "Basic " + text10; byte[] asciibytes2 = string.Format("Proxy-Authorization: {0}", text9).GetASCIIBytes(); binaryWriter.Write(asciibytes2); byte[] array2 = HTTPRequest.EOL; binaryWriter.Write(array2); array2 += array2; goto IL_2DC; } break; } return; IL_45F: throw new NullReferenceException(); IL_4F7: throw new NullReferenceException(); } } }