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.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.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; int num3 = k__BackingField.k__BackingField; if (num3 != 407) { int num4 = k__BackingField.k__BackingField; if (num3 > 99) { if (num4 != 304) { goto IL_450; } num4 += num4; num3 += 13; num3 += 19; } } string text9 = DigestStore.FindBest(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.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 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.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 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(); } } }