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.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.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 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.k__BackingField) { } string host2 = request.k__BackingField.Host; if (request.k__BackingField) { } int port2 = request.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 k__BackingField = request.k__BackingField; if (k__BackingField.k__BackingField != 407) { int num3 = 0; if (!k__BackingField.IsSuccess) { goto IL_433; } num3 += num3; } string text9 = DigestStore.FindBest(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.k__BackingField != 0) { break; } continue; IL_227: byte[] eol6 = HTTPRequest.EOL; binaryWriter.Write(eol6); HTTPResponse httpresponse; request.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.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 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(); } } }