OLD | NEW |
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #ifndef NET_FTP_FTP_NETWORK_TRANSACTION_H_ | 5 #ifndef NET_FTP_FTP_NETWORK_TRANSACTION_H_ |
6 #define NET_FTP_FTP_NETWORK_TRANSACTION_H_ | 6 #define NET_FTP_FTP_NETWORK_TRANSACTION_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <queue> | 9 #include <queue> |
10 #include <utility> | 10 #include <utility> |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 // This condition is temporary, and the client is encouraged to restart the | 78 // This condition is temporary, and the client is encouraged to restart the |
79 // command sequence. | 79 // command sequence. |
80 ERROR_CLASS_TRANSIENT_ERROR, | 80 ERROR_CLASS_TRANSIENT_ERROR, |
81 | 81 |
82 // The command was not accepted and the requested action did not take place. | 82 // The command was not accepted and the requested action did not take place. |
83 // This condition is rather permanent, and the client is discouraged from | 83 // This condition is rather permanent, and the client is discouraged from |
84 // repeating the exact request. | 84 // repeating the exact request. |
85 ERROR_CLASS_PERMANENT_ERROR, | 85 ERROR_CLASS_PERMANENT_ERROR, |
86 }; | 86 }; |
87 | 87 |
| 88 // Major categories of remote system types, as returned by SYST command. |
| 89 enum SystemType { |
| 90 SYSTEM_TYPE_UNKNOWN, |
| 91 SYSTEM_TYPE_UNIX, |
| 92 SYSTEM_TYPE_WINDOWS, |
| 93 SYSTEM_TYPE_OS2, |
| 94 SYSTEM_TYPE_VMS, |
| 95 }; |
| 96 |
88 // Resets the members of the transaction so it can be restarted. | 97 // Resets the members of the transaction so it can be restarted. |
89 void ResetStateForRestart(); | 98 void ResetStateForRestart(); |
90 | 99 |
91 void DoCallback(int result); | 100 void DoCallback(int result); |
92 void OnIOComplete(int result); | 101 void OnIOComplete(int result); |
93 | 102 |
94 // Executes correct ProcessResponse + command_name function based on last | 103 // Executes correct ProcessResponse + command_name function based on last |
95 // issued command. Returns error code. | 104 // issued command. Returns error code. |
96 int ProcessCtrlResponse(); | 105 int ProcessCtrlResponse(); |
97 | 106 |
98 int SendFtpCommand(const std::string& command, Command cmd); | 107 int SendFtpCommand(const std::string& command, Command cmd); |
99 | 108 |
100 // Return the error class for given response code. You should validate the | 109 // Return the error class for given response code. You should validate the |
101 // code to be in range 100-599. | 110 // code to be in range 100-599. |
102 static ErrorClass GetErrorClass(int response_code); | 111 static ErrorClass GetErrorClass(int response_code); |
103 | 112 |
104 // Returns request path suitable to be included in an FTP command. | 113 // Returns request path suitable to be included in an FTP command. If the path |
105 std::string GetRequestPathForFtpCommand() const; | 114 // will be used as a directory, |is_directory| should be true. |
| 115 std::string GetRequestPathForFtpCommand(bool is_directory) const; |
106 | 116 |
107 // Runs the state transition loop. | 117 // Runs the state transition loop. |
108 int DoLoop(int result); | 118 int DoLoop(int result); |
109 | 119 |
110 // Each of these methods corresponds to a State value. Those with an input | 120 // Each of these methods corresponds to a State value. Those with an input |
111 // argument receive the result from the previous state. If a method returns | 121 // argument receive the result from the previous state. If a method returns |
112 // ERR_IO_PENDING, then the result from OnIOComplete will be passed to the | 122 // ERR_IO_PENDING, then the result from OnIOComplete will be passed to the |
113 // next state method as the result arg. | 123 // next state method as the result arg. |
114 int DoCtrlInit(); | 124 int DoCtrlInit(); |
115 int DoCtrlInitComplete(int result); | 125 int DoCtrlInitComplete(int result); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 // Buffer passed to the Write method of control socket. It actually writes | 193 // Buffer passed to the Write method of control socket. It actually writes |
184 // to the write_command_buf_ at correct offset. | 194 // to the write_command_buf_ at correct offset. |
185 scoped_refptr<ReusedIOBuffer> write_buf_; | 195 scoped_refptr<ReusedIOBuffer> write_buf_; |
186 | 196 |
187 // Number of bytes from write_command_buf_ that we've already sent to the | 197 // Number of bytes from write_command_buf_ that we've already sent to the |
188 // server. | 198 // server. |
189 int write_command_buf_written_; | 199 int write_command_buf_written_; |
190 | 200 |
191 int last_error_; | 201 int last_error_; |
192 | 202 |
| 203 SystemType system_type_; |
| 204 |
193 // We get username and password as wstrings in RestartWithAuth, so they are | 205 // We get username and password as wstrings in RestartWithAuth, so they are |
194 // also kept as wstrings here. | 206 // also kept as wstrings here. |
195 std::wstring username_; | 207 std::wstring username_; |
196 std::wstring password_; | 208 std::wstring password_; |
197 | 209 |
| 210 // Current directory on the remote server, as returned by last PWD command, |
| 211 // with any trailing slash removed. |
| 212 std::string current_remote_directory_; |
| 213 |
198 bool retr_failed_; | 214 bool retr_failed_; |
199 | 215 |
200 int data_connection_port_; | 216 int data_connection_port_; |
201 | 217 |
202 ClientSocketFactory* socket_factory_; | 218 ClientSocketFactory* socket_factory_; |
203 | 219 |
204 scoped_ptr<ClientSocket> ctrl_socket_; | 220 scoped_ptr<ClientSocket> ctrl_socket_; |
205 scoped_ptr<ClientSocket> data_socket_; | 221 scoped_ptr<ClientSocket> data_socket_; |
206 | 222 |
207 enum State { | 223 enum State { |
(...skipping 27 matching lines...) Expand all Loading... |
235 STATE_DATA_READ, | 251 STATE_DATA_READ, |
236 STATE_DATA_READ_COMPLETE, | 252 STATE_DATA_READ_COMPLETE, |
237 STATE_NONE | 253 STATE_NONE |
238 }; | 254 }; |
239 State next_state_; | 255 State next_state_; |
240 }; | 256 }; |
241 | 257 |
242 } // namespace net | 258 } // namespace net |
243 | 259 |
244 #endif // NET_FTP_FTP_NETWORK_TRANSACTION_H_ | 260 #endif // NET_FTP_FTP_NETWORK_TRANSACTION_H_ |
OLD | NEW |