Chromium Code Reviews| Index: net/ftp/ftp_network_transaction.cc |
| diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc |
| index 70ebde174138922250f0f45911b4b77e399796f3..123e399dfde552d32d1f0c4e190e45593bacaf85 100644 |
| --- a/net/ftp/ftp_network_transaction.cc |
| +++ b/net/ftp/ftp_network_transaction.cc |
| @@ -334,9 +334,6 @@ int FtpNetworkTransaction::ProcessCtrlResponse() { |
| case COMMAND_LIST: |
| rv = ProcessResponseLIST(response); |
| break; |
| - case COMMAND_MDTM: |
| - rv = ProcessResponseMDTM(response); |
| - break; |
| case COMMAND_QUIT: |
| rv = ProcessResponseQUIT(response); |
| break; |
| @@ -552,10 +549,6 @@ int FtpNetworkTransaction::DoLoop(int result) { |
| DCHECK(rv == OK); |
| rv = DoCtrlWriteLIST(); |
| break; |
| - case STATE_CTRL_WRITE_MDTM: |
| - DCHECK(rv == OK); |
| - rv = DoCtrlWriteMDTM(); |
| - break; |
| case STATE_CTRL_WRITE_QUIT: |
| DCHECK(rv == OK); |
| rv = DoCtrlWriteQUIT(); |
| @@ -1005,12 +998,24 @@ int FtpNetworkTransaction::ProcessResponseSIZE( |
| case ERROR_CLASS_TRANSIENT_ERROR: |
| break; |
| case ERROR_CLASS_PERMANENT_ERROR: |
| + // It's possible that SIZE failed because the path is a directory. |
| + if (response.status_code == 550 && |
| + resource_type_ == RESOURCE_TYPE_UNKNOWN) { |
| + resource_type_ = RESOURCE_TYPE_DIRECTORY; |
| + } else if (resource_type_ != RESOURCE_TYPE_DIRECTORY) { |
| + return Stop(ERR_FAILED); |
|
wtc
2010/07/07 23:52:46
Nit: Can we return a better error code than ERR_FA
|
| + } |
| break; |
| default: |
| NOTREACHED(); |
| return Stop(ERR_UNEXPECTED); |
| } |
| - next_state_ = STATE_CTRL_WRITE_MDTM; |
| + |
| + if (resource_type_ == RESOURCE_TYPE_DIRECTORY) |
| + next_state_ = STATE_CTRL_WRITE_CWD; |
| + else |
| + next_state_ = STATE_CTRL_WRITE_RETR; |
| + |
| return OK; |
| } |
| @@ -1062,36 +1067,6 @@ int FtpNetworkTransaction::ProcessResponseRETR( |
| return OK; |
| } |
| -// MDMT command |
| -int FtpNetworkTransaction::DoCtrlWriteMDTM() { |
| - std::string command = "MDTM " + GetRequestPathForFtpCommand(false); |
| - next_state_ = STATE_CTRL_READ; |
| - return SendFtpCommand(command, COMMAND_MDTM); |
| -} |
| - |
| -int FtpNetworkTransaction::ProcessResponseMDTM( |
| - const FtpCtrlResponse& response) { |
| - switch (GetErrorClass(response.status_code)) { |
| - case ERROR_CLASS_INITIATED: |
| - return Stop(ERR_FAILED); |
| - case ERROR_CLASS_OK: |
| - next_state_ = STATE_CTRL_WRITE_RETR; |
| - break; |
| - case ERROR_CLASS_INFO_NEEDED: |
| - return Stop(ERR_FAILED); |
| - case ERROR_CLASS_TRANSIENT_ERROR: |
| - return Stop(ERR_FAILED); |
| - case ERROR_CLASS_PERMANENT_ERROR: |
| - next_state_ = STATE_CTRL_WRITE_RETR; |
| - break; |
| - default: |
| - NOTREACHED(); |
| - return Stop(ERR_UNEXPECTED); |
| - } |
| - return OK; |
| -} |
| - |
| - |
| // CWD command |
| int FtpNetworkTransaction::DoCtrlWriteCWD() { |
| std::string command = "CWD " + GetRequestPathForFtpCommand(true); |
| @@ -1226,11 +1201,7 @@ int FtpNetworkTransaction::DoDataConnect() { |
| int FtpNetworkTransaction::DoDataConnectComplete(int result) { |
| RecordDataConnectionError(result); |
| - if (resource_type_ == RESOURCE_TYPE_DIRECTORY) { |
| - next_state_ = STATE_CTRL_WRITE_CWD; |
| - } else { |
| - next_state_ = STATE_CTRL_WRITE_SIZE; |
| - } |
| + next_state_ = STATE_CTRL_WRITE_SIZE; |
| return OK; |
| } |