diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-09 21:48:17 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-09 21:48:17 +0000 |
commit | 76925134ff272a3129ca38b740ed0637111f56f4 (patch) | |
tree | 92f6fdb40f5379503e61f1bb43aacef5b86e336b /net/ftp | |
parent | 2d2dffc230e097791fc393da00b1cb6937488c12 (diff) | |
download | chromium_src-76925134ff272a3129ca38b740ed0637111f56f4.zip chromium_src-76925134ff272a3129ca38b740ed0637111f56f4.tar.gz chromium_src-76925134ff272a3129ca38b740ed0637111f56f4.tar.bz2 |
Fix FTP binary file download issue.
The patch is contributed by Ibrar Ahmed <ibrar.ahmad@gmail.com>.
Original review: http://codereview.chromium.org/118455
R=wtc
BUG=http://crbug.com/4965
TEST=Run with --new-ftp, and try to download a file.
Review URL: http://codereview.chromium.org/118459
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17981 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/ftp')
-rw-r--r-- | net/ftp/ftp_network_transaction.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc index c314764..ae6e4fc 100644 --- a/net/ftp/ftp_network_transaction.cc +++ b/net/ftp/ftp_network_transaction.cc @@ -693,10 +693,9 @@ int FtpNetworkTransaction::DoCtrlWriteRETR() { int FtpNetworkTransaction::ProcessResponseRETR(int response_code) { switch (GetErrorClass(response_code)) { case ERROR_CLASS_INITIATED: - next_state_ = STATE_CTRL_WRITE_QUIT; break; case ERROR_CLASS_OK: - next_state_ = STATE_DATA_RESOLVE_HOST; + next_state_ = STATE_CTRL_WRITE_QUIT; break; case ERROR_CLASS_PENDING: next_state_ = STATE_CTRL_WRITE_PASV; @@ -706,6 +705,8 @@ int FtpNetworkTransaction::ProcessResponseRETR(int response_code) { return Stop(ERR_FAILED); return ERR_FAILED; // TODO(ibrar): Retry here. case ERROR_CLASS_ERROR: + if (retr_failed_) + return Stop(ERR_FAILED); retr_failed_ = true; next_state_ = STATE_CTRL_WRITE_PASV; break; @@ -825,6 +826,9 @@ int FtpNetworkTransaction::ProcessResponseQUIT(int response_code) { // Data Connection int FtpNetworkTransaction::DoDataResolveHost() { + if (data_socket_ != NULL && data_socket_->IsConnected()) + data_socket_->Disconnect(); + next_state_ = STATE_DATA_RESOLVE_HOST_COMPLETE; DidStartDnsResolution(data_connection_ip_, this); @@ -843,9 +847,6 @@ int FtpNetworkTransaction::DoDataResolveHostComplete(int result) { } int FtpNetworkTransaction::DoDataConnect() { - if (data_socket_ != NULL && data_socket_->IsConnected()) - data_socket_->Disconnect(); - next_state_ = STATE_DATA_CONNECT_COMPLETE; data_socket_.reset(socket_factory_->CreateTCPClientSocket(addresses_)); return data_socket_->Connect(&io_callback_); |