summaryrefslogtreecommitdiffstats
path: root/net/ftp
diff options
context:
space:
mode:
authorwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-09 21:48:17 +0000
committerwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-09 21:48:17 +0000
commit76925134ff272a3129ca38b740ed0637111f56f4 (patch)
tree92f6fdb40f5379503e61f1bb43aacef5b86e336b /net/ftp
parent2d2dffc230e097791fc393da00b1cb6937488c12 (diff)
downloadchromium_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.cc11
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_);