Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: net/ftp/ftp_network_transaction.cc

Issue 754433003: Update from https://crrev.com/305340 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/ftp/ftp_network_transaction.h ('k') | net/http/http_network_transaction.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.h" 10 #include "base/metrics/histogram.h"
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 const std::string command = "EPSV"; 958 const std::string command = "EPSV";
959 next_state_ = STATE_CTRL_READ; 959 next_state_ = STATE_CTRL_READ;
960 return SendFtpCommand(command, command, COMMAND_EPSV); 960 return SendFtpCommand(command, command, COMMAND_EPSV);
961 } 961 }
962 962
963 int FtpNetworkTransaction::ProcessResponseEPSV( 963 int FtpNetworkTransaction::ProcessResponseEPSV(
964 const FtpCtrlResponse& response) { 964 const FtpCtrlResponse& response) {
965 switch (GetErrorClass(response.status_code)) { 965 switch (GetErrorClass(response.status_code)) {
966 case ERROR_CLASS_INITIATED: 966 case ERROR_CLASS_INITIATED:
967 return Stop(ERR_INVALID_RESPONSE); 967 return Stop(ERR_INVALID_RESPONSE);
968 case ERROR_CLASS_OK: 968 case ERROR_CLASS_OK: {
969 if (!ExtractPortFromEPSVResponse( response, &data_connection_port_)) 969 int port;
970 if (!ExtractPortFromEPSVResponse(response, &port))
970 return Stop(ERR_INVALID_RESPONSE); 971 return Stop(ERR_INVALID_RESPONSE);
971 if (data_connection_port_ < 1024 || 972 if (port < 1024 || !IsPortAllowedByFtp(port))
972 !IsPortAllowedByFtp(data_connection_port_))
973 return Stop(ERR_UNSAFE_PORT); 973 return Stop(ERR_UNSAFE_PORT);
974 data_connection_port_ = static_cast<uint16>(port);
974 next_state_ = STATE_DATA_CONNECT; 975 next_state_ = STATE_DATA_CONNECT;
975 break; 976 break;
977 }
976 case ERROR_CLASS_INFO_NEEDED: 978 case ERROR_CLASS_INFO_NEEDED:
977 return Stop(ERR_INVALID_RESPONSE); 979 return Stop(ERR_INVALID_RESPONSE);
978 case ERROR_CLASS_TRANSIENT_ERROR: 980 case ERROR_CLASS_TRANSIENT_ERROR:
979 case ERROR_CLASS_PERMANENT_ERROR: 981 case ERROR_CLASS_PERMANENT_ERROR:
980 use_epsv_ = false; 982 use_epsv_ = false;
981 next_state_ = STATE_CTRL_WRITE_PASV; 983 next_state_ = STATE_CTRL_WRITE_PASV;
982 return OK; 984 return OK;
983 default: 985 default:
984 NOTREACHED(); 986 NOTREACHED();
985 return Stop(ERR_UNEXPECTED); 987 return Stop(ERR_UNEXPECTED);
986 } 988 }
987 return OK; 989 return OK;
988 } 990 }
989 991
990 // PASV command 992 // PASV command
991 int FtpNetworkTransaction::DoCtrlWritePASV() { 993 int FtpNetworkTransaction::DoCtrlWritePASV() {
992 std::string command = "PASV"; 994 std::string command = "PASV";
993 next_state_ = STATE_CTRL_READ; 995 next_state_ = STATE_CTRL_READ;
994 return SendFtpCommand(command, command, COMMAND_PASV); 996 return SendFtpCommand(command, command, COMMAND_PASV);
995 } 997 }
996 998
997 int FtpNetworkTransaction::ProcessResponsePASV( 999 int FtpNetworkTransaction::ProcessResponsePASV(
998 const FtpCtrlResponse& response) { 1000 const FtpCtrlResponse& response) {
999 switch (GetErrorClass(response.status_code)) { 1001 switch (GetErrorClass(response.status_code)) {
1000 case ERROR_CLASS_INITIATED: 1002 case ERROR_CLASS_INITIATED:
1001 return Stop(ERR_INVALID_RESPONSE); 1003 return Stop(ERR_INVALID_RESPONSE);
1002 case ERROR_CLASS_OK: 1004 case ERROR_CLASS_OK: {
1003 if (!ExtractPortFromPASVResponse(response, &data_connection_port_)) 1005 int port;
1006 if (!ExtractPortFromPASVResponse(response, &port))
1004 return Stop(ERR_INVALID_RESPONSE); 1007 return Stop(ERR_INVALID_RESPONSE);
1005 if (data_connection_port_ < 1024 || 1008 if (port < 1024 || !IsPortAllowedByFtp(port))
1006 !IsPortAllowedByFtp(data_connection_port_))
1007 return Stop(ERR_UNSAFE_PORT); 1009 return Stop(ERR_UNSAFE_PORT);
1010 data_connection_port_ = static_cast<uint16>(port);
1008 next_state_ = STATE_DATA_CONNECT; 1011 next_state_ = STATE_DATA_CONNECT;
1009 break; 1012 break;
1013 }
1010 case ERROR_CLASS_INFO_NEEDED: 1014 case ERROR_CLASS_INFO_NEEDED:
1011 return Stop(ERR_INVALID_RESPONSE); 1015 return Stop(ERR_INVALID_RESPONSE);
1012 case ERROR_CLASS_TRANSIENT_ERROR: 1016 case ERROR_CLASS_TRANSIENT_ERROR:
1013 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code)); 1017 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code));
1014 case ERROR_CLASS_PERMANENT_ERROR: 1018 case ERROR_CLASS_PERMANENT_ERROR:
1015 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code)); 1019 return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code));
1016 default: 1020 default:
1017 NOTREACHED(); 1021 NOTREACHED();
1018 return Stop(ERR_UNEXPECTED); 1022 return Stop(ERR_UNEXPECTED);
1019 } 1023 }
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
1393 if (!had_error_type[type]) { 1397 if (!had_error_type[type]) {
1394 had_error_type[type] = true; 1398 had_error_type[type] = true;
1395 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorHappened", 1399 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorHappened",
1396 type, NUM_OF_NET_ERROR_TYPES); 1400 type, NUM_OF_NET_ERROR_TYPES);
1397 } 1401 }
1398 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorCount", 1402 UMA_HISTOGRAM_ENUMERATION("Net.FtpDataConnectionErrorCount",
1399 type, NUM_OF_NET_ERROR_TYPES); 1403 type, NUM_OF_NET_ERROR_TYPES);
1400 } 1404 }
1401 1405
1402 } // namespace net 1406 } // namespace net
OLDNEW
« no previous file with comments | « net/ftp/ftp_network_transaction.h ('k') | net/http/http_network_transaction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698