| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2010 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 #include "net/ftp/ftp_network_transaction.h" | 5 #include "net/ftp/ftp_network_transaction.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/histogram.h" | 8 #include "base/histogram.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "net/base/connection_type_histograms.h" | 11 #include "net/base/connection_type_histograms.h" |
| 12 #include "net/base/escape.h" | 12 #include "net/base/escape.h" |
| 13 #include "net/base/load_log.h" | |
| 14 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
| 14 #include "net/base/net_log.h" |
| 15 #include "net/base/net_util.h" | 15 #include "net/base/net_util.h" |
| 16 #include "net/ftp/ftp_network_session.h" | 16 #include "net/ftp/ftp_network_session.h" |
| 17 #include "net/ftp/ftp_request_info.h" | 17 #include "net/ftp/ftp_request_info.h" |
| 18 #include "net/ftp/ftp_util.h" | 18 #include "net/ftp/ftp_util.h" |
| 19 #include "net/socket/client_socket.h" | 19 #include "net/socket/client_socket.h" |
| 20 #include "net/socket/client_socket_factory.h" | 20 #include "net/socket/client_socket_factory.h" |
| 21 | 21 |
| 22 // TODO(ibrar): Try to avoid sscanf. | 22 // TODO(ibrar): Try to avoid sscanf. |
| 23 #if !defined(COMPILER_MSVC) | 23 #if !defined(COMPILER_MSVC) |
| 24 #define sscanf_s sscanf | 24 #define sscanf_s sscanf |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 data_connection_port_(0), | 66 data_connection_port_(0), |
| 67 socket_factory_(socket_factory), | 67 socket_factory_(socket_factory), |
| 68 next_state_(STATE_NONE) { | 68 next_state_(STATE_NONE) { |
| 69 } | 69 } |
| 70 | 70 |
| 71 FtpNetworkTransaction::~FtpNetworkTransaction() { | 71 FtpNetworkTransaction::~FtpNetworkTransaction() { |
| 72 } | 72 } |
| 73 | 73 |
| 74 int FtpNetworkTransaction::Start(const FtpRequestInfo* request_info, | 74 int FtpNetworkTransaction::Start(const FtpRequestInfo* request_info, |
| 75 CompletionCallback* callback, | 75 CompletionCallback* callback, |
| 76 LoadLog* load_log) { | 76 const BoundNetLog& net_log) { |
| 77 load_log_ = load_log; | 77 net_log_ = net_log; |
| 78 request_ = request_info; | 78 request_ = request_info; |
| 79 | 79 |
| 80 if (request_->url.has_username()) { | 80 if (request_->url.has_username()) { |
| 81 GetIdentityFromURL(request_->url, &username_, &password_); | 81 GetIdentityFromURL(request_->url, &username_, &password_); |
| 82 } else { | 82 } else { |
| 83 username_ = L"anonymous"; | 83 username_ = L"anonymous"; |
| 84 password_ = L"chrome@example.com"; | 84 password_ = L"chrome@example.com"; |
| 85 } | 85 } |
| 86 | 86 |
| 87 next_state_ = STATE_CTRL_INIT; | 87 next_state_ = STATE_CTRL_INIT; |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 int port; | 501 int port; |
| 502 | 502 |
| 503 host = request_->url.host(); | 503 host = request_->url.host(); |
| 504 port = request_->url.EffectiveIntPort(); | 504 port = request_->url.EffectiveIntPort(); |
| 505 | 505 |
| 506 HostResolver::RequestInfo info(host, port); | 506 HostResolver::RequestInfo info(host, port); |
| 507 // TODO(wtc): Until we support the FTP extensions for IPv6 specified in | 507 // TODO(wtc): Until we support the FTP extensions for IPv6 specified in |
| 508 // RFC 2428, we have to turn off IPv6 in FTP. See http://crbug.com/32945. | 508 // RFC 2428, we have to turn off IPv6 in FTP. See http://crbug.com/32945. |
| 509 info.set_address_family(ADDRESS_FAMILY_IPV4); | 509 info.set_address_family(ADDRESS_FAMILY_IPV4); |
| 510 // No known referrer. | 510 // No known referrer. |
| 511 return resolver_.Resolve(info, &addresses_, &io_callback_, load_log_); | 511 return resolver_.Resolve(info, &addresses_, &io_callback_, net_log_); |
| 512 } | 512 } |
| 513 | 513 |
| 514 int FtpNetworkTransaction::DoCtrlResolveHostComplete(int result) { | 514 int FtpNetworkTransaction::DoCtrlResolveHostComplete(int result) { |
| 515 if (result == OK) | 515 if (result == OK) |
| 516 next_state_ = STATE_CTRL_CONNECT; | 516 next_state_ = STATE_CTRL_CONNECT; |
| 517 return result; | 517 return result; |
| 518 } | 518 } |
| 519 | 519 |
| 520 int FtpNetworkTransaction::DoCtrlConnect() { | 520 int FtpNetworkTransaction::DoCtrlConnect() { |
| 521 next_state_ = STATE_CTRL_CONNECT_COMPLETE; | 521 next_state_ = STATE_CTRL_CONNECT_COMPLETE; |
| 522 ctrl_socket_.reset(socket_factory_->CreateTCPClientSocket(addresses_)); | 522 ctrl_socket_.reset(socket_factory_->CreateTCPClientSocket(addresses_)); |
| 523 return ctrl_socket_->Connect(&io_callback_, load_log_); | 523 return ctrl_socket_->Connect(&io_callback_, net_log_); |
| 524 } | 524 } |
| 525 | 525 |
| 526 int FtpNetworkTransaction::DoCtrlConnectComplete(int result) { | 526 int FtpNetworkTransaction::DoCtrlConnectComplete(int result) { |
| 527 if (result == OK) | 527 if (result == OK) |
| 528 next_state_ = STATE_CTRL_READ; | 528 next_state_ = STATE_CTRL_READ; |
| 529 return result; | 529 return result; |
| 530 } | 530 } |
| 531 | 531 |
| 532 int FtpNetworkTransaction::DoCtrlRead() { | 532 int FtpNetworkTransaction::DoCtrlRead() { |
| 533 next_state_ = STATE_CTRL_READ_COMPLETE; | 533 next_state_ = STATE_CTRL_READ_COMPLETE; |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1112 int FtpNetworkTransaction::DoDataConnect() { | 1112 int FtpNetworkTransaction::DoDataConnect() { |
| 1113 next_state_ = STATE_DATA_CONNECT_COMPLETE; | 1113 next_state_ = STATE_DATA_CONNECT_COMPLETE; |
| 1114 AddressList data_address; | 1114 AddressList data_address; |
| 1115 // Connect to the same host as the control socket to prevent PASV port | 1115 // Connect to the same host as the control socket to prevent PASV port |
| 1116 // scanning attacks. | 1116 // scanning attacks. |
| 1117 int rv = ctrl_socket_->GetPeerAddress(&data_address); | 1117 int rv = ctrl_socket_->GetPeerAddress(&data_address); |
| 1118 if (rv != OK) | 1118 if (rv != OK) |
| 1119 return Stop(rv); | 1119 return Stop(rv); |
| 1120 data_address.SetPort(data_connection_port_); | 1120 data_address.SetPort(data_connection_port_); |
| 1121 data_socket_.reset(socket_factory_->CreateTCPClientSocket(data_address)); | 1121 data_socket_.reset(socket_factory_->CreateTCPClientSocket(data_address)); |
| 1122 return data_socket_->Connect(&io_callback_, load_log_); | 1122 return data_socket_->Connect(&io_callback_, net_log_); |
| 1123 } | 1123 } |
| 1124 | 1124 |
| 1125 int FtpNetworkTransaction::DoDataConnectComplete(int result) { | 1125 int FtpNetworkTransaction::DoDataConnectComplete(int result) { |
| 1126 RecordDataConnectionError(result); | 1126 RecordDataConnectionError(result); |
| 1127 if (retr_failed_) { | 1127 if (retr_failed_) { |
| 1128 next_state_ = STATE_CTRL_WRITE_CWD; | 1128 next_state_ = STATE_CTRL_WRITE_CWD; |
| 1129 } else { | 1129 } else { |
| 1130 next_state_ = STATE_CTRL_WRITE_SIZE; | 1130 next_state_ = STATE_CTRL_WRITE_SIZE; |
| 1131 } | 1131 } |
| 1132 return OK; | 1132 return OK; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1243 if (!had_error_type[type]) { | 1243 if (!had_error_type[type]) { |
| 1244 had_error_type[type] = true; | 1244 had_error_type[type] = true; |
| 1245 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorHappened", | 1245 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorHappened", |
| 1246 type, NUM_OF_NET_ERROR_TYPES); | 1246 type, NUM_OF_NET_ERROR_TYPES); |
| 1247 } | 1247 } |
| 1248 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorCount", | 1248 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorCount", |
| 1249 type, NUM_OF_NET_ERROR_TYPES); | 1249 type, NUM_OF_NET_ERROR_TYPES); |
| 1250 } | 1250 } |
| 1251 | 1251 |
| 1252 } // namespace net | 1252 } // namespace net |
| OLD | NEW |