| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/ftp/ftp_network_transaction.h" | 5 #include "net/ftp/ftp_network_transaction.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 | 8 |
| 9 #include "base/ref_counted.h" | 9 #include "base/ref_counted.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 enum State { | 34 enum State { |
| 35 NONE, | 35 NONE, |
| 36 PRE_USER, | 36 PRE_USER, |
| 37 PRE_PASSWD, | 37 PRE_PASSWD, |
| 38 PRE_SYST, | 38 PRE_SYST, |
| 39 PRE_PWD, | 39 PRE_PWD, |
| 40 PRE_TYPE, | 40 PRE_TYPE, |
| 41 PRE_SIZE, | 41 PRE_SIZE, |
| 42 PRE_EPSV, | 42 PRE_EPSV, |
| 43 PRE_PASV, | 43 PRE_PASV, |
| 44 PRE_MLSD, | |
| 45 PRE_LIST, | 44 PRE_LIST, |
| 46 PRE_RETR, | 45 PRE_RETR, |
| 47 PRE_CWD, | 46 PRE_CWD, |
| 48 PRE_QUIT, | 47 PRE_QUIT, |
| 49 PRE_NOPASV, | 48 PRE_NOPASV, |
| 50 QUIT | 49 QUIT |
| 51 }; | 50 }; |
| 52 | 51 |
| 53 FtpSocketDataProvider() | 52 FtpSocketDataProvider() |
| 54 : failure_injection_state_(NONE), | 53 : failure_injection_state_(NONE), |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 181 } |
| 183 | 182 |
| 184 virtual MockWriteResult OnWrite(const std::string& data) { | 183 virtual MockWriteResult OnWrite(const std::string& data) { |
| 185 if (InjectFault()) | 184 if (InjectFault()) |
| 186 return MockWriteResult(true, data.length()); | 185 return MockWriteResult(true, data.length()); |
| 187 switch (state()) { | 186 switch (state()) { |
| 188 case PRE_SIZE: | 187 case PRE_SIZE: |
| 189 return Verify("SIZE /\r\n", data, PRE_CWD, | 188 return Verify("SIZE /\r\n", data, PRE_CWD, |
| 190 "550 I can only retrieve regular files\r\n"); | 189 "550 I can only retrieve regular files\r\n"); |
| 191 case PRE_CWD: | 190 case PRE_CWD: |
| 192 return Verify("CWD /\r\n", data, PRE_MLSD, "200 OK\r\n"); | 191 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); |
| 193 case PRE_MLSD: | |
| 194 return Verify("MLSD\r\n", data, PRE_QUIT, | |
| 195 "150 Accepted data connection\r\n" | |
| 196 "226 MLSD complete\r\n"); | |
| 197 case PRE_LIST: | 192 case PRE_LIST: |
| 198 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); | 193 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); |
| 199 default: | 194 default: |
| 200 return FtpSocketDataProvider::OnWrite(data); | 195 return FtpSocketDataProvider::OnWrite(data); |
| 201 } | 196 } |
| 202 } | 197 } |
| 203 | 198 |
| 204 private: | 199 private: |
| 205 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); | 200 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); |
| 206 }; | 201 }; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); | 263 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
| 269 case PRE_EPSV: | 264 case PRE_EPSV: |
| 270 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); | 265 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); |
| 271 case PRE_PASV: | 266 case PRE_PASV: |
| 272 return Verify("PASV\r\n", data, PRE_SIZE, | 267 return Verify("PASV\r\n", data, PRE_SIZE, |
| 273 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); | 268 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); |
| 274 case PRE_SIZE: | 269 case PRE_SIZE: |
| 275 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD, | 270 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD, |
| 276 "550 I can only retrieve regular files\r\n"); | 271 "550 I can only retrieve regular files\r\n"); |
| 277 case PRE_CWD: | 272 case PRE_CWD: |
| 278 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_MLSD, | 273 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST, |
| 279 "200 OK\r\n"); | 274 "200 OK\r\n"); |
| 280 case PRE_MLSD: | |
| 281 return Verify("MLSD\r\n", data, PRE_LIST, "500 Invalid command\r\n"); | |
| 282 case PRE_LIST: | 275 case PRE_LIST: |
| 283 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); | 276 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); |
| 284 default: | 277 default: |
| 285 return FtpSocketDataProvider::OnWrite(data); | 278 return FtpSocketDataProvider::OnWrite(data); |
| 286 } | 279 } |
| 287 } | 280 } |
| 288 | 281 |
| 289 private: | 282 private: |
| 290 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); | 283 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); |
| 291 }; | 284 }; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 308 case PRE_EPSV: | 301 case PRE_EPSV: |
| 309 return Verify("EPSV\r\n", data, PRE_PASV, | 302 return Verify("EPSV\r\n", data, PRE_PASV, |
| 310 "500 EPSV command unknown\r\n"); | 303 "500 EPSV command unknown\r\n"); |
| 311 case PRE_PASV: | 304 case PRE_PASV: |
| 312 return Verify("PASV\r\n", data, PRE_SIZE, | 305 return Verify("PASV\r\n", data, PRE_SIZE, |
| 313 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); | 306 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); |
| 314 case PRE_SIZE: | 307 case PRE_SIZE: |
| 315 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD, | 308 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD, |
| 316 "550 I can only retrieve regular files\r\n"); | 309 "550 I can only retrieve regular files\r\n"); |
| 317 case PRE_CWD: | 310 case PRE_CWD: |
| 318 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_MLSD, | 311 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST, |
| 319 "200 OK\r\n"); | 312 "200 OK\r\n"); |
| 320 case PRE_MLSD: | |
| 321 return Verify("MLSD\r\n", data, PRE_LIST, "500 Invalid command\r\n"); | |
| 322 case PRE_LIST: | 313 case PRE_LIST: |
| 323 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); | 314 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); |
| 324 default: | 315 default: |
| 325 return FtpSocketDataProvider::OnWrite(data); | 316 return FtpSocketDataProvider::OnWrite(data); |
| 326 } | 317 } |
| 327 } | 318 } |
| 328 | 319 |
| 329 private: | 320 private: |
| 330 DISALLOW_COPY_AND_ASSIGN( | 321 DISALLOW_COPY_AND_ASSIGN( |
| 331 FtpSocketDataProviderVMSDirectoryListingRootDirectory); | 322 FtpSocketDataProviderVMSDirectoryListingRootDirectory); |
| (...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1322 // Use unallocated 599 FTP error code to make sure it falls into the generic | 1313 // Use unallocated 599 FTP error code to make sure it falls into the generic |
| 1323 // ERR_FTP_FAILED bucket. | 1314 // ERR_FTP_FAILED bucket. |
| 1324 TransactionFailHelper(&ctrl_socket, | 1315 TransactionFailHelper(&ctrl_socket, |
| 1325 "ftp://host", | 1316 "ftp://host", |
| 1326 FtpSocketDataProvider::PRE_CWD, | 1317 FtpSocketDataProvider::PRE_CWD, |
| 1327 FtpSocketDataProvider::PRE_QUIT, | 1318 FtpSocketDataProvider::PRE_QUIT, |
| 1328 "599 fail\r\n", | 1319 "599 fail\r\n", |
| 1329 ERR_FTP_FAILED); | 1320 ERR_FTP_FAILED); |
| 1330 } | 1321 } |
| 1331 | 1322 |
| 1332 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMlsd) { | |
| 1333 FtpSocketDataProviderDirectoryListing ctrl_socket; | |
| 1334 TransactionFailHelper(&ctrl_socket, | |
| 1335 "ftp://host", | |
| 1336 FtpSocketDataProvider::PRE_MLSD, | |
| 1337 FtpSocketDataProvider::PRE_LIST, | |
| 1338 "500 Unrecognized command\r\n", | |
| 1339 OK); | |
| 1340 } | |
| 1341 | |
| 1342 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailList) { | 1323 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailList) { |
| 1343 FtpSocketDataProviderVMSDirectoryListing ctrl_socket; | 1324 FtpSocketDataProviderVMSDirectoryListing ctrl_socket; |
| 1344 // Use unallocated 599 FTP error code to make sure it falls into the generic | 1325 // Use unallocated 599 FTP error code to make sure it falls into the generic |
| 1345 // ERR_FTP_FAILED bucket. | 1326 // ERR_FTP_FAILED bucket. |
| 1346 TransactionFailHelper(&ctrl_socket, | 1327 TransactionFailHelper(&ctrl_socket, |
| 1347 "ftp://host/dir", | 1328 "ftp://host/dir", |
| 1348 FtpSocketDataProvider::PRE_LIST, | 1329 FtpSocketDataProvider::PRE_LIST, |
| 1349 FtpSocketDataProvider::PRE_QUIT, | 1330 FtpSocketDataProvider::PRE_QUIT, |
| 1350 "599 fail\r\n", | 1331 "599 fail\r\n", |
| 1351 ERR_FTP_FAILED); | 1332 ERR_FTP_FAILED); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1443 FtpSocketDataProviderFileDownload ctrl_socket; | 1424 FtpSocketDataProviderFileDownload ctrl_socket; |
| 1444 TransactionFailHelper(&ctrl_socket, | 1425 TransactionFailHelper(&ctrl_socket, |
| 1445 "ftp://host/file", | 1426 "ftp://host/file", |
| 1446 FtpSocketDataProvider::PRE_PWD, | 1427 FtpSocketDataProvider::PRE_PWD, |
| 1447 FtpSocketDataProvider::PRE_TYPE, | 1428 FtpSocketDataProvider::PRE_TYPE, |
| 1448 "257 \"\"\r\n", | 1429 "257 \"\"\r\n", |
| 1449 OK); | 1430 OK); |
| 1450 } | 1431 } |
| 1451 | 1432 |
| 1452 } // namespace net | 1433 } // namespace net |
| OLD | NEW |