| 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/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 1346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1357 } | 1357 } |
| 1358 } | 1358 } |
| 1359 | 1359 |
| 1360 bool QuicConnection::ProcessValidatedPacket(const QuicPacketHeader& header) { | 1360 bool QuicConnection::ProcessValidatedPacket(const QuicPacketHeader& header) { |
| 1361 if (self_ip_changed_ || self_port_changed_) { | 1361 if (self_ip_changed_ || self_port_changed_) { |
| 1362 SendConnectionCloseWithDetails(QUIC_ERROR_MIGRATING_ADDRESS, | 1362 SendConnectionCloseWithDetails(QUIC_ERROR_MIGRATING_ADDRESS, |
| 1363 "Self address migration is not supported."); | 1363 "Self address migration is not supported."); |
| 1364 return false; | 1364 return false; |
| 1365 } | 1365 } |
| 1366 | 1366 |
| 1367 PeerAddressChangeType type = NO_CHANGE; | |
| 1368 if (peer_ip_changed_ || peer_port_changed_) { | |
| 1369 type = DeterminePeerAddressChangeType(); | |
| 1370 if (FLAGS_quic_disable_non_nat_address_migration && type != PORT_CHANGE && | |
| 1371 type != IPV4_SUBNET_CHANGE) { | |
| 1372 SendConnectionCloseWithDetails(QUIC_ERROR_MIGRATING_ADDRESS, | |
| 1373 "Invalid peer address migration."); | |
| 1374 return false; | |
| 1375 } | |
| 1376 } | |
| 1377 | |
| 1378 if (!Near(header.packet_number, last_header_.packet_number)) { | 1367 if (!Near(header.packet_number, last_header_.packet_number)) { |
| 1379 DVLOG(1) << ENDPOINT << "Packet " << header.packet_number | 1368 DVLOG(1) << ENDPOINT << "Packet " << header.packet_number |
| 1380 << " out of bounds. Discarding"; | 1369 << " out of bounds. Discarding"; |
| 1381 SendConnectionCloseWithDetails(QUIC_INVALID_PACKET_HEADER, | 1370 SendConnectionCloseWithDetails(QUIC_INVALID_PACKET_HEADER, |
| 1382 "packet number out of bounds"); | 1371 "packet number out of bounds"); |
| 1383 return false; | 1372 return false; |
| 1384 } | 1373 } |
| 1385 | 1374 |
| 1386 // If this packet has already been seen, or the sender has told us that it | 1375 // If this packet has already been seen, or the sender has told us that it |
| 1387 // will not be retransmitted, then stop processing the packet. | 1376 // will not be retransmitted, then stop processing the packet. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1422 visitor_->OnSuccessfulVersionNegotiation(version()); | 1411 visitor_->OnSuccessfulVersionNegotiation(version()); |
| 1423 if (debug_visitor_ != nullptr) { | 1412 if (debug_visitor_ != nullptr) { |
| 1424 debug_visitor_->OnSuccessfulVersionNegotiation(version()); | 1413 debug_visitor_->OnSuccessfulVersionNegotiation(version()); |
| 1425 } | 1414 } |
| 1426 } | 1415 } |
| 1427 } | 1416 } |
| 1428 | 1417 |
| 1429 DCHECK_EQ(NEGOTIATED_VERSION, version_negotiation_state_); | 1418 DCHECK_EQ(NEGOTIATED_VERSION, version_negotiation_state_); |
| 1430 | 1419 |
| 1431 if (peer_ip_changed_ || peer_port_changed_) { | 1420 if (peer_ip_changed_ || peer_port_changed_) { |
| 1421 PeerAddressChangeType type = DeterminePeerAddressChangeType(); |
| 1432 IPEndPoint old_peer_address = peer_address_; | 1422 IPEndPoint old_peer_address = peer_address_; |
| 1433 peer_address_ = IPEndPoint( | 1423 peer_address_ = IPEndPoint( |
| 1434 peer_ip_changed_ ? migrating_peer_ip_ : peer_address_.address().bytes(), | 1424 peer_ip_changed_ ? migrating_peer_ip_ : peer_address_.address().bytes(), |
| 1435 peer_port_changed_ ? migrating_peer_port_ : peer_address_.port()); | 1425 peer_port_changed_ ? migrating_peer_port_ : peer_address_.port()); |
| 1436 | 1426 |
| 1437 DVLOG(1) << ENDPOINT << "Peer's ip:port changed from " | 1427 DVLOG(1) << ENDPOINT << "Peer's ip:port changed from " |
| 1438 << old_peer_address.ToString() << " to " | 1428 << old_peer_address.ToString() << " to " |
| 1439 << peer_address_.ToString() << ", migrating connection."; | 1429 << peer_address_.ToString() << ", migrating connection."; |
| 1440 | 1430 |
| 1441 visitor_->OnConnectionMigration(); | 1431 visitor_->OnConnectionMigration(); |
| (...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2454 void QuicConnection::OnPathClosed(QuicPathId path_id) { | 2444 void QuicConnection::OnPathClosed(QuicPathId path_id) { |
| 2455 // Stop receiving packets on this path. | 2445 // Stop receiving packets on this path. |
| 2456 framer_.OnPathClosed(path_id); | 2446 framer_.OnPathClosed(path_id); |
| 2457 } | 2447 } |
| 2458 | 2448 |
| 2459 bool QuicConnection::ack_frame_updated() const { | 2449 bool QuicConnection::ack_frame_updated() const { |
| 2460 return received_packet_manager_.ack_frame_updated(); | 2450 return received_packet_manager_.ack_frame_updated(); |
| 2461 } | 2451 } |
| 2462 | 2452 |
| 2463 } // namespace net | 2453 } // namespace net |
| OLD | NEW |