| 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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 random_generator_(helper->GetRandomGenerator()), | 204 random_generator_(helper->GetRandomGenerator()), |
| 205 connection_id_(connection_id), | 205 connection_id_(connection_id), |
| 206 peer_address_(address), | 206 peer_address_(address), |
| 207 migrating_peer_port_(0), | 207 migrating_peer_port_(0), |
| 208 last_packet_revived_(false), | 208 last_packet_revived_(false), |
| 209 last_size_(0), | 209 last_size_(0), |
| 210 last_decrypted_packet_level_(ENCRYPTION_NONE), | 210 last_decrypted_packet_level_(ENCRYPTION_NONE), |
| 211 largest_seen_packet_with_ack_(0), | 211 largest_seen_packet_with_ack_(0), |
| 212 largest_seen_packet_with_stop_waiting_(0), | 212 largest_seen_packet_with_stop_waiting_(0), |
| 213 pending_version_negotiation_packet_(false), | 213 pending_version_negotiation_packet_(false), |
| 214 received_packet_manager_(kTCP, &stats_), | 214 received_packet_manager_(&stats_), |
| 215 ack_queued_(false), | 215 ack_queued_(false), |
| 216 stop_waiting_count_(0), | 216 stop_waiting_count_(0), |
| 217 ack_alarm_(helper->CreateAlarm(new AckAlarm(this))), | 217 ack_alarm_(helper->CreateAlarm(new AckAlarm(this))), |
| 218 retransmission_alarm_(helper->CreateAlarm(new RetransmissionAlarm(this))), | 218 retransmission_alarm_(helper->CreateAlarm(new RetransmissionAlarm(this))), |
| 219 send_alarm_(helper->CreateAlarm(new SendAlarm(this))), | 219 send_alarm_(helper->CreateAlarm(new SendAlarm(this))), |
| 220 resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))), | 220 resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))), |
| 221 timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))), | 221 timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))), |
| 222 ping_alarm_(helper->CreateAlarm(new PingAlarm(this))), | 222 ping_alarm_(helper->CreateAlarm(new PingAlarm(this))), |
| 223 packet_generator_(connection_id_, &framer_, random_generator_, this), | 223 packet_generator_(connection_id_, &framer_, random_generator_, this), |
| 224 idle_network_timeout_( | 224 idle_network_timeout_( |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 STLDeleteValues(&group_map_); | 262 STLDeleteValues(&group_map_); |
| 263 for (QueuedPacketList::iterator it = queued_packets_.begin(); | 263 for (QueuedPacketList::iterator it = queued_packets_.begin(); |
| 264 it != queued_packets_.end(); ++it) { | 264 it != queued_packets_.end(); ++it) { |
| 265 delete it->packet; | 265 delete it->packet; |
| 266 } | 266 } |
| 267 } | 267 } |
| 268 | 268 |
| 269 void QuicConnection::SetFromConfig(const QuicConfig& config) { | 269 void QuicConnection::SetFromConfig(const QuicConfig& config) { |
| 270 SetIdleNetworkTimeout(config.idle_connection_state_lifetime()); | 270 SetIdleNetworkTimeout(config.idle_connection_state_lifetime()); |
| 271 sent_packet_manager_.SetFromConfig(config); | 271 sent_packet_manager_.SetFromConfig(config); |
| 272 // TODO(satyamshekhar): Set congestion control and ICSL also. | |
| 273 } | 272 } |
| 274 | 273 |
| 275 bool QuicConnection::SelectMutualVersion( | 274 bool QuicConnection::SelectMutualVersion( |
| 276 const QuicVersionVector& available_versions) { | 275 const QuicVersionVector& available_versions) { |
| 277 // Try to find the highest mutual version by iterating over supported | 276 // Try to find the highest mutual version by iterating over supported |
| 278 // versions, starting with the highest, and breaking out of the loop once we | 277 // versions, starting with the highest, and breaking out of the loop once we |
| 279 // find a matching version in the provided available_versions vector. | 278 // find a matching version in the provided available_versions vector. |
| 280 const QuicVersionVector& supported_versions = framer_.supported_versions(); | 279 const QuicVersionVector& supported_versions = framer_.supported_versions(); |
| 281 for (size_t i = 0; i < supported_versions.size(); ++i) { | 280 for (size_t i = 0; i < supported_versions.size(); ++i) { |
| 282 const QuicVersion& version = supported_versions[i]; | 281 const QuicVersion& version = supported_versions[i]; |
| (...skipping 1284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1567 DLOG(ERROR) << "Unable to send ping!?"; | 1566 DLOG(ERROR) << "Unable to send ping!?"; |
| 1568 } | 1567 } |
| 1569 } else { | 1568 } else { |
| 1570 packet_generator_.AddControlFrame(QuicFrame(new QuicPingFrame)); | 1569 packet_generator_.AddControlFrame(QuicFrame(new QuicPingFrame)); |
| 1571 } | 1570 } |
| 1572 } | 1571 } |
| 1573 | 1572 |
| 1574 void QuicConnection::SendAck() { | 1573 void QuicConnection::SendAck() { |
| 1575 ack_alarm_->Cancel(); | 1574 ack_alarm_->Cancel(); |
| 1576 stop_waiting_count_ = 0; | 1575 stop_waiting_count_ = 0; |
| 1577 // TODO(rch): delay this until the CreateFeedbackFrame | |
| 1578 // method is invoked. This requires changes SetShouldSendAck | |
| 1579 // to be a no-arg method, and re-jiggering its implementation. | |
| 1580 bool send_feedback = false; | 1576 bool send_feedback = false; |
| 1581 if (received_packet_manager_.GenerateCongestionFeedback( | 1577 |
| 1582 &outgoing_congestion_feedback_)) { | 1578 // Deprecating the Congestion Feedback Frame after QUIC_VERSION_22. |
| 1583 DVLOG(1) << ENDPOINT << "Sending feedback: " | 1579 if (version() <= QUIC_VERSION_22) { |
| 1584 << outgoing_congestion_feedback_; | 1580 if (received_packet_manager_.GenerateCongestionFeedback( |
| 1585 send_feedback = true; | 1581 &outgoing_congestion_feedback_)) { |
| 1582 DVLOG(1) << ENDPOINT << "Sending feedback: " |
| 1583 << outgoing_congestion_feedback_; |
| 1584 send_feedback = true; |
| 1585 } |
| 1586 } | 1586 } |
| 1587 | 1587 |
| 1588 packet_generator_.SetShouldSendAck(send_feedback, true); | 1588 packet_generator_.SetShouldSendAck(send_feedback, true); |
| 1589 } | 1589 } |
| 1590 | 1590 |
| 1591 void QuicConnection::OnRetransmissionTimeout() { | 1591 void QuicConnection::OnRetransmissionTimeout() { |
| 1592 if (!sent_packet_manager_.HasUnackedPackets()) { | 1592 if (!sent_packet_manager_.HasUnackedPackets()) { |
| 1593 return; | 1593 return; |
| 1594 } | 1594 } |
| 1595 | 1595 |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1985 // If we changed the generator's batch state, restore original batch state. | 1985 // If we changed the generator's batch state, restore original batch state. |
| 1986 if (!already_in_batch_mode_) { | 1986 if (!already_in_batch_mode_) { |
| 1987 DVLOG(1) << "Leaving Batch Mode."; | 1987 DVLOG(1) << "Leaving Batch Mode."; |
| 1988 connection_->packet_generator_.FinishBatchOperations(); | 1988 connection_->packet_generator_.FinishBatchOperations(); |
| 1989 } | 1989 } |
| 1990 DCHECK_EQ(already_in_batch_mode_, | 1990 DCHECK_EQ(already_in_batch_mode_, |
| 1991 connection_->packet_generator_.InBatchMode()); | 1991 connection_->packet_generator_.InBatchMode()); |
| 1992 } | 1992 } |
| 1993 | 1993 |
| 1994 } // namespace net | 1994 } // namespace net |
| OLD | NEW |