Index: net/ftp/ftp_network_transaction.h |
diff --git a/net/ftp/ftp_network_transaction.h b/net/ftp/ftp_network_transaction.h |
deleted file mode 100644 |
index 6bf01bdf62952016bcc3da2b1789950b08838632..0000000000000000000000000000000000000000 |
--- a/net/ftp/ftp_network_transaction.h |
+++ /dev/null |
@@ -1,264 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef NET_FTP_FTP_NETWORK_TRANSACTION_H_ |
-#define NET_FTP_FTP_NETWORK_TRANSACTION_H_ |
- |
-#include <string> |
-#include <utility> |
- |
-#include "base/basictypes.h" |
-#include "base/compiler_specific.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "net/base/address_list.h" |
-#include "net/base/auth.h" |
-#include "net/base/net_log.h" |
-#include "net/dns/host_resolver.h" |
-#include "net/dns/single_request_host_resolver.h" |
-#include "net/ftp/ftp_ctrl_response_buffer.h" |
-#include "net/ftp/ftp_response_info.h" |
-#include "net/ftp/ftp_transaction.h" |
- |
-namespace net { |
- |
-class ClientSocketFactory; |
-class FtpNetworkSession; |
-class StreamSocket; |
- |
-class NET_EXPORT_PRIVATE FtpNetworkTransaction : public FtpTransaction { |
- public: |
- FtpNetworkTransaction(FtpNetworkSession* session, |
- ClientSocketFactory* socket_factory); |
- ~FtpNetworkTransaction() override; |
- |
- int Stop(int error); |
- |
- // FtpTransaction methods: |
- int Start(const FtpRequestInfo* request_info, |
- const CompletionCallback& callback, |
- const BoundNetLog& net_log) override; |
- int RestartWithAuth(const AuthCredentials& credentials, |
- const CompletionCallback& callback) override; |
- int Read(IOBuffer* buf, |
- int buf_len, |
- const CompletionCallback& callback) override; |
- const FtpResponseInfo* GetResponseInfo() const override; |
- LoadState GetLoadState() const override; |
- uint64 GetUploadProgress() const override; |
- |
- private: |
- FRIEND_TEST_ALL_PREFIXES(FtpNetworkTransactionTest, |
- DownloadTransactionEvilPasvUnsafeHost); |
- |
- enum Command { |
- COMMAND_NONE, |
- COMMAND_USER, |
- COMMAND_PASS, |
- COMMAND_SYST, |
- COMMAND_TYPE, |
- COMMAND_EPSV, |
- COMMAND_PASV, |
- COMMAND_PWD, |
- COMMAND_SIZE, |
- COMMAND_RETR, |
- COMMAND_CWD, |
- COMMAND_LIST, |
- COMMAND_QUIT, |
- }; |
- |
- // Major categories of remote system types, as returned by SYST command. |
- enum SystemType { |
- SYSTEM_TYPE_UNKNOWN, |
- SYSTEM_TYPE_UNIX, |
- SYSTEM_TYPE_WINDOWS, |
- SYSTEM_TYPE_OS2, |
- SYSTEM_TYPE_VMS, |
- }; |
- |
- // Data representation type, see RFC 959 section 3.1.1. Data Types. |
- // We only support the two most popular data types. |
- enum DataType { |
- DATA_TYPE_ASCII, |
- DATA_TYPE_IMAGE, |
- }; |
- |
- // In FTP we need to issue different commands depending on whether a resource |
- // is a file or directory. If we don't know that, we're going to autodetect |
- // it. |
- enum ResourceType { |
- RESOURCE_TYPE_UNKNOWN, |
- RESOURCE_TYPE_FILE, |
- RESOURCE_TYPE_DIRECTORY, |
- }; |
- |
- enum State { |
- // Control connection states: |
- STATE_CTRL_RESOLVE_HOST, |
- STATE_CTRL_RESOLVE_HOST_COMPLETE, |
- STATE_CTRL_CONNECT, |
- STATE_CTRL_CONNECT_COMPLETE, |
- STATE_CTRL_READ, |
- STATE_CTRL_READ_COMPLETE, |
- STATE_CTRL_WRITE, |
- STATE_CTRL_WRITE_COMPLETE, |
- STATE_CTRL_WRITE_USER, |
- STATE_CTRL_WRITE_PASS, |
- STATE_CTRL_WRITE_SYST, |
- STATE_CTRL_WRITE_TYPE, |
- STATE_CTRL_WRITE_EPSV, |
- STATE_CTRL_WRITE_PASV, |
- STATE_CTRL_WRITE_PWD, |
- STATE_CTRL_WRITE_RETR, |
- STATE_CTRL_WRITE_SIZE, |
- STATE_CTRL_WRITE_CWD, |
- STATE_CTRL_WRITE_LIST, |
- STATE_CTRL_WRITE_QUIT, |
- // Data connection states: |
- STATE_DATA_CONNECT, |
- STATE_DATA_CONNECT_COMPLETE, |
- STATE_DATA_READ, |
- STATE_DATA_READ_COMPLETE, |
- STATE_NONE |
- }; |
- |
- // Resets the members of the transaction so it can be restarted. |
- void ResetStateForRestart(); |
- |
- // Establishes the data connection and switches to |state_after_connect|. |
- // |state_after_connect| should only be RETR or LIST. |
- void EstablishDataConnection(State state_after_connect); |
- |
- void DoCallback(int result); |
- void OnIOComplete(int result); |
- |
- // Executes correct ProcessResponse + command_name function based on last |
- // issued command. Returns error code. |
- int ProcessCtrlResponse(); |
- |
- int SendFtpCommand(const std::string& command, |
- const std::string& command_for_log, |
- Command cmd); |
- |
- // Returns request path suitable to be included in an FTP command. If the path |
- // will be used as a directory, |is_directory| should be true. |
- std::string GetRequestPathForFtpCommand(bool is_directory) const; |
- |
- // See if the request URL contains a typecode and make us respect it. |
- void DetectTypecode(); |
- |
- // Runs the state transition loop. |
- int DoLoop(int result); |
- |
- // Each of these methods corresponds to a State value. Those with an input |
- // argument receive the result from the previous state. If a method returns |
- // ERR_IO_PENDING, then the result from OnIOComplete will be passed to the |
- // next state method as the result arg. |
- int DoCtrlResolveHost(); |
- int DoCtrlResolveHostComplete(int result); |
- int DoCtrlConnect(); |
- int DoCtrlConnectComplete(int result); |
- int DoCtrlRead(); |
- int DoCtrlReadComplete(int result); |
- int DoCtrlWrite(); |
- int DoCtrlWriteComplete(int result); |
- int DoCtrlWriteUSER(); |
- int ProcessResponseUSER(const FtpCtrlResponse& response); |
- int DoCtrlWritePASS(); |
- int ProcessResponsePASS(const FtpCtrlResponse& response); |
- int DoCtrlWriteSYST(); |
- int ProcessResponseSYST(const FtpCtrlResponse& response); |
- int DoCtrlWritePWD(); |
- int ProcessResponsePWD(const FtpCtrlResponse& response); |
- int DoCtrlWriteTYPE(); |
- int ProcessResponseTYPE(const FtpCtrlResponse& response); |
- int DoCtrlWriteEPSV(); |
- int ProcessResponseEPSV(const FtpCtrlResponse& response); |
- int DoCtrlWritePASV(); |
- int ProcessResponsePASV(const FtpCtrlResponse& response); |
- int DoCtrlWriteRETR(); |
- int ProcessResponseRETR(const FtpCtrlResponse& response); |
- int DoCtrlWriteSIZE(); |
- int ProcessResponseSIZE(const FtpCtrlResponse& response); |
- int DoCtrlWriteCWD(); |
- int ProcessResponseCWD(const FtpCtrlResponse& response); |
- int ProcessResponseCWDNotADirectory(); |
- int DoCtrlWriteLIST(); |
- int ProcessResponseLIST(const FtpCtrlResponse& response); |
- int DoCtrlWriteQUIT(); |
- int ProcessResponseQUIT(const FtpCtrlResponse& response); |
- |
- int DoDataConnect(); |
- int DoDataConnectComplete(int result); |
- int DoDataRead(); |
- int DoDataReadComplete(int result); |
- |
- void RecordDataConnectionError(int result); |
- |
- Command command_sent_; |
- |
- CompletionCallback io_callback_; |
- CompletionCallback user_callback_; |
- |
- scoped_refptr<FtpNetworkSession> session_; |
- |
- BoundNetLog net_log_; |
- const FtpRequestInfo* request_; |
- FtpResponseInfo response_; |
- |
- // Cancels the outstanding request on destruction. |
- SingleRequestHostResolver resolver_; |
- AddressList addresses_; |
- |
- // User buffer passed to the Read method for control socket. |
- scoped_refptr<IOBuffer> read_ctrl_buf_; |
- |
- scoped_ptr<FtpCtrlResponseBuffer> ctrl_response_buffer_; |
- |
- scoped_refptr<IOBuffer> read_data_buf_; |
- int read_data_buf_len_; |
- |
- // Buffer holding the command line to be written to the control socket. |
- scoped_refptr<IOBufferWithSize> write_command_buf_; |
- |
- // Buffer passed to the Write method of control socket. It actually writes |
- // to the write_command_buf_ at correct offset. |
- scoped_refptr<DrainableIOBuffer> write_buf_; |
- |
- int last_error_; |
- |
- SystemType system_type_; |
- |
- // Data type to be used for the TYPE command. |
- DataType data_type_; |
- |
- // Detected resource type (file or directory). |
- ResourceType resource_type_; |
- |
- // Initially we favour EPSV over PASV for transfers but should any |
- // EPSV fail, we fall back to PASV for the duration of connection. |
- bool use_epsv_; |
- |
- AuthCredentials credentials_; |
- |
- // Current directory on the remote server, as returned by last PWD command, |
- // with any trailing slash removed. |
- std::string current_remote_directory_; |
- |
- uint16 data_connection_port_; |
- |
- ClientSocketFactory* socket_factory_; |
- |
- scoped_ptr<StreamSocket> ctrl_socket_; |
- scoped_ptr<StreamSocket> data_socket_; |
- |
- State next_state_; |
- |
- // State to switch to after data connection is complete. |
- State state_after_data_connect_complete_; |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_FTP_FTP_NETWORK_TRANSACTION_H_ |