protected void DownloadSingleFile(FileDownloader.DownloadQueueItem next) { Logger.AddMethodCall("DownloadSingleFile called"); Logger.AddInternalState("DownloadQueueItem : " + (next != null ? next.ToString() : "null")); WebRequest webRequest = this.CreateWebRequest(next._sourceUri); if (this._fCancelPending) { return; } WebResponse response1 = (WebResponse)null; try { if (this.ClientCertificate == null) { try { response1 = webRequest.GetResponse(); } catch (WebException ex) { HttpWebResponse response2 = ex.Response as HttpWebResponse; if (response2 != null && response2.StatusCode == HttpStatusCode.Forbidden) { this.ClientCertificate = this.GetClientCertificate(); if (this.ClientCertificate == null) { throw; } else { webRequest = this.CreateWebRequest(next._sourceUri); } } else { throw; } } } if (this.ClientCertificate != null) { HttpWebRequest httpWebRequest = webRequest as HttpWebRequest; if (httpWebRequest != null) { httpWebRequest.ClientCertificates.Add((X509Certificate)this.ClientCertificate); } response1 = webRequest.GetResponse(); } UriHelper.ValidateSupportedScheme(response1.ResponseUri); if (this._fCancelPending) { return; } this._eventArgs._fileSourceUri = next._sourceUri; this._eventArgs._fileResponseUri = response1.ResponseUri; this._eventArgs.FileLocalPath = next._targetPath; this._eventArgs.Cookie = (object)null; if (response1.ContentLength > 0L) { this.CheckForSizeLimit((ulong)response1.ContentLength, false); this._accumulatedBytesTotal = this._accumulatedBytesTotal + response1.ContentLength; } this.SetBytesTotal(); this.OnModified(); Stream stream1 = (Stream)null; Stream stream2 = (Stream)null; int tickCount = Environment.TickCount; try { stream1 = response1.GetResponseStream(); Directory.CreateDirectory(Path.GetDirectoryName(next._targetPath)); stream2 = SystemNetDownloader.GetOutputFileStream(next._targetPath); if (stream2 != null) { long num = 0; if (response1.ContentLength > 0L) { stream2.SetLength(response1.ContentLength); } while (!this._fCancelPending) { int count = stream1.Read(this._buffer, 0, this._buffer.Length); if (count > 0) { stream2.Write(this._buffer, 0, count); } this._eventArgs._bytesCompleted += (long)count; if (response1.ContentLength <= 0L) { this._accumulatedBytesTotal = this._accumulatedBytesTotal + (long)count; this.SetBytesTotal(); } num += (long)count; if (next._maxFileSize != -1 && num > (long)next._maxFileSize) { throw new InvalidDeploymentException(ExceptionTypes.FileSizeValidation, string.Format((IFormatProvider)CultureInfo.CurrentUICulture, Resources.GetString("Ex_FileBeingDownloadedTooLarge"), new object[2] { (object)next._sourceUri.ToString(), (object)next._maxFileSize })); } this.CheckForSizeLimit((ulong)count, true); if (this._eventArgs._bytesTotal > 0L) { this._eventArgs._progress = (int)(this._eventArgs._bytesCompleted * 100L / this._eventArgs._bytesTotal); } this.OnModifiedWithThrottle(ref tickCount); if (count <= 0) { if (response1.ContentLength != num) { stream2.SetLength(num); goto label_40; } else { goto label_40; } } } return; } } finally { if (stream1 != null) { stream1.Close(); } if (stream2 != null) { stream2.Close(); } } label_40: this._eventArgs.Cookie = next._cookie; ++this._eventArgs._filesCompleted; Logger.AddInternalState("HttpWebResponse=" + Logger.Serialize(response1)); this.OnModified(); this._downloadResults.Add((object)new DownloadResult() { ResponseUri = response1.ResponseUri, ServerInformation = { Server = response1.Headers["Server"], PoweredBy = response1.Headers["X-Powered-By"], AspNetVersion = response1.Headers["X-AspNet-Version"] } }); } catch (InvalidOperationException ex) { throw new DeploymentDownloadException(string.Format((IFormatProvider)CultureInfo.CurrentUICulture, Resources.GetString("Ex_FailedWhileDownloading"), new object[1] { (object)next._sourceUri }), (Exception)ex); } catch (IOException ex) { throw new DeploymentDownloadException(string.Format((IFormatProvider)CultureInfo.CurrentUICulture, Resources.GetString("Ex_FailedWhileDownloading"), new object[1] { (object)next._sourceUri }), (Exception)ex); } catch (UnauthorizedAccessException ex) { throw new DeploymentDownloadException(string.Format((IFormatProvider)CultureInfo.CurrentUICulture, Resources.GetString("Ex_FailedWhileDownloading"), new object[1] { (object)next._sourceUri }), (Exception)ex); } finally { if (response1 != null) { response1.Close(); } } }