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 #include <algorithm> | 9 #include <algorithm> |
10 #include <iterator> | 10 #include <iterator> |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 ack_alarm_(helper->CreateAlarm(new AckAlarm(this))), | 200 ack_alarm_(helper->CreateAlarm(new AckAlarm(this))), |
201 retransmission_alarm_(helper->CreateAlarm(new RetransmissionAlarm(this))), | 201 retransmission_alarm_(helper->CreateAlarm(new RetransmissionAlarm(this))), |
202 send_alarm_(helper->CreateAlarm(new SendAlarm(this))), | 202 send_alarm_(helper->CreateAlarm(new SendAlarm(this))), |
203 resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))), | 203 resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))), |
204 timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))), | 204 timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))), |
205 ping_alarm_(helper->CreateAlarm(new PingAlarm(this))), | 205 ping_alarm_(helper->CreateAlarm(new PingAlarm(this))), |
206 packet_generator_(connection_id_, &framer_, random_generator_, this), | 206 packet_generator_(connection_id_, &framer_, random_generator_, this), |
207 idle_network_timeout_( | 207 idle_network_timeout_( |
208 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)), | 208 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)), |
209 overall_connection_timeout_(QuicTime::Delta::Infinite()), | 209 overall_connection_timeout_(QuicTime::Delta::Infinite()), |
210 time_of_last_received_packet_(clock_->ApproximateNow()), | 210 time_of_last_received_packet_( |
211 time_of_last_sent_new_packet_(clock_->ApproximateNow()), | 211 FLAGS_quic_timeouts_require_activity |
| 212 ? QuicTime::Zero() : clock_->ApproximateNow()), |
| 213 time_of_last_sent_new_packet_( |
| 214 FLAGS_quic_timeouts_require_activity |
| 215 ? QuicTime::Zero() : clock_->ApproximateNow()), |
212 sequence_number_of_last_sent_packet_(0), | 216 sequence_number_of_last_sent_packet_(0), |
213 sent_packet_manager_( | 217 sent_packet_manager_( |
214 is_server, clock_, &stats_, | 218 is_server, clock_, &stats_, |
215 FLAGS_quic_use_bbr_congestion_control ? kBBR : kCubic, | 219 FLAGS_quic_use_bbr_congestion_control ? kBBR : kCubic, |
216 FLAGS_quic_use_time_loss_detection ? kTime : kNack), | 220 FLAGS_quic_use_time_loss_detection ? kTime : kNack), |
217 version_negotiation_state_(START_NEGOTIATION), | 221 version_negotiation_state_(START_NEGOTIATION), |
218 is_server_(is_server), | 222 is_server_(is_server), |
219 connected_(true), | 223 connected_(true), |
220 peer_ip_changed_(false), | 224 peer_ip_changed_(false), |
221 peer_port_changed_(false), | 225 peer_port_changed_(false), |
(...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1882 } else { | 1886 } else { |
1883 overall_connection_timeout_ = timeout; | 1887 overall_connection_timeout_ = timeout; |
1884 } | 1888 } |
1885 } | 1889 } |
1886 | 1890 |
1887 bool QuicConnection::CheckForTimeout() { | 1891 bool QuicConnection::CheckForTimeout() { |
1888 QuicTime now = clock_->ApproximateNow(); | 1892 QuicTime now = clock_->ApproximateNow(); |
1889 QuicTime time_of_last_packet = max(time_of_last_received_packet_, | 1893 QuicTime time_of_last_packet = max(time_of_last_received_packet_, |
1890 time_of_last_sent_new_packet_); | 1894 time_of_last_sent_new_packet_); |
1891 | 1895 |
| 1896 // If no packets have been sent or recieved, then don't timeout. |
| 1897 if (FLAGS_quic_timeouts_require_activity && |
| 1898 !time_of_last_packet.IsInitialized()) { |
| 1899 timeout_alarm_->Cancel(); |
| 1900 timeout_alarm_->Set(now.Add(idle_network_timeout_)); |
| 1901 return false; |
| 1902 } |
| 1903 |
1892 // |delta| can be < 0 as |now| is approximate time but |time_of_last_packet| | 1904 // |delta| can be < 0 as |now| is approximate time but |time_of_last_packet| |
1893 // is accurate time. However, this should not change the behavior of | 1905 // is accurate time. However, this should not change the behavior of |
1894 // timeout handling. | 1906 // timeout handling. |
1895 QuicTime::Delta delta = now.Subtract(time_of_last_packet); | 1907 QuicTime::Delta delta = now.Subtract(time_of_last_packet); |
1896 DVLOG(1) << ENDPOINT << "last packet " | 1908 DVLOG(1) << ENDPOINT << "last packet " |
1897 << time_of_last_packet.ToDebuggingValue() | 1909 << time_of_last_packet.ToDebuggingValue() |
1898 << " now:" << now.ToDebuggingValue() | 1910 << " now:" << now.ToDebuggingValue() |
1899 << " delta:" << delta.ToMicroseconds() | 1911 << " delta:" << delta.ToMicroseconds() |
1900 << " network_timeout: " << idle_network_timeout_.ToMicroseconds(); | 1912 << " network_timeout: " << idle_network_timeout_.ToMicroseconds(); |
1901 if (delta >= idle_network_timeout_) { | 1913 if (delta >= idle_network_timeout_) { |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2007 } | 2019 } |
2008 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { | 2020 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { |
2009 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { | 2021 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { |
2010 return true; | 2022 return true; |
2011 } | 2023 } |
2012 } | 2024 } |
2013 return false; | 2025 return false; |
2014 } | 2026 } |
2015 | 2027 |
2016 } // namespace net | 2028 } // namespace net |
OLD | NEW |