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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 | 312 |
313 if (command_sent_ == COMMAND_QUIT) | 313 if (command_sent_ == COMMAND_QUIT) |
314 return LOAD_STATE_IDLE; | 314 return LOAD_STATE_IDLE; |
315 | 315 |
316 if (command_sent_ != COMMAND_NONE) | 316 if (command_sent_ != COMMAND_NONE) |
317 return LOAD_STATE_SENDING_REQUEST; | 317 return LOAD_STATE_SENDING_REQUEST; |
318 | 318 |
319 return LOAD_STATE_IDLE; | 319 return LOAD_STATE_IDLE; |
320 } | 320 } |
321 | 321 |
322 uint64 FtpNetworkTransaction::GetUploadProgress() const { | 322 uint64_t FtpNetworkTransaction::GetUploadProgress() const { |
323 return 0; | 323 return 0; |
324 } | 324 } |
325 | 325 |
326 void FtpNetworkTransaction::ResetStateForRestart() { | 326 void FtpNetworkTransaction::ResetStateForRestart() { |
327 command_sent_ = COMMAND_NONE; | 327 command_sent_ = COMMAND_NONE; |
328 user_callback_.Reset(); | 328 user_callback_.Reset(); |
329 response_ = FtpResponseInfo(); | 329 response_ = FtpResponseInfo(); |
330 read_ctrl_buf_ = new IOBuffer(kCtrlBufLen); | 330 read_ctrl_buf_ = new IOBuffer(kCtrlBufLen); |
331 ctrl_response_buffer_.reset(new FtpCtrlResponseBuffer(net_log_)); | 331 ctrl_response_buffer_.reset(new FtpCtrlResponseBuffer(net_log_)); |
332 read_data_buf_ = NULL; | 332 read_data_buf_ = NULL; |
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
954 case ERROR_CLASS_INITIATED: | 954 case ERROR_CLASS_INITIATED: |
955 return Stop(ERR_INVALID_RESPONSE); | 955 return Stop(ERR_INVALID_RESPONSE); |
956 case ERROR_CLASS_OK: { | 956 case ERROR_CLASS_OK: { |
957 int port; | 957 int port; |
958 if (!ExtractPortFromEPSVResponse(response, &port)) | 958 if (!ExtractPortFromEPSVResponse(response, &port)) |
959 return Stop(ERR_INVALID_RESPONSE); | 959 return Stop(ERR_INVALID_RESPONSE); |
960 if (IsWellKnownPort(port) || | 960 if (IsWellKnownPort(port) || |
961 !IsPortAllowedForScheme(port, url::kFtpScheme)) { | 961 !IsPortAllowedForScheme(port, url::kFtpScheme)) { |
962 return Stop(ERR_UNSAFE_PORT); | 962 return Stop(ERR_UNSAFE_PORT); |
963 } | 963 } |
964 data_connection_port_ = static_cast<uint16>(port); | 964 data_connection_port_ = static_cast<uint16_t>(port); |
965 next_state_ = STATE_DATA_CONNECT; | 965 next_state_ = STATE_DATA_CONNECT; |
966 break; | 966 break; |
967 } | 967 } |
968 case ERROR_CLASS_INFO_NEEDED: | 968 case ERROR_CLASS_INFO_NEEDED: |
969 return Stop(ERR_INVALID_RESPONSE); | 969 return Stop(ERR_INVALID_RESPONSE); |
970 case ERROR_CLASS_TRANSIENT_ERROR: | 970 case ERROR_CLASS_TRANSIENT_ERROR: |
971 case ERROR_CLASS_PERMANENT_ERROR: | 971 case ERROR_CLASS_PERMANENT_ERROR: |
972 use_epsv_ = false; | 972 use_epsv_ = false; |
973 next_state_ = STATE_CTRL_WRITE_PASV; | 973 next_state_ = STATE_CTRL_WRITE_PASV; |
974 return OK; | 974 return OK; |
(...skipping 17 matching lines...) Expand all Loading... |
992 case ERROR_CLASS_INITIATED: | 992 case ERROR_CLASS_INITIATED: |
993 return Stop(ERR_INVALID_RESPONSE); | 993 return Stop(ERR_INVALID_RESPONSE); |
994 case ERROR_CLASS_OK: { | 994 case ERROR_CLASS_OK: { |
995 int port; | 995 int port; |
996 if (!ExtractPortFromPASVResponse(response, &port)) | 996 if (!ExtractPortFromPASVResponse(response, &port)) |
997 return Stop(ERR_INVALID_RESPONSE); | 997 return Stop(ERR_INVALID_RESPONSE); |
998 if (IsWellKnownPort(port) || | 998 if (IsWellKnownPort(port) || |
999 !IsPortAllowedForScheme(port, url::kFtpScheme)) { | 999 !IsPortAllowedForScheme(port, url::kFtpScheme)) { |
1000 return Stop(ERR_UNSAFE_PORT); | 1000 return Stop(ERR_UNSAFE_PORT); |
1001 } | 1001 } |
1002 data_connection_port_ = static_cast<uint16>(port); | 1002 data_connection_port_ = static_cast<uint16_t>(port); |
1003 next_state_ = STATE_DATA_CONNECT; | 1003 next_state_ = STATE_DATA_CONNECT; |
1004 break; | 1004 break; |
1005 } | 1005 } |
1006 case ERROR_CLASS_INFO_NEEDED: | 1006 case ERROR_CLASS_INFO_NEEDED: |
1007 return Stop(ERR_INVALID_RESPONSE); | 1007 return Stop(ERR_INVALID_RESPONSE); |
1008 case ERROR_CLASS_TRANSIENT_ERROR: | 1008 case ERROR_CLASS_TRANSIENT_ERROR: |
1009 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code)); | 1009 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code)); |
1010 case ERROR_CLASS_PERMANENT_ERROR: | 1010 case ERROR_CLASS_PERMANENT_ERROR: |
1011 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code)); | 1011 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code)); |
1012 default: | 1012 default: |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1061 } | 1061 } |
1062 | 1062 |
1063 int FtpNetworkTransaction::ProcessResponseSIZE( | 1063 int FtpNetworkTransaction::ProcessResponseSIZE( |
1064 const FtpCtrlResponse& response) { | 1064 const FtpCtrlResponse& response) { |
1065 switch (GetErrorClass(response.status_code)) { | 1065 switch (GetErrorClass(response.status_code)) { |
1066 case ERROR_CLASS_INITIATED: | 1066 case ERROR_CLASS_INITIATED: |
1067 break; | 1067 break; |
1068 case ERROR_CLASS_OK: | 1068 case ERROR_CLASS_OK: |
1069 if (response.lines.size() != 1) | 1069 if (response.lines.size() != 1) |
1070 return Stop(ERR_INVALID_RESPONSE); | 1070 return Stop(ERR_INVALID_RESPONSE); |
1071 int64 size; | 1071 int64_t size; |
1072 if (!base::StringToInt64(response.lines[0], &size)) | 1072 if (!base::StringToInt64(response.lines[0], &size)) |
1073 return Stop(ERR_INVALID_RESPONSE); | 1073 return Stop(ERR_INVALID_RESPONSE); |
1074 if (size < 0) | 1074 if (size < 0) |
1075 return Stop(ERR_INVALID_RESPONSE); | 1075 return Stop(ERR_INVALID_RESPONSE); |
1076 | 1076 |
1077 // A successful response to SIZE does not mean the resource is a file. | 1077 // A successful response to SIZE does not mean the resource is a file. |
1078 // Some FTP servers (for example, the qnx one) send a SIZE even for | 1078 // Some FTP servers (for example, the qnx one) send a SIZE even for |
1079 // directories. | 1079 // directories. |
1080 response_.expected_content_size = size; | 1080 response_.expected_content_size = size; |
1081 break; | 1081 break; |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 if (!had_error_type[type]) { | 1372 if (!had_error_type[type]) { |
1373 had_error_type[type] = true; | 1373 had_error_type[type] = true; |
1374 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorHappened", | 1374 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorHappened", |
1375 type, NUM_OF_NET_ERROR_TYPES); | 1375 type, NUM_OF_NET_ERROR_TYPES); |
1376 } | 1376 } |
1377 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorCount", | 1377 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorCount", |
1378 type, NUM_OF_NET_ERROR_TYPES); | 1378 type, NUM_OF_NET_ERROR_TYPES); |
1379 } | 1379 } |
1380 | 1380 |
1381 } // namespace net | 1381 } // namespace net |
OLD | NEW |