Index: net/ftp/ftp_network_transaction.cc |
=================================================================== |
--- net/ftp/ftp_network_transaction.cc (revision 22214) |
+++ net/ftp/ftp_network_transaction.cc (working copy) |
@@ -83,24 +83,15 @@ |
int buf_len, |
CompletionCallback* callback) { |
DCHECK(buf); |
- DCHECK(buf_len > 0); |
+ DCHECK_GT(buf_len, 0); |
- if (data_socket_ == NULL) |
- return 0; // Data socket closed, no more data left. |
- |
- if (!data_socket_->IsConnected()) |
- return 0; // Data socket disconnected, no more data left. |
- |
read_data_buf_ = buf; |
read_data_buf_len_ = buf_len; |
next_state_ = STATE_DATA_READ; |
- |
int rv = DoLoop(OK); |
if (rv == ERR_IO_PENDING) |
user_callback_ = callback; |
- else if (rv == 0) |
- data_socket_->Disconnect(); |
return rv; |
} |
@@ -836,7 +827,7 @@ |
const FtpCtrlResponse& response) { |
switch (GetErrorClass(response.status_code)) { |
case ERROR_CLASS_INITIATED: |
- next_state_ = STATE_CTRL_READ; |
+ response_.is_directory_listing = true; |
break; |
case ERROR_CLASS_OK: |
response_.is_directory_listing = true; |
@@ -907,8 +898,13 @@ |
int FtpNetworkTransaction::DoDataRead() { |
DCHECK(read_data_buf_); |
- DCHECK(read_data_buf_len_ > 0); |
+ DCHECK_GT(read_data_buf_len_, 0); |
+ if (data_socket_ == NULL || !data_socket_->IsConnected()) { |
+ // No more data so send QUIT Command now and wait for response. |
+ return Stop(OK); |
+ } |
+ |
next_state_ = STATE_DATA_READ_COMPLETE; |
read_data_buf_->data()[0] = 0; |
return data_socket_->Read(read_data_buf_, read_data_buf_len_, |