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

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

Issue 1784903003: Remove FEC from send path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@114770052
Patch Set: Restore accidentally removed OnRttChanged call Created 4 years, 9 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
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_connection_test.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/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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 // DiscoverMtu() handles rescheduling the alarm by itself. 181 // DiscoverMtu() handles rescheduling the alarm by itself.
182 return QuicTime::Zero(); 182 return QuicTime::Zero();
183 } 183 }
184 184
185 private: 185 private:
186 QuicConnection* connection_; 186 QuicConnection* connection_;
187 187
188 DISALLOW_COPY_AND_ASSIGN(MtuDiscoveryAlarm); 188 DISALLOW_COPY_AND_ASSIGN(MtuDiscoveryAlarm);
189 }; 189 };
190 190
191 // This alarm may be scheduled when an FEC protected packet is sent out.
192 class FecAlarm : public QuicAlarm::Delegate {
193 public:
194 explicit FecAlarm(QuicPacketGenerator* packet_generator)
195 : packet_generator_(packet_generator) {}
196
197 QuicTime OnAlarm() override {
198 packet_generator_->OnFecTimeout();
199 return QuicTime::Zero();
200 }
201
202 private:
203 QuicPacketGenerator* packet_generator_;
204
205 DISALLOW_COPY_AND_ASSIGN(FecAlarm);
206 };
207
208 // Listens for acks of MTU discovery packets and raises the maximum packet size 191 // Listens for acks of MTU discovery packets and raises the maximum packet size
209 // of the connection if the probe succeeds. 192 // of the connection if the probe succeeds.
210 class MtuDiscoveryAckListener : public QuicAckListenerInterface { 193 class MtuDiscoveryAckListener : public QuicAckListenerInterface {
211 public: 194 public:
212 MtuDiscoveryAckListener(QuicConnection* connection, QuicByteCount probe_size) 195 MtuDiscoveryAckListener(QuicConnection* connection, QuicByteCount probe_size)
213 : connection_(connection), probe_size_(probe_size) {} 196 : connection_(connection), probe_size_(probe_size) {}
214 197
215 void OnPacketAcked(int /*acked_bytes*/, 198 void OnPacketAcked(int /*acked_bytes*/,
216 QuicTime::Delta /*ack delay time*/) override { 199 QuicTime::Delta /*ack delay time*/) override {
217 // MTU discovery packets are not retransmittable, so it must be acked. 200 // MTU discovery packets are not retransmittable, so it must be acked.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 ping_alarm_(helper->CreateAlarm(arena_.New<PingAlarm>(this), &arena_)), 280 ping_alarm_(helper->CreateAlarm(arena_.New<PingAlarm>(this), &arena_)),
298 mtu_discovery_alarm_( 281 mtu_discovery_alarm_(
299 helper->CreateAlarm(arena_.New<MtuDiscoveryAlarm>(this), &arena_)), 282 helper->CreateAlarm(arena_.New<MtuDiscoveryAlarm>(this), &arena_)),
300 visitor_(nullptr), 283 visitor_(nullptr),
301 debug_visitor_(nullptr), 284 debug_visitor_(nullptr),
302 packet_generator_(connection_id_, 285 packet_generator_(connection_id_,
303 &framer_, 286 &framer_,
304 random_generator_, 287 random_generator_,
305 helper->GetBufferAllocator(), 288 helper->GetBufferAllocator(),
306 this), 289 this),
307 fec_alarm_(helper->CreateAlarm(arena_.New<FecAlarm>(&packet_generator_),
308 &arena_)),
309 idle_network_timeout_(QuicTime::Delta::Infinite()), 290 idle_network_timeout_(QuicTime::Delta::Infinite()),
310 handshake_timeout_(QuicTime::Delta::Infinite()), 291 handshake_timeout_(QuicTime::Delta::Infinite()),
311 time_of_last_received_packet_(clock_->ApproximateNow()), 292 time_of_last_received_packet_(clock_->ApproximateNow()),
312 time_of_last_sent_new_packet_(clock_->ApproximateNow()), 293 time_of_last_sent_new_packet_(clock_->ApproximateNow()),
313 last_send_for_timeout_(clock_->ApproximateNow()), 294 last_send_for_timeout_(clock_->ApproximateNow()),
314 packet_number_of_last_sent_packet_(0), 295 packet_number_of_last_sent_packet_(0),
315 sent_packet_manager_( 296 sent_packet_manager_(
316 perspective, 297 perspective,
317 kDefaultPathId, 298 kDefaultPathId,
318 clock_, 299 clock_,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 } 371 }
391 372
392 sent_packet_manager_.SetFromConfig(config); 373 sent_packet_manager_.SetFromConfig(config);
393 if (config.HasReceivedBytesForConnectionId() && 374 if (config.HasReceivedBytesForConnectionId() &&
394 can_truncate_connection_ids_) { 375 can_truncate_connection_ids_) {
395 packet_generator_.SetConnectionIdLength( 376 packet_generator_.SetConnectionIdLength(
396 config.ReceivedBytesForConnectionId()); 377 config.ReceivedBytesForConnectionId());
397 } 378 }
398 max_undecryptable_packets_ = config.max_undecryptable_packets(); 379 max_undecryptable_packets_ = config.max_undecryptable_packets();
399 380
400 if (config.HasClientSentConnectionOption(kFSPA, perspective_)) {
401 packet_generator_.set_fec_send_policy(FecSendPolicy::FEC_ALARM_TRIGGER);
402 }
403 if (config.HasClientSentConnectionOption(kFRTT, perspective_)) {
404 // TODO(rtenneti): Delete this code after the 0.25 RTT FEC experiment.
405 const float kFecTimeoutRttMultiplier = 0.25;
406 packet_generator_.set_rtt_multiplier_for_fec_timeout(
407 kFecTimeoutRttMultiplier);
408 }
409
410 if (config.HasClientSentConnectionOption(kMTUH, perspective_)) { 381 if (config.HasClientSentConnectionOption(kMTUH, perspective_)) {
411 SetMtuDiscoveryTarget(kMtuDiscoveryTargetPacketSizeHigh); 382 SetMtuDiscoveryTarget(kMtuDiscoveryTargetPacketSizeHigh);
412 } 383 }
413 if (config.HasClientSentConnectionOption(kMTUL, perspective_)) { 384 if (config.HasClientSentConnectionOption(kMTUL, perspective_)) {
414 SetMtuDiscoveryTarget(kMtuDiscoveryTargetPacketSizeLow); 385 SetMtuDiscoveryTarget(kMtuDiscoveryTargetPacketSizeLow);
415 } 386 }
416 if (debug_visitor_ != nullptr) { 387 if (debug_visitor_ != nullptr) {
417 debug_visitor_->OnSetFromConfig(config); 388 debug_visitor_->OnSetFromConfig(config);
418 } 389 }
419 if (config.HasClientSentConnectionOption(kACKD, perspective_)) { 390 if (config.HasClientSentConnectionOption(kACKD, perspective_)) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 440
470 void QuicConnection::OnError(QuicFramer* framer) { 441 void QuicConnection::OnError(QuicFramer* framer) {
471 // Packets that we can not or have not decrypted are dropped. 442 // Packets that we can not or have not decrypted are dropped.
472 // TODO(rch): add stats to measure this. 443 // TODO(rch): add stats to measure this.
473 if (!connected_ || last_packet_decrypted_ == false) { 444 if (!connected_ || last_packet_decrypted_ == false) {
474 return; 445 return;
475 } 446 }
476 SendConnectionCloseWithDetails(framer->error(), framer->detailed_error()); 447 SendConnectionCloseWithDetails(framer->error(), framer->detailed_error());
477 } 448 }
478 449
479 void QuicConnection::MaybeSetFecAlarm(QuicPacketNumber packet_number) {
480 if (fec_alarm_->IsSet()) {
481 return;
482 }
483 QuicTime::Delta timeout = packet_generator_.GetFecTimeout(packet_number);
484 if (!timeout.IsInfinite()) {
485 fec_alarm_->Update(clock_->ApproximateNow().Add(timeout),
486 QuicTime::Delta::FromMilliseconds(1));
487 }
488 }
489
490 void QuicConnection::OnPacket() { 450 void QuicConnection::OnPacket() {
491 last_packet_decrypted_ = false; 451 last_packet_decrypted_ = false;
492 last_packet_revived_ = false; 452 last_packet_revived_ = false;
493 } 453 }
494 454
495 void QuicConnection::OnPublicResetPacket(const QuicPublicResetPacket& packet) { 455 void QuicConnection::OnPublicResetPacket(const QuicPublicResetPacket& packet) {
496 // Check that any public reset packet with a different connection ID that was 456 // Check that any public reset packet with a different connection ID that was
497 // routed to this QuicConnection has been redirected before control reaches 457 // routed to this QuicConnection has been redirected before control reaches
498 // here. (Check for a bug regression.) 458 // here. (Check for a bug regression.)
499 DCHECK_EQ(connection_id_, packet.public_header.connection_id); 459 DCHECK_EQ(connection_id_, packet.public_header.connection_id);
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 } 1135 }
1176 1136
1177 pending_version_negotiation_packet_ = false; 1137 pending_version_negotiation_packet_ = false;
1178 } 1138 }
1179 1139
1180 QuicConsumedData QuicConnection::SendStreamData( 1140 QuicConsumedData QuicConnection::SendStreamData(
1181 QuicStreamId id, 1141 QuicStreamId id,
1182 QuicIOVector iov, 1142 QuicIOVector iov,
1183 QuicStreamOffset offset, 1143 QuicStreamOffset offset,
1184 bool fin, 1144 bool fin,
1185 FecProtection fec_protection,
1186 QuicAckListenerInterface* listener) { 1145 QuicAckListenerInterface* listener) {
1187 if (!fin && iov.total_length == 0) { 1146 if (!fin && iov.total_length == 0) {
1188 QUIC_BUG << "Attempt to send empty stream frame"; 1147 QUIC_BUG << "Attempt to send empty stream frame";
1189 return QuicConsumedData(0, false); 1148 return QuicConsumedData(0, false);
1190 } 1149 }
1191 1150
1192 // Opportunistically bundle an ack with every outgoing packet. 1151 // Opportunistically bundle an ack with every outgoing packet.
1193 // Particularly, we want to bundle with handshake packets since we don't know 1152 // Particularly, we want to bundle with handshake packets since we don't know
1194 // which decrypter will be used on an ack packet following a handshake 1153 // which decrypter will be used on an ack packet following a handshake
1195 // packet (a handshake packet from client to server could result in a REJ or a 1154 // packet (a handshake packet from client to server could result in a REJ or a
1196 // SHLO from the server, leading to two different decrypters at the server.) 1155 // SHLO from the server, leading to two different decrypters at the server.)
1197 // 1156 //
1198 // TODO(jri): Note that ConsumeData may cause a response packet to be sent. 1157 // TODO(jri): Note that ConsumeData may cause a response packet to be sent.
1199 // We may end up sending stale ack information if there are undecryptable 1158 // We may end up sending stale ack information if there are undecryptable
1200 // packets hanging around and/or there are revivable packets which may get 1159 // packets hanging around and/or there are revivable packets which may get
1201 // handled after this packet is sent. Change ScopedPacketBundler to do the 1160 // handled after this packet is sent. Change ScopedPacketBundler to do the
1202 // right thing: check ack_queued_, and then check undecryptable packets and 1161 // right thing: check ack_queued_, and then check undecryptable packets and
1203 // also if there is possibility of revival. Only bundle an ack if there's no 1162 // also if there is possibility of revival. Only bundle an ack if there's no
1204 // processing left that may cause received_info_ to change. 1163 // processing left that may cause received_info_ to change.
1205 ScopedRetransmissionScheduler alarm_delayer(this); 1164 ScopedRetransmissionScheduler alarm_delayer(this);
1206 ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK); 1165 ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK);
1207 return packet_generator_.ConsumeData(id, iov, offset, fin, fec_protection, 1166 return packet_generator_.ConsumeData(id, iov, offset, fin, listener);
1208 listener);
1209 } 1167 }
1210 1168
1211 void QuicConnection::SendRstStream(QuicStreamId id, 1169 void QuicConnection::SendRstStream(QuicStreamId id,
1212 QuicRstStreamErrorCode error, 1170 QuicRstStreamErrorCode error,
1213 QuicStreamOffset bytes_written) { 1171 QuicStreamOffset bytes_written) {
1214 // Opportunistically bundle an ack with this outgoing packet. 1172 // Opportunistically bundle an ack with this outgoing packet.
1215 ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK); 1173 ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK);
1216 packet_generator_.AddControlFrame(QuicFrame(new QuicRstStreamFrame( 1174 packet_generator_.AddControlFrame(QuicFrame(new QuicRstStreamFrame(
1217 id, AdjustErrorForVersion(error, version()), bytes_written))); 1175 id, AdjustErrorForVersion(error, version()), bytes_written)));
1218 1176
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1512 // Keep writing as long as there's a pending retransmission which can be 1470 // Keep writing as long as there's a pending retransmission which can be
1513 // written. 1471 // written.
1514 while (sent_packet_manager_.HasPendingRetransmissions()) { 1472 while (sent_packet_manager_.HasPendingRetransmissions()) {
1515 const PendingRetransmission pending = 1473 const PendingRetransmission pending =
1516 sent_packet_manager_.NextPendingRetransmission(); 1474 sent_packet_manager_.NextPendingRetransmission();
1517 if (!CanWrite(HAS_RETRANSMITTABLE_DATA)) { 1475 if (!CanWrite(HAS_RETRANSMITTABLE_DATA)) {
1518 break; 1476 break;
1519 } 1477 }
1520 1478
1521 // Re-packetize the frames with a new packet number for retransmission. 1479 // Re-packetize the frames with a new packet number for retransmission.
1522 // Retransmitted data packets do not use FEC, even when it's enabled.
1523 // Retransmitted packets use the same packet number length as the 1480 // Retransmitted packets use the same packet number length as the
1524 // original. 1481 // original.
1525 // Flush the packet generator before making a new packet. 1482 // Flush the packet generator before making a new packet.
1526 // TODO(ianswett): Implement ReserializeAllFrames as a separate path that 1483 // TODO(ianswett): Implement ReserializeAllFrames as a separate path that
1527 // does not require the creator to be flushed. 1484 // does not require the creator to be flushed.
1528 packet_generator_.FlushAllQueuedFrames(); 1485 packet_generator_.FlushAllQueuedFrames();
1529 char buffer[kMaxPacketSize]; 1486 char buffer[kMaxPacketSize];
1530 packet_generator_.ReserializeAllFrames(pending, buffer, kMaxPacketSize); 1487 packet_generator_.ReserializeAllFrames(pending, buffer, kMaxPacketSize);
1531 } 1488 }
1532 } 1489 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 packet->transmission_type, packet_send_time); 1640 packet->transmission_type, packet_send_time);
1684 } 1641 }
1685 if (packet->transmission_type == NOT_RETRANSMISSION) { 1642 if (packet->transmission_type == NOT_RETRANSMISSION) {
1686 time_of_last_sent_new_packet_ = packet_send_time; 1643 time_of_last_sent_new_packet_ = packet_send_time;
1687 if (IsRetransmittable(*packet) == HAS_RETRANSMITTABLE_DATA && 1644 if (IsRetransmittable(*packet) == HAS_RETRANSMITTABLE_DATA &&
1688 last_send_for_timeout_ <= time_of_last_received_packet_) { 1645 last_send_for_timeout_ <= time_of_last_received_packet_) {
1689 last_send_for_timeout_ = packet_send_time; 1646 last_send_for_timeout_ = packet_send_time;
1690 } 1647 }
1691 } 1648 }
1692 SetPingAlarm(); 1649 SetPingAlarm();
1693 MaybeSetFecAlarm(packet_number);
1694 MaybeSetMtuAlarm(); 1650 MaybeSetMtuAlarm();
1695 DVLOG(1) << ENDPOINT << "time we began writing last sent packet: " 1651 DVLOG(1) << ENDPOINT << "time we began writing last sent packet: "
1696 << packet_send_time.ToDebuggingValue(); 1652 << packet_send_time.ToDebuggingValue();
1697 1653
1698 // TODO(ianswett): Change the packet number length and other packet creator 1654 // TODO(ianswett): Change the packet number length and other packet creator
1699 // options by a more explicit API than setting a struct value directly, 1655 // options by a more explicit API than setting a struct value directly,
1700 // perhaps via the NetworkChangeVisitor. 1656 // perhaps via the NetworkChangeVisitor.
1701 packet_generator_.UpdateSequenceNumberLength( 1657 packet_generator_.UpdateSequenceNumberLength(
1702 sent_packet_manager_.least_packet_awaited_by_peer(), 1658 sent_packet_manager_.least_packet_awaited_by_peer(),
1703 sent_packet_manager_.EstimateMaxPacketsInFlight(max_packet_length())); 1659 sent_packet_manager_.EstimateMaxPacketsInFlight(max_packet_length()));
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1771 void QuicConnection::OnSerializedPacket(SerializedPacket* serialized_packet) { 1727 void QuicConnection::OnSerializedPacket(SerializedPacket* serialized_packet) {
1772 DCHECK_NE(kInvalidPathId, serialized_packet->path_id); 1728 DCHECK_NE(kInvalidPathId, serialized_packet->path_id);
1773 if (serialized_packet->encrypted_buffer == nullptr) { 1729 if (serialized_packet->encrypted_buffer == nullptr) {
1774 // We failed to serialize the packet, so close the connection. 1730 // We failed to serialize the packet, so close the connection.
1775 // CloseConnection does not send close packet, so no infinite loop here. 1731 // CloseConnection does not send close packet, so no infinite loop here.
1776 // TODO(ianswett): This is actually an internal error, not an encryption 1732 // TODO(ianswett): This is actually an internal error, not an encryption
1777 // failure. 1733 // failure.
1778 CloseConnection(QUIC_ENCRYPTION_FAILURE, ConnectionCloseSource::FROM_SELF); 1734 CloseConnection(QUIC_ENCRYPTION_FAILURE, ConnectionCloseSource::FROM_SELF);
1779 return; 1735 return;
1780 } 1736 }
1781 if (serialized_packet->is_fec_packet && fec_alarm_->IsSet()) {
1782 // If an FEC packet is serialized with the FEC alarm set, cancel the alarm.
1783 fec_alarm_->Cancel();
1784 }
1785 SendOrQueuePacket(serialized_packet); 1737 SendOrQueuePacket(serialized_packet);
1786 } 1738 }
1787 1739
1788 void QuicConnection::OnUnrecoverableError(QuicErrorCode error, 1740 void QuicConnection::OnUnrecoverableError(QuicErrorCode error,
1789 ConnectionCloseSource source) { 1741 ConnectionCloseSource source) {
1790 // The packet creator or generator encountered an unrecoverable error: tear 1742 // The packet creator or generator encountered an unrecoverable error: tear
1791 // down local connection state immediately. 1743 // down local connection state immediately.
1792 CloseConnection(error, source); 1744 CloseConnection(error, source);
1793 } 1745 }
1794 1746
1795 void QuicConnection::OnResetFecGroup() {
1796 if (!fec_alarm_->IsSet()) {
1797 return;
1798 }
1799 // If an FEC Group is closed with the FEC alarm set, cancel the alarm.
1800 fec_alarm_->Cancel();
1801 }
1802
1803 void QuicConnection::OnCongestionWindowChange() { 1747 void QuicConnection::OnCongestionWindowChange() {
1804 packet_generator_.OnCongestionWindowChange(
1805 sent_packet_manager_.EstimateMaxPacketsInFlight(max_packet_length()));
1806 visitor_->OnCongestionWindowChange(clock_->ApproximateNow()); 1748 visitor_->OnCongestionWindowChange(clock_->ApproximateNow());
1807 } 1749 }
1808 1750
1809 void QuicConnection::OnRttChange() { 1751 void QuicConnection::OnRttChange() {
1810 // Uses the connection's smoothed RTT. If zero, uses initial_rtt. 1752 // Uses the connection's smoothed RTT. If zero, uses initial_rtt.
1811 QuicTime::Delta rtt = sent_packet_manager_.GetRttStats()->smoothed_rtt(); 1753 QuicTime::Delta rtt = sent_packet_manager_.GetRttStats()->smoothed_rtt();
1812 if (rtt.IsZero()) { 1754 if (rtt.IsZero()) {
1813 rtt = QuicTime::Delta::FromMicroseconds( 1755 rtt = QuicTime::Delta::FromMicroseconds(
1814 sent_packet_manager_.GetRttStats()->initial_rtt_us()); 1756 sent_packet_manager_.GetRttStats()->initial_rtt_us());
1815 } 1757 }
1758
1816 if (debug_visitor_) 1759 if (debug_visitor_)
1817 debug_visitor_->OnRttChanged(rtt); 1760 debug_visitor_->OnRttChanged(rtt);
1818 packet_generator_.OnRttChange(rtt);
1819 } 1761 }
1820 1762
1821 void QuicConnection::OnPathDegrading() { 1763 void QuicConnection::OnPathDegrading() {
1822 visitor_->OnPathDegrading(); 1764 visitor_->OnPathDegrading();
1823 } 1765 }
1824 1766
1825 void QuicConnection::OnHandshakeComplete() { 1767 void QuicConnection::OnHandshakeComplete() {
1826 sent_packet_manager_.SetHandshakeConfirmed(); 1768 sent_packet_manager_.SetHandshakeConfirmed();
1827 // The client should immediately ack the SHLO to confirm the handshake is 1769 // The client should immediately ack the SHLO to confirm the handshake is
1828 // complete with the server. 1770 // complete with the server.
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 } else { 2050 } else {
2109 UMA_HISTOGRAM_BOOLEAN("Net.QuicCloseConnection.NullVisitor", true); 2051 UMA_HISTOGRAM_BOOLEAN("Net.QuicCloseConnection.NullVisitor", true);
2110 } 2052 }
2111 if (debug_visitor_ != nullptr) { 2053 if (debug_visitor_ != nullptr) {
2112 debug_visitor_->OnConnectionClosed(error, source); 2054 debug_visitor_->OnConnectionClosed(error, source);
2113 } 2055 }
2114 // Cancel the alarms so they don't trigger any action now that the 2056 // Cancel the alarms so they don't trigger any action now that the
2115 // connection is closed. 2057 // connection is closed.
2116 ack_alarm_->Cancel(); 2058 ack_alarm_->Cancel();
2117 ping_alarm_->Cancel(); 2059 ping_alarm_->Cancel();
2118 fec_alarm_->Cancel();
2119 resume_writes_alarm_->Cancel(); 2060 resume_writes_alarm_->Cancel();
2120 retransmission_alarm_->Cancel(); 2061 retransmission_alarm_->Cancel();
2121 send_alarm_->Cancel(); 2062 send_alarm_->Cancel();
2122 timeout_alarm_->Cancel(); 2063 timeout_alarm_->Cancel();
2123 mtu_discovery_alarm_->Cancel(); 2064 mtu_discovery_alarm_->Cancel();
2124 } 2065 }
2125 2066
2126 void QuicConnection::SendGoAway(QuicErrorCode error, 2067 void QuicConnection::SendGoAway(QuicErrorCode error,
2127 QuicStreamId last_good_stream_id, 2068 QuicStreamId last_good_stream_id,
2128 const string& reason) { 2069 const string& reason) {
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
2518 void QuicConnection::OnPathClosed(QuicPathId path_id) { 2459 void QuicConnection::OnPathClosed(QuicPathId path_id) {
2519 // Stop receiving packets on this path. 2460 // Stop receiving packets on this path.
2520 framer_.OnPathClosed(path_id); 2461 framer_.OnPathClosed(path_id);
2521 } 2462 }
2522 2463
2523 bool QuicConnection::ack_frame_updated() const { 2464 bool QuicConnection::ack_frame_updated() const {
2524 return received_packet_manager_.ack_frame_updated(); 2465 return received_packet_manager_.ack_frame_updated();
2525 } 2466 }
2526 2467
2527 } // namespace net 2468 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_connection_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698