Index: net/quic/quic_connection.cc |
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc |
index 2fa5a12de1b49ffdbd666926733e48f1e33a221f..d465bd45dce23ec3c4d481a3532f11b184fe70a8 100644 |
--- a/net/quic/quic_connection.cc |
+++ b/net/quic/quic_connection.cc |
@@ -1343,6 +1343,15 @@ bool QuicConnection::ProcessValidatedPacket() { |
} |
if (peer_ip_changed_ || peer_port_changed_) { |
+ PeerAddressChangeType type = DeterminePeerAddressChangeType(); |
+ if (type != NO_CHANGE && type != UNKNOWN && |
+ (FLAGS_quic_disable_non_nat_address_migration && |
+ type != NAT_PORT_REBINDING && type != IPV4_SUBNET_REBINDING)) { |
+ SendConnectionCloseWithDetails(QUIC_ERROR_MIGRATING_ADDRESS, |
+ "Invalid peer address migration."); |
+ return false; |
+ } |
+ |
IPEndPoint old_peer_address = peer_address_; |
peer_address_ = IPEndPoint( |
peer_ip_changed_ ? migrating_peer_ip_ : peer_address_.address(), |
@@ -1741,6 +1750,10 @@ void QuicConnection::SendOrQueuePacket(QueuedPacket packet) { |
} |
} |
+PeerAddressChangeType QuicConnection::DeterminePeerAddressChangeType() { |
+ return UNKNOWN; |
+} |
+ |
void QuicConnection::SendPing() { |
if (retransmission_alarm_->IsSet()) { |
return; |