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

Side by Side Diff: net/quic/quic_connection.cc

Issue 1565303002: Change IPEndpoint::address() to return a net::IPAddress (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Android Created 4 years, 11 months 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
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/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <sys/types.h> 8 #include <sys/types.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 1075 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 visitor_->OnWriteBlocked(); 1086 visitor_->OnWriteBlocked();
1087 return; 1087 return;
1088 } 1088 }
1089 DVLOG(1) << ENDPOINT << "Sending version negotiation packet: {" 1089 DVLOG(1) << ENDPOINT << "Sending version negotiation packet: {"
1090 << QuicVersionVectorToString(framer_.supported_versions()) << "}"; 1090 << QuicVersionVectorToString(framer_.supported_versions()) << "}";
1091 scoped_ptr<QuicEncryptedPacket> version_packet( 1091 scoped_ptr<QuicEncryptedPacket> version_packet(
1092 packet_generator_.SerializeVersionNegotiationPacket( 1092 packet_generator_.SerializeVersionNegotiationPacket(
1093 framer_.supported_versions())); 1093 framer_.supported_versions()));
1094 WriteResult result = 1094 WriteResult result =
1095 writer_->WritePacket(version_packet->data(), version_packet->length(), 1095 writer_->WritePacket(version_packet->data(), version_packet->length(),
1096 self_address().address(), peer_address()); 1096 self_address().address_number(), peer_address());
1097 1097
1098 if (result.status == WRITE_STATUS_ERROR) { 1098 if (result.status == WRITE_STATUS_ERROR) {
1099 OnWriteError(result.error_code); 1099 OnWriteError(result.error_code);
1100 return; 1100 return;
1101 } 1101 }
1102 if (result.status == WRITE_STATUS_BLOCKED) { 1102 if (result.status == WRITE_STATUS_BLOCKED) {
1103 visitor_->OnWriteBlocked(); 1103 visitor_->OnWriteBlocked();
1104 if (writer_->IsWriteBlockedDataBuffered()) { 1104 if (writer_->IsWriteBlockedDataBuffered()) {
1105 pending_version_negotiation_packet_ = false; 1105 pending_version_negotiation_packet_ = false;
1106 } 1106 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 SetPingAlarm(); 1255 SetPingAlarm();
1256 } 1256 }
1257 1257
1258 void QuicConnection::CheckForAddressMigration(const IPEndPoint& self_address, 1258 void QuicConnection::CheckForAddressMigration(const IPEndPoint& self_address,
1259 const IPEndPoint& peer_address) { 1259 const IPEndPoint& peer_address) {
1260 peer_ip_changed_ = false; 1260 peer_ip_changed_ = false;
1261 peer_port_changed_ = false; 1261 peer_port_changed_ = false;
1262 self_ip_changed_ = false; 1262 self_ip_changed_ = false;
1263 self_port_changed_ = false; 1263 self_port_changed_ = false;
1264 1264
1265 if (peer_address_.address().empty()) { 1265 if (peer_address_.address_number().empty()) {
1266 peer_address_ = peer_address; 1266 peer_address_ = peer_address;
1267 } 1267 }
1268 if (self_address_.address().empty()) { 1268 if (self_address_.address_number().empty()) {
1269 self_address_ = self_address; 1269 self_address_ = self_address;
1270 } 1270 }
1271 1271
1272 if (!peer_address.address().empty() && !peer_address_.address().empty()) { 1272 if (!peer_address.address_number().empty() &&
1273 peer_ip_changed_ = (peer_address.address() != peer_address_.address()); 1273 !peer_address_.address_number().empty()) {
1274 peer_ip_changed_ =
1275 (peer_address.address_number() != peer_address_.address_number());
1274 peer_port_changed_ = (peer_address.port() != peer_address_.port()); 1276 peer_port_changed_ = (peer_address.port() != peer_address_.port());
1275 1277
1276 // Store in case we want to migrate connection in ProcessValidatedPacket. 1278 // Store in case we want to migrate connection in ProcessValidatedPacket.
1277 migrating_peer_ip_ = peer_address.address(); 1279 migrating_peer_ip_ = peer_address.address_number();
1278 migrating_peer_port_ = peer_address.port(); 1280 migrating_peer_port_ = peer_address.port();
1279 } 1281 }
1280 1282
1281 if (!self_address.address().empty() && !self_address_.address().empty()) { 1283 if (!self_address.address_number().empty() &&
1282 self_ip_changed_ = (self_address.address() != self_address_.address()); 1284 !self_address_.address_number().empty()) {
1285 self_ip_changed_ =
1286 (self_address.address_number() != self_address_.address_number());
1283 self_port_changed_ = (self_address.port() != self_address_.port()); 1287 self_port_changed_ = (self_address.port() != self_address_.port());
1284 } 1288 }
1285 1289
1286 // TODO(vasilvv): reset maximum packet size on connection migration. Whenever 1290 // TODO(vasilvv): reset maximum packet size on connection migration. Whenever
1287 // the connection is migrated, it usually ends up being on a different path, 1291 // the connection is migrated, it usually ends up being on a different path,
1288 // with possibly smaller MTU. This means the max packet size has to be reset 1292 // with possibly smaller MTU. This means the max packet size has to be reset
1289 // and MTU discovery mechanism re-initialized. The main reason the code does 1293 // and MTU discovery mechanism re-initialized. The main reason the code does
1290 // not do it now is that the retransmission code currently cannot deal with 1294 // not do it now is that the retransmission code currently cannot deal with
1291 // the case when it needs to resend a packet created with larger MTU (see 1295 // the case when it needs to resend a packet created with larger MTU (see
1292 // b/22172803). 1296 // b/22172803).
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 debug_visitor_->OnSuccessfulVersionNegotiation(version()); 1400 debug_visitor_->OnSuccessfulVersionNegotiation(version());
1397 } 1401 }
1398 } 1402 }
1399 } 1403 }
1400 1404
1401 DCHECK_EQ(NEGOTIATED_VERSION, version_negotiation_state_); 1405 DCHECK_EQ(NEGOTIATED_VERSION, version_negotiation_state_);
1402 1406
1403 if (peer_ip_changed_ || peer_port_changed_) { 1407 if (peer_ip_changed_ || peer_port_changed_) {
1404 IPEndPoint old_peer_address = peer_address_; 1408 IPEndPoint old_peer_address = peer_address_;
1405 peer_address_ = IPEndPoint( 1409 peer_address_ = IPEndPoint(
1406 peer_ip_changed_ ? migrating_peer_ip_ : peer_address_.address(), 1410 peer_ip_changed_ ? migrating_peer_ip_ : peer_address_.address_number(),
1407 peer_port_changed_ ? migrating_peer_port_ : peer_address_.port()); 1411 peer_port_changed_ ? migrating_peer_port_ : peer_address_.port());
1408 1412
1409 DVLOG(1) << ENDPOINT << "Peer's ip:port changed from " 1413 DVLOG(1) << ENDPOINT << "Peer's ip:port changed from "
1410 << old_peer_address.ToString() << " to " 1414 << old_peer_address.ToString() << " to "
1411 << peer_address_.ToString() << ", migrating connection."; 1415 << peer_address_.ToString() << ", migrating connection.";
1412 1416
1413 visitor_->OnConnectionMigration(); 1417 visitor_->OnConnectionMigration();
1414 DCHECK_NE(type, NO_CHANGE); 1418 DCHECK_NE(type, NO_CHANGE);
1415 sent_packet_manager_.OnConnectionMigration(type); 1419 sent_packet_manager_.OnConnectionMigration(type);
1416 } 1420 }
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 << ", encrypted length:" << encrypted->length(); 1620 << ", encrypted length:" << encrypted->length();
1617 DVLOG(2) << ENDPOINT << "packet(" << packet_number << "): " << std::endl 1621 DVLOG(2) << ENDPOINT << "packet(" << packet_number << "): " << std::endl
1618 << QuicUtils::StringToHexASCIIDump(encrypted->AsStringPiece()); 1622 << QuicUtils::StringToHexASCIIDump(encrypted->AsStringPiece());
1619 1623
1620 // Measure the RTT from before the write begins to avoid underestimating the 1624 // Measure the RTT from before the write begins to avoid underestimating the
1621 // min_rtt_, especially in cases where the thread blocks or gets swapped out 1625 // min_rtt_, especially in cases where the thread blocks or gets swapped out
1622 // during the WritePacket below. 1626 // during the WritePacket below.
1623 QuicTime packet_send_time = clock_->Now(); 1627 QuicTime packet_send_time = clock_->Now();
1624 WriteResult result = 1628 WriteResult result =
1625 writer_->WritePacket(encrypted->data(), encrypted->length(), 1629 writer_->WritePacket(encrypted->data(), encrypted->length(),
1626 self_address().address(), peer_address()); 1630 self_address().address_number(), peer_address());
1627 if (result.error_code == ERR_IO_PENDING) { 1631 if (result.error_code == ERR_IO_PENDING) {
1628 DCHECK_EQ(WRITE_STATUS_BLOCKED, result.status); 1632 DCHECK_EQ(WRITE_STATUS_BLOCKED, result.status);
1629 } 1633 }
1630 1634
1631 if (result.status == WRITE_STATUS_BLOCKED) { 1635 if (result.status == WRITE_STATUS_BLOCKED) {
1632 visitor_->OnWriteBlocked(); 1636 visitor_->OnWriteBlocked();
1633 // If the socket buffers the the data, then the packet should not 1637 // If the socket buffers the the data, then the packet should not
1634 // be queued and sent again, which would result in an unnecessary 1638 // be queued and sent again, which would result in an unnecessary
1635 // duplicate packet being sent. The helper must call OnCanWrite 1639 // duplicate packet being sent. The helper must call OnCanWrite
1636 // when the write completes, and OnWriteError if an error occurs. 1640 // when the write completes, and OnWriteError if an error occurs.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1677 ++stats_.packets_sent; 1681 ++stats_.packets_sent;
1678 if (packet->transmission_type != NOT_RETRANSMISSION) { 1682 if (packet->transmission_type != NOT_RETRANSMISSION) {
1679 stats_.bytes_retransmitted += result.bytes_written; 1683 stats_.bytes_retransmitted += result.bytes_written;
1680 ++stats_.packets_retransmitted; 1684 ++stats_.packets_retransmitted;
1681 } 1685 }
1682 1686
1683 if (result.status == WRITE_STATUS_ERROR) { 1687 if (result.status == WRITE_STATUS_ERROR) {
1684 OnWriteError(result.error_code); 1688 OnWriteError(result.error_code);
1685 DLOG(ERROR) << ENDPOINT << "failed writing " << encrypted->length() 1689 DLOG(ERROR) << ENDPOINT << "failed writing " << encrypted->length()
1686 << " bytes " 1690 << " bytes "
1687 << " from host " << (self_address().address().empty() 1691 << " from host " << (self_address().address_number().empty()
1688 ? " empty address " 1692 ? " empty address "
1689 : self_address().ToStringWithoutPort()) 1693 : self_address().ToStringWithoutPort())
1690 << " to address " << peer_address().ToString(); 1694 << " to address " << peer_address().ToString();
1691 return false; 1695 return false;
1692 } 1696 }
1693 1697
1694 return true; 1698 return true;
1695 } 1699 }
1696 1700
1697 bool QuicConnection::ShouldDiscardPacket(const QueuedPacket& packet) { 1701 bool QuicConnection::ShouldDiscardPacket(const QueuedPacket& packet) {
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
2352 } 2356 }
2353 return false; 2357 return false;
2354 } 2358 }
2355 2359
2356 void QuicConnection::SetMtuDiscoveryTarget(QuicByteCount target) { 2360 void QuicConnection::SetMtuDiscoveryTarget(QuicByteCount target) {
2357 mtu_discovery_target_ = LimitMaxPacketSize(target); 2361 mtu_discovery_target_ = LimitMaxPacketSize(target);
2358 } 2362 }
2359 2363
2360 QuicByteCount QuicConnection::LimitMaxPacketSize( 2364 QuicByteCount QuicConnection::LimitMaxPacketSize(
2361 QuicByteCount suggested_max_packet_size) { 2365 QuicByteCount suggested_max_packet_size) {
2362 if (peer_address_.address().empty()) { 2366 if (peer_address_.address_number().empty()) {
2363 LOG(DFATAL) << "Attempted to use a connection without a valid peer address"; 2367 LOG(DFATAL) << "Attempted to use a connection without a valid peer address";
2364 return suggested_max_packet_size; 2368 return suggested_max_packet_size;
2365 } 2369 }
2366 2370
2367 const QuicByteCount writer_limit = writer_->GetMaxPacketSize(peer_address()); 2371 const QuicByteCount writer_limit = writer_->GetMaxPacketSize(peer_address());
2368 2372
2369 QuicByteCount max_packet_size = suggested_max_packet_size; 2373 QuicByteCount max_packet_size = suggested_max_packet_size;
2370 if (max_packet_size > writer_limit) { 2374 if (max_packet_size > writer_limit) {
2371 max_packet_size = writer_limit; 2375 max_packet_size = writer_limit;
2372 } 2376 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2413 SendMtuDiscoveryPacket(mtu_discovery_target_); 2417 SendMtuDiscoveryPacket(mtu_discovery_target_);
2414 2418
2415 DCHECK(!mtu_discovery_alarm_->IsSet()); 2419 DCHECK(!mtu_discovery_alarm_->IsSet());
2416 } 2420 }
2417 2421
2418 bool QuicConnection::ack_frame_updated() const { 2422 bool QuicConnection::ack_frame_updated() const {
2419 return received_packet_manager_.ack_frame_updated(); 2423 return received_packet_manager_.ack_frame_updated();
2420 } 2424 }
2421 2425
2422 } // namespace net 2426 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698