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);
        }