| 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 |