public static MemoryStream DownloadDataFromUri(Uri uri, long expectedMaxResponseSize, Func <long, bool, bool> responseValidationCallback, bool isUrlUserInput = true, bool isBposUser = true) { string text = Guid.NewGuid().ToString(); if (isBposUser && isUrlUserInput && IPAddressUtil.IsIntranetAddress(uri)) { throw new DownloadPermanentException(); } string text2 = uri.OriginalString; if (text2.Contains("?")) { text2 = text2 + "&corr=" + text; } else { text2 = text2 + "?corr=" + text; } uri = new Uri(text2); MemoryStream result = null; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri); httpWebRequest.AllowAutoRedirect = true; httpWebRequest.Timeout = 30000; httpWebRequest.CachePolicy = SynchronousDownloadData.NoCachePolicy; try { using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (Stream responseStream = httpWebResponse.GetResponseStream()) { long num = expectedMaxResponseSize + 1L; if (responseStream.CanSeek) { num = Math.Min(num, responseStream.Length); } byte[] array = new byte[num]; int num2 = 0; int num3; do { num3 = responseStream.Read(array, num2, array.Length - num2); num2 += num3; responseValidationCallback((long)num2, true); }while (num3 > 0); result = new MemoryStream(array, 0, num2); } } } catch (Exception ex) { ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_DownloadDataFromOfficeMarketPlaceFailed, null, new object[] { "DownloadNewApp", text, uri, ExtensionDiagnostics.GetLoggedExceptionString(ex) }); throw ex; } ExtensionDiagnostics.LogToDatacenterOnly(ApplicationLogicEventLogConstants.Tuple_DownloadDataFromOfficeMarketPlaceSucceeded, null, new object[] { "DownloadNewApp", text, uri }); return(result); }