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

Unified Diff: net/quic/quic_connection.cc

Issue 476023002: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0814_2
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_alarm_test.cc ('k') | net/quic/quic_connection_helper_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_connection.cc
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc
index a4305f62c71bfd1de98ed44f2e7e8cd6c1f5c288..c08706d8507364fc6ee4575c4bd5b4700b048392 100644
--- a/net/quic/quic_connection.cc
+++ b/net/quic/quic_connection.cc
@@ -228,7 +228,8 @@ QuicConnection::QuicConnection(QuicConnectionId connection_id,
time_of_last_sent_new_packet_(clock_->ApproximateNow()),
sequence_number_of_last_sent_packet_(0),
sent_packet_manager_(
- is_server, clock_, &stats_, kCubic,
+ is_server, clock_, &stats_,
+ FLAGS_quic_use_bbr_congestion_control ? kBBR : kCubic,
FLAGS_quic_use_time_loss_detection ? kTime : kNack),
version_negotiation_state_(START_NEGOTIATION),
is_server_(is_server),
@@ -408,7 +409,8 @@ void QuicConnection::OnVersionNegotiationPacket(
return;
}
- DVLOG(1) << ENDPOINT << "negotiating version " << version();
+ DVLOG(1) << ENDPOINT
+ << "Negotiated version: " << QuicVersionToString(version());
server_supported_versions_ = packet.versions;
version_negotiation_state_ = NEGOTIATION_IN_PROGRESS;
RetransmitUnackedPackets(ALL_PACKETS);
@@ -569,12 +571,10 @@ void QuicConnection::ProcessAckFrame(const QuicAckFrame& incoming_ack) {
// Always reset the retransmission alarm when an ack comes in, since we now
// have a better estimate of the current rtt than when it was set.
- retransmission_alarm_->Cancel();
QuicTime retransmission_time =
sent_packet_manager_.GetRetransmissionTime();
- if (retransmission_time != QuicTime::Zero()) {
- retransmission_alarm_->Set(retransmission_time);
- }
+ retransmission_alarm_->Update(retransmission_time,
+ QuicTime::Delta::FromMilliseconds(1));
}
void QuicConnection::ProcessStopWaitingFrame(
@@ -970,6 +970,8 @@ void QuicConnection::SendVersionNegotiationPacket() {
visitor_->OnWriteBlocked();
return;
}
+ DVLOG(1) << ENDPOINT << "Sending version negotiation packet: {"
+ << QuicVersionVectorToString(framer_.supported_versions()) << "}";
scoped_ptr<QuicEncryptedPacket> version_packet(
packet_generator_.SerializeVersionNegotiationPacket(
framer_.supported_versions()));
@@ -1278,11 +1280,9 @@ void QuicConnection::RetransmitUnackedPackets(
void QuicConnection::NeuterUnencryptedPackets() {
sent_packet_manager_.NeuterUnencryptedPackets();
// This may have changed the retransmission timer, so re-arm it.
- retransmission_alarm_->Cancel();
QuicTime retransmission_time = sent_packet_manager_.GetRetransmissionTime();
- if (retransmission_time != QuicTime::Zero()) {
- retransmission_alarm_->Set(retransmission_time);
- }
+ retransmission_alarm_->Update(retransmission_time,
+ QuicTime::Delta::FromMilliseconds(1));
}
bool QuicConnection::ShouldGeneratePacket(
@@ -1304,20 +1304,21 @@ bool QuicConnection::CanWrite(HasRetransmittableData retransmittable) {
return false;
}
- send_alarm_->Cancel();
QuicTime now = clock_->Now();
QuicTime::Delta delay = sent_packet_manager_.TimeUntilSend(
now, retransmittable);
if (delay.IsInfinite()) {
+ send_alarm_->Cancel();
return false;
}
// If the scheduler requires a delay, then we can not send this packet now.
if (!delay.IsZero()) {
- send_alarm_->Set(now.Add(delay));
+ send_alarm_->Update(now.Add(delay), QuicTime::Delta::FromMilliseconds(1));
DVLOG(1) << "Delaying sending.";
return false;
}
+ send_alarm_->Cancel();
return true;
}
@@ -1511,11 +1512,9 @@ bool QuicConnection::OnPacketSent(WriteResult result) {
transmission_type, retransmittable);
if (reset_retransmission_alarm || !retransmission_alarm_->IsSet()) {
- retransmission_alarm_->Cancel();
QuicTime retransmission_time = sent_packet_manager_.GetRetransmissionTime();
- if (retransmission_time != QuicTime::Zero()) {
- retransmission_alarm_->Set(retransmission_time);
- }
+ retransmission_alarm_->Update(retransmission_time,
+ QuicTime::Delta::FromMilliseconds(1));
}
stats_.bytes_sent += result.bytes_written;
@@ -1632,7 +1631,7 @@ void QuicConnection::OnRetransmissionTimeout() {
// and nothing waiting to be sent.
if (!HasQueuedData() && !retransmission_alarm_->IsSet()) {
QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime();
- if (rto_timeout != QuicTime::Zero()) {
+ if (rto_timeout.IsInitialized()) {
retransmission_alarm_->Set(rto_timeout);
}
}
@@ -1882,6 +1881,14 @@ bool QuicConnection::CanWriteStreamData() {
}
void QuicConnection::SetIdleNetworkTimeout(QuicTime::Delta timeout) {
+ // Adjust the idle timeout on client and server to prevent clients from
+ // sending requests to servers which have already closed the connection.
+ if (is_server_) {
+ timeout = timeout.Add(QuicTime::Delta::FromSeconds(1));
+ } else if (timeout > QuicTime::Delta::FromSeconds(1)) {
+ timeout = timeout.Subtract(QuicTime::Delta::FromSeconds(1));
+ }
+
if (timeout < idle_network_timeout_) {
idle_network_timeout_ = timeout;
CheckForTimeout();
@@ -1944,7 +1951,7 @@ bool QuicConnection::CheckForTimeout() {
}
timeout_alarm_->Cancel();
- timeout_alarm_->Set(clock_->ApproximateNow().Add(timeout));
+ timeout_alarm_->Set(now.Add(timeout));
return false;
}
@@ -1953,13 +1960,14 @@ void QuicConnection::SetPingAlarm() {
// Only clients send pings.
return;
}
- ping_alarm_->Cancel();
if (!visitor_->HasOpenDataStreams()) {
+ ping_alarm_->Cancel();
// Don't send a ping unless there are open streams.
return;
}
QuicTime::Delta ping_timeout = QuicTime::Delta::FromSeconds(kPingTimeoutSecs);
- ping_alarm_->Set(clock_->ApproximateNow().Add(ping_timeout));
+ ping_alarm_->Update(clock_->ApproximateNow().Add(ping_timeout),
+ QuicTime::Delta::FromSeconds(1));
}
QuicConnection::ScopedPacketBundler::ScopedPacketBundler(
« no previous file with comments | « net/quic/quic_alarm_test.cc ('k') | net/quic/quic_connection_helper_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698