OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 }; | 56 }; |
57 | 57 |
58 FtpSocketDataProvider() | 58 FtpSocketDataProvider() |
59 : failure_injection_state_(NONE), | 59 : failure_injection_state_(NONE), |
60 multiline_welcome_(false), | 60 multiline_welcome_(false), |
61 use_epsv_(true), | 61 use_epsv_(true), |
62 data_type_('I') { | 62 data_type_('I') { |
63 Init(); | 63 Init(); |
64 } | 64 } |
65 | 65 |
66 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 66 virtual MockWriteResult OnWrite(const std::string& data) override { |
67 if (InjectFault()) | 67 if (InjectFault()) |
68 return MockWriteResult(ASYNC, data.length()); | 68 return MockWriteResult(ASYNC, data.length()); |
69 switch (state()) { | 69 switch (state()) { |
70 case PRE_USER: | 70 case PRE_USER: |
71 return Verify("USER anonymous\r\n", data, PRE_PASSWD, | 71 return Verify("USER anonymous\r\n", data, PRE_PASSWD, |
72 "331 Password needed\r\n"); | 72 "331 Password needed\r\n"); |
73 case PRE_PASSWD: | 73 case PRE_PASSWD: |
74 { | 74 { |
75 const char* response_one = "230 Welcome\r\n"; | 75 const char* response_one = "230 Welcome\r\n"; |
76 const char* response_multi = "230- One\r\n230- Two\r\n230 Three\r\n"; | 76 const char* response_multi = "230- One\r\n230- Two\r\n230 Three\r\n"; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 DCHECK_NE(state, next_state); | 124 DCHECK_NE(state, next_state); |
125 failure_injection_state_ = state; | 125 failure_injection_state_ = state; |
126 failure_injection_next_state_ = next_state; | 126 failure_injection_next_state_ = next_state; |
127 fault_response_ = response; | 127 fault_response_ = response; |
128 } | 128 } |
129 | 129 |
130 State state() const { | 130 State state() const { |
131 return state_; | 131 return state_; |
132 } | 132 } |
133 | 133 |
134 virtual void Reset() OVERRIDE { | 134 virtual void Reset() override { |
135 DynamicSocketDataProvider::Reset(); | 135 DynamicSocketDataProvider::Reset(); |
136 Init(); | 136 Init(); |
137 } | 137 } |
138 | 138 |
139 void set_multiline_welcome(bool multiline) { multiline_welcome_ = multiline; } | 139 void set_multiline_welcome(bool multiline) { multiline_welcome_ = multiline; } |
140 | 140 |
141 bool use_epsv() const { return use_epsv_; } | 141 bool use_epsv() const { return use_epsv_; } |
142 void set_use_epsv(bool use_epsv) { use_epsv_ = use_epsv; } | 142 void set_use_epsv(bool use_epsv) { use_epsv_ = use_epsv; } |
143 | 143 |
144 void set_data_type(char data_type) { data_type_ = data_type; } | 144 void set_data_type(char data_type) { data_type_ = data_type; } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 char data_type_; | 198 char data_type_; |
199 | 199 |
200 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProvider); | 200 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProvider); |
201 }; | 201 }; |
202 | 202 |
203 class FtpSocketDataProviderDirectoryListing : public FtpSocketDataProvider { | 203 class FtpSocketDataProviderDirectoryListing : public FtpSocketDataProvider { |
204 public: | 204 public: |
205 FtpSocketDataProviderDirectoryListing() { | 205 FtpSocketDataProviderDirectoryListing() { |
206 } | 206 } |
207 | 207 |
208 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 208 virtual MockWriteResult OnWrite(const std::string& data) override { |
209 if (InjectFault()) | 209 if (InjectFault()) |
210 return MockWriteResult(ASYNC, data.length()); | 210 return MockWriteResult(ASYNC, data.length()); |
211 switch (state()) { | 211 switch (state()) { |
212 case PRE_SIZE: | 212 case PRE_SIZE: |
213 return Verify("SIZE /\r\n", data, | 213 return Verify("SIZE /\r\n", data, |
214 use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV, | 214 use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV, |
215 "550 I can only retrieve regular files\r\n"); | 215 "550 I can only retrieve regular files\r\n"); |
216 case PRE_CWD: | 216 case PRE_CWD: |
217 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); | 217 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); |
218 case PRE_LIST: | 218 case PRE_LIST: |
219 return Verify("LIST -l\r\n", data, PRE_QUIT, "200 OK\r\n"); | 219 return Verify("LIST -l\r\n", data, PRE_QUIT, "200 OK\r\n"); |
220 default: | 220 default: |
221 return FtpSocketDataProvider::OnWrite(data); | 221 return FtpSocketDataProvider::OnWrite(data); |
222 } | 222 } |
223 } | 223 } |
224 | 224 |
225 private: | 225 private: |
226 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); | 226 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); |
227 }; | 227 }; |
228 | 228 |
229 class FtpSocketDataProviderDirectoryListingWithPasvFallback | 229 class FtpSocketDataProviderDirectoryListingWithPasvFallback |
230 : public FtpSocketDataProviderDirectoryListing { | 230 : public FtpSocketDataProviderDirectoryListing { |
231 public: | 231 public: |
232 FtpSocketDataProviderDirectoryListingWithPasvFallback() { | 232 FtpSocketDataProviderDirectoryListingWithPasvFallback() { |
233 } | 233 } |
234 | 234 |
235 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 235 virtual MockWriteResult OnWrite(const std::string& data) override { |
236 if (InjectFault()) | 236 if (InjectFault()) |
237 return MockWriteResult(ASYNC, data.length()); | 237 return MockWriteResult(ASYNC, data.length()); |
238 switch (state()) { | 238 switch (state()) { |
239 case PRE_EPSV: | 239 case PRE_EPSV: |
240 return Verify("EPSV\r\n", data, PRE_PASV, | 240 return Verify("EPSV\r\n", data, PRE_PASV, |
241 "500 no EPSV for you\r\n"); | 241 "500 no EPSV for you\r\n"); |
242 case PRE_SIZE: | 242 case PRE_SIZE: |
243 return Verify("SIZE /\r\n", data, PRE_CWD_PASV, | 243 return Verify("SIZE /\r\n", data, PRE_CWD_PASV, |
244 "550 I can only retrieve regular files\r\n"); | 244 "550 I can only retrieve regular files\r\n"); |
245 default: | 245 default: |
246 return FtpSocketDataProviderDirectoryListing::OnWrite(data); | 246 return FtpSocketDataProviderDirectoryListing::OnWrite(data); |
247 } | 247 } |
248 } | 248 } |
249 | 249 |
250 private: | 250 private: |
251 DISALLOW_COPY_AND_ASSIGN( | 251 DISALLOW_COPY_AND_ASSIGN( |
252 FtpSocketDataProviderDirectoryListingWithPasvFallback); | 252 FtpSocketDataProviderDirectoryListingWithPasvFallback); |
253 }; | 253 }; |
254 | 254 |
255 class FtpSocketDataProviderDirectoryListingZeroSize | 255 class FtpSocketDataProviderDirectoryListingZeroSize |
256 : public FtpSocketDataProviderDirectoryListing { | 256 : public FtpSocketDataProviderDirectoryListing { |
257 public: | 257 public: |
258 FtpSocketDataProviderDirectoryListingZeroSize() { | 258 FtpSocketDataProviderDirectoryListingZeroSize() { |
259 } | 259 } |
260 | 260 |
261 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 261 virtual MockWriteResult OnWrite(const std::string& data) override { |
262 if (InjectFault()) | 262 if (InjectFault()) |
263 return MockWriteResult(ASYNC, data.length()); | 263 return MockWriteResult(ASYNC, data.length()); |
264 switch (state()) { | 264 switch (state()) { |
265 case PRE_SIZE: | 265 case PRE_SIZE: |
266 return Verify("SIZE /\r\n", data, PRE_CWD, "213 0\r\n"); | 266 return Verify("SIZE /\r\n", data, PRE_CWD, "213 0\r\n"); |
267 default: | 267 default: |
268 return FtpSocketDataProviderDirectoryListing::OnWrite(data); | 268 return FtpSocketDataProviderDirectoryListing::OnWrite(data); |
269 } | 269 } |
270 } | 270 } |
271 | 271 |
272 private: | 272 private: |
273 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListingZeroSize); | 273 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListingZeroSize); |
274 }; | 274 }; |
275 | 275 |
276 class FtpSocketDataProviderVMSDirectoryListing : public FtpSocketDataProvider { | 276 class FtpSocketDataProviderVMSDirectoryListing : public FtpSocketDataProvider { |
277 public: | 277 public: |
278 FtpSocketDataProviderVMSDirectoryListing() { | 278 FtpSocketDataProviderVMSDirectoryListing() { |
279 } | 279 } |
280 | 280 |
281 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 281 virtual MockWriteResult OnWrite(const std::string& data) override { |
282 if (InjectFault()) | 282 if (InjectFault()) |
283 return MockWriteResult(ASYNC, data.length()); | 283 return MockWriteResult(ASYNC, data.length()); |
284 switch (state()) { | 284 switch (state()) { |
285 case PRE_SYST: | 285 case PRE_SYST: |
286 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); | 286 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); |
287 case PRE_PWD: | 287 case PRE_PWD: |
288 return Verify("PWD\r\n", data, PRE_TYPE, | 288 return Verify("PWD\r\n", data, PRE_TYPE, |
289 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); | 289 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
290 case PRE_EPSV: | 290 case PRE_EPSV: |
291 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); | 291 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); |
(...skipping 13 matching lines...) Expand all Loading... |
305 private: | 305 private: |
306 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); | 306 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); |
307 }; | 307 }; |
308 | 308 |
309 class FtpSocketDataProviderVMSDirectoryListingRootDirectory | 309 class FtpSocketDataProviderVMSDirectoryListingRootDirectory |
310 : public FtpSocketDataProvider { | 310 : public FtpSocketDataProvider { |
311 public: | 311 public: |
312 FtpSocketDataProviderVMSDirectoryListingRootDirectory() { | 312 FtpSocketDataProviderVMSDirectoryListingRootDirectory() { |
313 } | 313 } |
314 | 314 |
315 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 315 virtual MockWriteResult OnWrite(const std::string& data) override { |
316 if (InjectFault()) | 316 if (InjectFault()) |
317 return MockWriteResult(ASYNC, data.length()); | 317 return MockWriteResult(ASYNC, data.length()); |
318 switch (state()) { | 318 switch (state()) { |
319 case PRE_SYST: | 319 case PRE_SYST: |
320 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); | 320 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); |
321 case PRE_PWD: | 321 case PRE_PWD: |
322 return Verify("PWD\r\n", data, PRE_TYPE, | 322 return Verify("PWD\r\n", data, PRE_TYPE, |
323 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); | 323 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
324 case PRE_EPSV: | 324 case PRE_EPSV: |
325 return Verify("EPSV\r\n", data, PRE_PASV, | 325 return Verify("EPSV\r\n", data, PRE_PASV, |
(...skipping 15 matching lines...) Expand all Loading... |
341 DISALLOW_COPY_AND_ASSIGN( | 341 DISALLOW_COPY_AND_ASSIGN( |
342 FtpSocketDataProviderVMSDirectoryListingRootDirectory); | 342 FtpSocketDataProviderVMSDirectoryListingRootDirectory); |
343 }; | 343 }; |
344 | 344 |
345 class FtpSocketDataProviderFileDownloadWithFileTypecode | 345 class FtpSocketDataProviderFileDownloadWithFileTypecode |
346 : public FtpSocketDataProvider { | 346 : public FtpSocketDataProvider { |
347 public: | 347 public: |
348 FtpSocketDataProviderFileDownloadWithFileTypecode() { | 348 FtpSocketDataProviderFileDownloadWithFileTypecode() { |
349 } | 349 } |
350 | 350 |
351 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 351 virtual MockWriteResult OnWrite(const std::string& data) override { |
352 if (InjectFault()) | 352 if (InjectFault()) |
353 return MockWriteResult(ASYNC, data.length()); | 353 return MockWriteResult(ASYNC, data.length()); |
354 switch (state()) { | 354 switch (state()) { |
355 case PRE_SIZE: | 355 case PRE_SIZE: |
356 return Verify("SIZE /file\r\n", data, PRE_RETR, | 356 return Verify("SIZE /file\r\n", data, PRE_RETR, |
357 "213 18\r\n"); | 357 "213 18\r\n"); |
358 case PRE_RETR: | 358 case PRE_RETR: |
359 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); | 359 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); |
360 default: | 360 default: |
361 return FtpSocketDataProvider::OnWrite(data); | 361 return FtpSocketDataProvider::OnWrite(data); |
362 } | 362 } |
363 } | 363 } |
364 | 364 |
365 private: | 365 private: |
366 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithFileTypecode); | 366 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithFileTypecode); |
367 }; | 367 }; |
368 | 368 |
369 class FtpSocketDataProviderFileDownload : public FtpSocketDataProvider { | 369 class FtpSocketDataProviderFileDownload : public FtpSocketDataProvider { |
370 public: | 370 public: |
371 FtpSocketDataProviderFileDownload() { | 371 FtpSocketDataProviderFileDownload() { |
372 } | 372 } |
373 | 373 |
374 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 374 virtual MockWriteResult OnWrite(const std::string& data) override { |
375 if (InjectFault()) | 375 if (InjectFault()) |
376 return MockWriteResult(ASYNC, data.length()); | 376 return MockWriteResult(ASYNC, data.length()); |
377 switch (state()) { | 377 switch (state()) { |
378 case PRE_SIZE: | 378 case PRE_SIZE: |
379 return Verify("SIZE /file\r\n", data, PRE_CWD, | 379 return Verify("SIZE /file\r\n", data, PRE_CWD, |
380 "213 18\r\n"); | 380 "213 18\r\n"); |
381 case PRE_CWD: | 381 case PRE_CWD: |
382 return Verify("CWD /file\r\n", data, | 382 return Verify("CWD /file\r\n", data, |
383 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, | 383 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, |
384 "550 Not a directory\r\n"); | 384 "550 Not a directory\r\n"); |
385 case PRE_RETR: | 385 case PRE_RETR: |
386 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); | 386 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); |
387 default: | 387 default: |
388 return FtpSocketDataProvider::OnWrite(data); | 388 return FtpSocketDataProvider::OnWrite(data); |
389 } | 389 } |
390 } | 390 } |
391 | 391 |
392 private: | 392 private: |
393 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownload); | 393 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownload); |
394 }; | 394 }; |
395 | 395 |
396 class FtpSocketDataProviderFileNotFound : public FtpSocketDataProvider { | 396 class FtpSocketDataProviderFileNotFound : public FtpSocketDataProvider { |
397 public: | 397 public: |
398 FtpSocketDataProviderFileNotFound() { | 398 FtpSocketDataProviderFileNotFound() { |
399 } | 399 } |
400 | 400 |
401 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 401 virtual MockWriteResult OnWrite(const std::string& data) override { |
402 if (InjectFault()) | 402 if (InjectFault()) |
403 return MockWriteResult(ASYNC, data.length()); | 403 return MockWriteResult(ASYNC, data.length()); |
404 switch (state()) { | 404 switch (state()) { |
405 case PRE_SIZE: | 405 case PRE_SIZE: |
406 return Verify("SIZE /file\r\n", data, | 406 return Verify("SIZE /file\r\n", data, |
407 use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV, | 407 use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV, |
408 "550 File Not Found\r\n"); | 408 "550 File Not Found\r\n"); |
409 case PRE_CWD: | 409 case PRE_CWD: |
410 return Verify("CWD /file\r\n", data, | 410 return Verify("CWD /file\r\n", data, |
411 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, | 411 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, |
412 "550 File Not Found\r\n"); | 412 "550 File Not Found\r\n"); |
413 case PRE_RETR: | 413 case PRE_RETR: |
414 return Verify("RETR /file\r\n", data, PRE_QUIT, | 414 return Verify("RETR /file\r\n", data, PRE_QUIT, |
415 "550 File Not Found\r\n"); | 415 "550 File Not Found\r\n"); |
416 default: | 416 default: |
417 return FtpSocketDataProvider::OnWrite(data); | 417 return FtpSocketDataProvider::OnWrite(data); |
418 } | 418 } |
419 } | 419 } |
420 | 420 |
421 private: | 421 private: |
422 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileNotFound); | 422 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileNotFound); |
423 }; | 423 }; |
424 | 424 |
425 class FtpSocketDataProviderFileDownloadWithPasvFallback | 425 class FtpSocketDataProviderFileDownloadWithPasvFallback |
426 : public FtpSocketDataProviderFileDownload { | 426 : public FtpSocketDataProviderFileDownload { |
427 public: | 427 public: |
428 FtpSocketDataProviderFileDownloadWithPasvFallback() { | 428 FtpSocketDataProviderFileDownloadWithPasvFallback() { |
429 } | 429 } |
430 | 430 |
431 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 431 virtual MockWriteResult OnWrite(const std::string& data) override { |
432 if (InjectFault()) | 432 if (InjectFault()) |
433 return MockWriteResult(ASYNC, data.length()); | 433 return MockWriteResult(ASYNC, data.length()); |
434 switch (state()) { | 434 switch (state()) { |
435 case PRE_EPSV: | 435 case PRE_EPSV: |
436 return Verify("EPSV\r\n", data, PRE_PASV, | 436 return Verify("EPSV\r\n", data, PRE_PASV, |
437 "500 No can do\r\n"); | 437 "500 No can do\r\n"); |
438 case PRE_CWD: | 438 case PRE_CWD: |
439 return Verify("CWD /file\r\n", data, PRE_RETR_PASV, | 439 return Verify("CWD /file\r\n", data, PRE_RETR_PASV, |
440 "550 Not a directory\r\n"); | 440 "550 Not a directory\r\n"); |
441 default: | 441 default: |
442 return FtpSocketDataProviderFileDownload::OnWrite(data); | 442 return FtpSocketDataProviderFileDownload::OnWrite(data); |
443 } | 443 } |
444 } | 444 } |
445 | 445 |
446 private: | 446 private: |
447 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithPasvFallback); | 447 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadWithPasvFallback); |
448 }; | 448 }; |
449 | 449 |
450 class FtpSocketDataProviderFileDownloadZeroSize | 450 class FtpSocketDataProviderFileDownloadZeroSize |
451 : public FtpSocketDataProviderFileDownload { | 451 : public FtpSocketDataProviderFileDownload { |
452 public: | 452 public: |
453 FtpSocketDataProviderFileDownloadZeroSize() { | 453 FtpSocketDataProviderFileDownloadZeroSize() { |
454 } | 454 } |
455 | 455 |
456 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 456 virtual MockWriteResult OnWrite(const std::string& data) override { |
457 if (InjectFault()) | 457 if (InjectFault()) |
458 return MockWriteResult(ASYNC, data.length()); | 458 return MockWriteResult(ASYNC, data.length()); |
459 switch (state()) { | 459 switch (state()) { |
460 case PRE_SIZE: | 460 case PRE_SIZE: |
461 return Verify("SIZE /file\r\n", data, PRE_CWD, | 461 return Verify("SIZE /file\r\n", data, PRE_CWD, |
462 "213 0\r\n"); | 462 "213 0\r\n"); |
463 case PRE_CWD: | 463 case PRE_CWD: |
464 return Verify("CWD /file\r\n", data, | 464 return Verify("CWD /file\r\n", data, |
465 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, | 465 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, |
466 "550 not a directory\r\n"); | 466 "550 not a directory\r\n"); |
467 default: | 467 default: |
468 return FtpSocketDataProviderFileDownload::OnWrite(data); | 468 return FtpSocketDataProviderFileDownload::OnWrite(data); |
469 } | 469 } |
470 } | 470 } |
471 | 471 |
472 private: | 472 private: |
473 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadZeroSize); | 473 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadZeroSize); |
474 }; | 474 }; |
475 | 475 |
476 class FtpSocketDataProviderFileDownloadCWD451 | 476 class FtpSocketDataProviderFileDownloadCWD451 |
477 : public FtpSocketDataProviderFileDownload { | 477 : public FtpSocketDataProviderFileDownload { |
478 public: | 478 public: |
479 FtpSocketDataProviderFileDownloadCWD451() { | 479 FtpSocketDataProviderFileDownloadCWD451() { |
480 } | 480 } |
481 | 481 |
482 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 482 virtual MockWriteResult OnWrite(const std::string& data) override { |
483 if (InjectFault()) | 483 if (InjectFault()) |
484 return MockWriteResult(ASYNC, data.length()); | 484 return MockWriteResult(ASYNC, data.length()); |
485 switch (state()) { | 485 switch (state()) { |
486 case PRE_CWD: | 486 case PRE_CWD: |
487 return Verify("CWD /file\r\n", data, | 487 return Verify("CWD /file\r\n", data, |
488 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, | 488 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, |
489 "451 not a directory\r\n"); | 489 "451 not a directory\r\n"); |
490 default: | 490 default: |
491 return FtpSocketDataProviderFileDownload::OnWrite(data); | 491 return FtpSocketDataProviderFileDownload::OnWrite(data); |
492 } | 492 } |
493 } | 493 } |
494 | 494 |
495 private: | 495 private: |
496 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadCWD451); | 496 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadCWD451); |
497 }; | 497 }; |
498 | 498 |
499 class FtpSocketDataProviderVMSFileDownload : public FtpSocketDataProvider { | 499 class FtpSocketDataProviderVMSFileDownload : public FtpSocketDataProvider { |
500 public: | 500 public: |
501 FtpSocketDataProviderVMSFileDownload() { | 501 FtpSocketDataProviderVMSFileDownload() { |
502 } | 502 } |
503 | 503 |
504 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 504 virtual MockWriteResult OnWrite(const std::string& data) override { |
505 if (InjectFault()) | 505 if (InjectFault()) |
506 return MockWriteResult(ASYNC, data.length()); | 506 return MockWriteResult(ASYNC, data.length()); |
507 switch (state()) { | 507 switch (state()) { |
508 case PRE_SYST: | 508 case PRE_SYST: |
509 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); | 509 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); |
510 case PRE_PWD: | 510 case PRE_PWD: |
511 return Verify("PWD\r\n", data, PRE_TYPE, | 511 return Verify("PWD\r\n", data, PRE_TYPE, |
512 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); | 512 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
513 case PRE_EPSV: | 513 case PRE_EPSV: |
514 return Verify("EPSV\r\n", data, PRE_PASV, | 514 return Verify("EPSV\r\n", data, PRE_PASV, |
(...skipping 14 matching lines...) Expand all Loading... |
529 | 529 |
530 private: | 530 private: |
531 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSFileDownload); | 531 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSFileDownload); |
532 }; | 532 }; |
533 | 533 |
534 class FtpSocketDataProviderEscaping : public FtpSocketDataProviderFileDownload { | 534 class FtpSocketDataProviderEscaping : public FtpSocketDataProviderFileDownload { |
535 public: | 535 public: |
536 FtpSocketDataProviderEscaping() { | 536 FtpSocketDataProviderEscaping() { |
537 } | 537 } |
538 | 538 |
539 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 539 virtual MockWriteResult OnWrite(const std::string& data) override { |
540 if (InjectFault()) | 540 if (InjectFault()) |
541 return MockWriteResult(ASYNC, data.length()); | 541 return MockWriteResult(ASYNC, data.length()); |
542 switch (state()) { | 542 switch (state()) { |
543 case PRE_SIZE: | 543 case PRE_SIZE: |
544 return Verify("SIZE / !\"#$%y\200\201\r\n", data, PRE_CWD, | 544 return Verify("SIZE / !\"#$%y\200\201\r\n", data, PRE_CWD, |
545 "213 18\r\n"); | 545 "213 18\r\n"); |
546 case PRE_CWD: | 546 case PRE_CWD: |
547 return Verify("CWD / !\"#$%y\200\201\r\n", data, | 547 return Verify("CWD / !\"#$%y\200\201\r\n", data, |
548 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, | 548 use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, |
549 "550 Not a directory\r\n"); | 549 "550 Not a directory\r\n"); |
550 case PRE_RETR: | 550 case PRE_RETR: |
551 return Verify("RETR / !\"#$%y\200\201\r\n", data, PRE_QUIT, | 551 return Verify("RETR / !\"#$%y\200\201\r\n", data, PRE_QUIT, |
552 "200 OK\r\n"); | 552 "200 OK\r\n"); |
553 default: | 553 default: |
554 return FtpSocketDataProviderFileDownload::OnWrite(data); | 554 return FtpSocketDataProviderFileDownload::OnWrite(data); |
555 } | 555 } |
556 } | 556 } |
557 | 557 |
558 private: | 558 private: |
559 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEscaping); | 559 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEscaping); |
560 }; | 560 }; |
561 | 561 |
562 class FtpSocketDataProviderFileDownloadTransferStarting | 562 class FtpSocketDataProviderFileDownloadTransferStarting |
563 : public FtpSocketDataProviderFileDownload { | 563 : public FtpSocketDataProviderFileDownload { |
564 public: | 564 public: |
565 FtpSocketDataProviderFileDownloadTransferStarting() { | 565 FtpSocketDataProviderFileDownloadTransferStarting() { |
566 } | 566 } |
567 | 567 |
568 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 568 virtual MockWriteResult OnWrite(const std::string& data) override { |
569 if (InjectFault()) | 569 if (InjectFault()) |
570 return MockWriteResult(ASYNC, data.length()); | 570 return MockWriteResult(ASYNC, data.length()); |
571 switch (state()) { | 571 switch (state()) { |
572 case PRE_RETR: | 572 case PRE_RETR: |
573 return Verify("RETR /file\r\n", data, PRE_QUIT, | 573 return Verify("RETR /file\r\n", data, PRE_QUIT, |
574 "125-Data connection already open.\r\n" | 574 "125-Data connection already open.\r\n" |
575 "125 Transfer starting.\r\n" | 575 "125 Transfer starting.\r\n" |
576 "226 Transfer complete.\r\n"); | 576 "226 Transfer complete.\r\n"); |
577 default: | 577 default: |
578 return FtpSocketDataProviderFileDownload::OnWrite(data); | 578 return FtpSocketDataProviderFileDownload::OnWrite(data); |
579 } | 579 } |
580 } | 580 } |
581 | 581 |
582 private: | 582 private: |
583 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadTransferStarting); | 583 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadTransferStarting); |
584 }; | 584 }; |
585 | 585 |
586 class FtpSocketDataProviderDirectoryListingTransferStarting | 586 class FtpSocketDataProviderDirectoryListingTransferStarting |
587 : public FtpSocketDataProviderDirectoryListing { | 587 : public FtpSocketDataProviderDirectoryListing { |
588 public: | 588 public: |
589 FtpSocketDataProviderDirectoryListingTransferStarting() { | 589 FtpSocketDataProviderDirectoryListingTransferStarting() { |
590 } | 590 } |
591 | 591 |
592 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 592 virtual MockWriteResult OnWrite(const std::string& data) override { |
593 if (InjectFault()) | 593 if (InjectFault()) |
594 return MockWriteResult(ASYNC, data.length()); | 594 return MockWriteResult(ASYNC, data.length()); |
595 switch (state()) { | 595 switch (state()) { |
596 case PRE_LIST: | 596 case PRE_LIST: |
597 return Verify("LIST -l\r\n", data, PRE_QUIT, | 597 return Verify("LIST -l\r\n", data, PRE_QUIT, |
598 "125-Data connection already open.\r\n" | 598 "125-Data connection already open.\r\n" |
599 "125 Transfer starting.\r\n" | 599 "125 Transfer starting.\r\n" |
600 "226 Transfer complete.\r\n"); | 600 "226 Transfer complete.\r\n"); |
601 default: | 601 default: |
602 return FtpSocketDataProviderDirectoryListing::OnWrite(data); | 602 return FtpSocketDataProviderDirectoryListing::OnWrite(data); |
603 } | 603 } |
604 } | 604 } |
605 | 605 |
606 private: | 606 private: |
607 DISALLOW_COPY_AND_ASSIGN( | 607 DISALLOW_COPY_AND_ASSIGN( |
608 FtpSocketDataProviderDirectoryListingTransferStarting); | 608 FtpSocketDataProviderDirectoryListingTransferStarting); |
609 }; | 609 }; |
610 | 610 |
611 class FtpSocketDataProviderFileDownloadInvalidResponse | 611 class FtpSocketDataProviderFileDownloadInvalidResponse |
612 : public FtpSocketDataProviderFileDownload { | 612 : public FtpSocketDataProviderFileDownload { |
613 public: | 613 public: |
614 FtpSocketDataProviderFileDownloadInvalidResponse() { | 614 FtpSocketDataProviderFileDownloadInvalidResponse() { |
615 } | 615 } |
616 | 616 |
617 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 617 virtual MockWriteResult OnWrite(const std::string& data) override { |
618 if (InjectFault()) | 618 if (InjectFault()) |
619 return MockWriteResult(ASYNC, data.length()); | 619 return MockWriteResult(ASYNC, data.length()); |
620 switch (state()) { | 620 switch (state()) { |
621 case PRE_SIZE: | 621 case PRE_SIZE: |
622 // Use unallocated 599 FTP error code to make sure it falls into the | 622 // Use unallocated 599 FTP error code to make sure it falls into the |
623 // generic ERR_FTP_FAILED bucket. | 623 // generic ERR_FTP_FAILED bucket. |
624 return Verify("SIZE /file\r\n", data, PRE_QUIT, | 624 return Verify("SIZE /file\r\n", data, PRE_QUIT, |
625 "599 Evil Response\r\n" | 625 "599 Evil Response\r\n" |
626 "599 More Evil\r\n"); | 626 "599 More Evil\r\n"); |
627 default: | 627 default: |
(...skipping 13 matching lines...) Expand all Loading... |
641 epsv_response_length_(std::strlen(epsv_response)), | 641 epsv_response_length_(std::strlen(epsv_response)), |
642 expected_state_(expected_state) {} | 642 expected_state_(expected_state) {} |
643 | 643 |
644 FtpSocketDataProviderEvilEpsv(const char* epsv_response, | 644 FtpSocketDataProviderEvilEpsv(const char* epsv_response, |
645 size_t epsv_response_length, | 645 size_t epsv_response_length, |
646 State expected_state) | 646 State expected_state) |
647 : epsv_response_(epsv_response), | 647 : epsv_response_(epsv_response), |
648 epsv_response_length_(epsv_response_length), | 648 epsv_response_length_(epsv_response_length), |
649 expected_state_(expected_state) {} | 649 expected_state_(expected_state) {} |
650 | 650 |
651 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 651 virtual MockWriteResult OnWrite(const std::string& data) override { |
652 if (InjectFault()) | 652 if (InjectFault()) |
653 return MockWriteResult(ASYNC, data.length()); | 653 return MockWriteResult(ASYNC, data.length()); |
654 switch (state()) { | 654 switch (state()) { |
655 case PRE_EPSV: | 655 case PRE_EPSV: |
656 return Verify("EPSV\r\n", data, expected_state_, | 656 return Verify("EPSV\r\n", data, expected_state_, |
657 epsv_response_, epsv_response_length_); | 657 epsv_response_, epsv_response_length_); |
658 default: | 658 default: |
659 return FtpSocketDataProviderFileDownload::OnWrite(data); | 659 return FtpSocketDataProviderFileDownload::OnWrite(data); |
660 } | 660 } |
661 } | 661 } |
662 | 662 |
663 private: | 663 private: |
664 const char* epsv_response_; | 664 const char* epsv_response_; |
665 const size_t epsv_response_length_; | 665 const size_t epsv_response_length_; |
666 const State expected_state_; | 666 const State expected_state_; |
667 | 667 |
668 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilEpsv); | 668 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilEpsv); |
669 }; | 669 }; |
670 | 670 |
671 class FtpSocketDataProviderEvilPasv | 671 class FtpSocketDataProviderEvilPasv |
672 : public FtpSocketDataProviderFileDownloadWithPasvFallback { | 672 : public FtpSocketDataProviderFileDownloadWithPasvFallback { |
673 public: | 673 public: |
674 FtpSocketDataProviderEvilPasv(const char* pasv_response, State expected_state) | 674 FtpSocketDataProviderEvilPasv(const char* pasv_response, State expected_state) |
675 : pasv_response_(pasv_response), | 675 : pasv_response_(pasv_response), |
676 expected_state_(expected_state) { | 676 expected_state_(expected_state) { |
677 } | 677 } |
678 | 678 |
679 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 679 virtual MockWriteResult OnWrite(const std::string& data) override { |
680 if (InjectFault()) | 680 if (InjectFault()) |
681 return MockWriteResult(ASYNC, data.length()); | 681 return MockWriteResult(ASYNC, data.length()); |
682 switch (state()) { | 682 switch (state()) { |
683 case PRE_PASV: | 683 case PRE_PASV: |
684 return Verify("PASV\r\n", data, expected_state_, pasv_response_); | 684 return Verify("PASV\r\n", data, expected_state_, pasv_response_); |
685 default: | 685 default: |
686 return FtpSocketDataProviderFileDownloadWithPasvFallback::OnWrite(data); | 686 return FtpSocketDataProviderFileDownloadWithPasvFallback::OnWrite(data); |
687 } | 687 } |
688 } | 688 } |
689 | 689 |
690 private: | 690 private: |
691 const char* pasv_response_; | 691 const char* pasv_response_; |
692 const State expected_state_; | 692 const State expected_state_; |
693 | 693 |
694 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilPasv); | 694 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilPasv); |
695 }; | 695 }; |
696 | 696 |
697 class FtpSocketDataProviderEvilSize : public FtpSocketDataProviderFileDownload { | 697 class FtpSocketDataProviderEvilSize : public FtpSocketDataProviderFileDownload { |
698 public: | 698 public: |
699 FtpSocketDataProviderEvilSize(const char* size_response, State expected_state) | 699 FtpSocketDataProviderEvilSize(const char* size_response, State expected_state) |
700 : size_response_(size_response), | 700 : size_response_(size_response), |
701 expected_state_(expected_state) { | 701 expected_state_(expected_state) { |
702 } | 702 } |
703 | 703 |
704 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 704 virtual MockWriteResult OnWrite(const std::string& data) override { |
705 if (InjectFault()) | 705 if (InjectFault()) |
706 return MockWriteResult(ASYNC, data.length()); | 706 return MockWriteResult(ASYNC, data.length()); |
707 switch (state()) { | 707 switch (state()) { |
708 case PRE_SIZE: | 708 case PRE_SIZE: |
709 return Verify("SIZE /file\r\n", data, expected_state_, size_response_); | 709 return Verify("SIZE /file\r\n", data, expected_state_, size_response_); |
710 default: | 710 default: |
711 return FtpSocketDataProviderFileDownload::OnWrite(data); | 711 return FtpSocketDataProviderFileDownload::OnWrite(data); |
712 } | 712 } |
713 } | 713 } |
714 | 714 |
715 private: | 715 private: |
716 const char* size_response_; | 716 const char* size_response_; |
717 const State expected_state_; | 717 const State expected_state_; |
718 | 718 |
719 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilSize); | 719 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilSize); |
720 }; | 720 }; |
721 | 721 |
722 class FtpSocketDataProviderEvilLogin | 722 class FtpSocketDataProviderEvilLogin |
723 : public FtpSocketDataProviderFileDownload { | 723 : public FtpSocketDataProviderFileDownload { |
724 public: | 724 public: |
725 FtpSocketDataProviderEvilLogin(const char* expected_user, | 725 FtpSocketDataProviderEvilLogin(const char* expected_user, |
726 const char* expected_password) | 726 const char* expected_password) |
727 : expected_user_(expected_user), | 727 : expected_user_(expected_user), |
728 expected_password_(expected_password) { | 728 expected_password_(expected_password) { |
729 } | 729 } |
730 | 730 |
731 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 731 virtual MockWriteResult OnWrite(const std::string& data) override { |
732 if (InjectFault()) | 732 if (InjectFault()) |
733 return MockWriteResult(ASYNC, data.length()); | 733 return MockWriteResult(ASYNC, data.length()); |
734 switch (state()) { | 734 switch (state()) { |
735 case PRE_USER: | 735 case PRE_USER: |
736 return Verify(std::string("USER ") + expected_user_ + "\r\n", data, | 736 return Verify(std::string("USER ") + expected_user_ + "\r\n", data, |
737 PRE_PASSWD, "331 Password needed\r\n"); | 737 PRE_PASSWD, "331 Password needed\r\n"); |
738 case PRE_PASSWD: | 738 case PRE_PASSWD: |
739 return Verify(std::string("PASS ") + expected_password_ + "\r\n", data, | 739 return Verify(std::string("PASS ") + expected_password_ + "\r\n", data, |
740 PRE_SYST, "230 Welcome\r\n"); | 740 PRE_SYST, "230 Welcome\r\n"); |
741 default: | 741 default: |
742 return FtpSocketDataProviderFileDownload::OnWrite(data); | 742 return FtpSocketDataProviderFileDownload::OnWrite(data); |
743 } | 743 } |
744 } | 744 } |
745 | 745 |
746 private: | 746 private: |
747 const char* expected_user_; | 747 const char* expected_user_; |
748 const char* expected_password_; | 748 const char* expected_password_; |
749 | 749 |
750 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilLogin); | 750 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilLogin); |
751 }; | 751 }; |
752 | 752 |
753 class FtpSocketDataProviderCloseConnection : public FtpSocketDataProvider { | 753 class FtpSocketDataProviderCloseConnection : public FtpSocketDataProvider { |
754 public: | 754 public: |
755 FtpSocketDataProviderCloseConnection() { | 755 FtpSocketDataProviderCloseConnection() { |
756 } | 756 } |
757 | 757 |
758 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE { | 758 virtual MockWriteResult OnWrite(const std::string& data) override { |
759 if (InjectFault()) | 759 if (InjectFault()) |
760 return MockWriteResult(ASYNC, data.length()); | 760 return MockWriteResult(ASYNC, data.length()); |
761 switch (state()) { | 761 switch (state()) { |
762 case PRE_USER: | 762 case PRE_USER: |
763 return Verify("USER anonymous\r\n", data, | 763 return Verify("USER anonymous\r\n", data, |
764 PRE_QUIT, ""); | 764 PRE_QUIT, ""); |
765 default: | 765 default: |
766 return FtpSocketDataProvider::OnWrite(data); | 766 return FtpSocketDataProvider::OnWrite(data); |
767 } | 767 } |
768 } | 768 } |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1594 FtpSocketDataProvider::PRE_TYPE, | 1594 FtpSocketDataProvider::PRE_TYPE, |
1595 "257 \"\"\r\n", | 1595 "257 \"\"\r\n", |
1596 OK); | 1596 OK); |
1597 } | 1597 } |
1598 | 1598 |
1599 INSTANTIATE_TEST_CASE_P(FTP, | 1599 INSTANTIATE_TEST_CASE_P(FTP, |
1600 FtpNetworkTransactionTest, | 1600 FtpNetworkTransactionTest, |
1601 ::testing::Values(AF_INET, AF_INET6)); | 1601 ::testing::Values(AF_INET, AF_INET6)); |
1602 | 1602 |
1603 } // namespace net | 1603 } // namespace net |
OLD | NEW |