Chromium Code Reviews| 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 <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 76 guid_(guid), | 76 guid_(guid), |
| 77 peer_address_(address), | 77 peer_address_(address), |
| 78 largest_seen_packet_with_ack_(0), | 78 largest_seen_packet_with_ack_(0), |
| 79 peer_largest_observed_packet_(0), | 79 peer_largest_observed_packet_(0), |
| 80 least_packet_awaited_by_peer_(1), | 80 least_packet_awaited_by_peer_(1), |
| 81 peer_least_packet_awaiting_ack_(0), | 81 peer_least_packet_awaiting_ack_(0), |
| 82 handling_retransmission_timeout_(false), | 82 handling_retransmission_timeout_(false), |
| 83 write_blocked_(false), | 83 write_blocked_(false), |
| 84 debug_visitor_(NULL), | 84 debug_visitor_(NULL), |
| 85 packet_creator_(guid_, &framer_, random_generator_, is_server), | 85 packet_creator_(guid_, &framer_, random_generator_, is_server), |
| 86 packet_generator_(this, &packet_creator_), | 86 packet_generator_(this, NULL, &packet_creator_), |
| 87 idle_network_timeout_( | 87 idle_network_timeout_( |
| 88 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)), | 88 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)), |
| 89 overall_connection_timeout_(QuicTime::Delta::Infinite()), | 89 overall_connection_timeout_(QuicTime::Delta::Infinite()), |
| 90 creation_time_(clock_->ApproximateNow()), | 90 creation_time_(clock_->ApproximateNow()), |
| 91 time_of_last_received_packet_(clock_->ApproximateNow()), | 91 time_of_last_received_packet_(clock_->ApproximateNow()), |
| 92 time_of_last_sent_packet_(clock_->ApproximateNow()), | 92 time_of_last_sent_packet_(clock_->ApproximateNow()), |
| 93 time_largest_observed_(QuicTime::Zero()), | 93 time_largest_observed_(QuicTime::Zero()), |
| 94 congestion_manager_(clock_, kTCP), | 94 congestion_manager_(clock_, kTCP), |
| 95 version_negotiation_state_(START_NEGOTIATION), | 95 version_negotiation_state_(START_NEGOTIATION), |
| 96 quic_version_(kQuicVersion1), | 96 quic_version_(kQuicVersion1), |
| (...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1084 DVLOG(2) << ENDPOINT << "packet(" << sequence_number << "): " << std::endl | 1084 DVLOG(2) << ENDPOINT << "packet(" << sequence_number << "): " << std::endl |
| 1085 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); | 1085 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); |
| 1086 | 1086 |
| 1087 DCHECK(encrypted->length() <= kMaxPacketSize) | 1087 DCHECK(encrypted->length() <= kMaxPacketSize) |
| 1088 << "Packet " << sequence_number << " will not be read; too large: " | 1088 << "Packet " << sequence_number << " will not be read; too large: " |
| 1089 << packet->length() << " " << encrypted->length() << " " | 1089 << packet->length() << " " << encrypted->length() << " " |
| 1090 << outgoing_ack_ << " forced: " << (forced == FORCE ? "yes" : "no"); | 1090 << outgoing_ack_ << " forced: " << (forced == FORCE ? "yes" : "no"); |
| 1091 | 1091 |
| 1092 int error; | 1092 int error; |
| 1093 QuicTime now = clock_->Now(); | 1093 QuicTime now = clock_->Now(); |
| 1094 if (helper_->WritePacketToWire(*encrypted, &error) == -1) { | 1094 if (WritePacketToWire(sequence_number, level, *encrypted, &error) == -1) { |
| 1095 if (helper_->IsWriteBlocked(error)) { | 1095 if (helper_->IsWriteBlocked(error)) { |
| 1096 // TODO(satyashekhar): It might be more efficient (fewer system calls), if | 1096 // TODO(satyashekhar): It might be more efficient (fewer system calls), if |
| 1097 // all connections share this variable i.e this becomes a part of | 1097 // all connections share this variable i.e this becomes a part of |
| 1098 // PacketWriterInterface. | 1098 // PacketWriterInterface. |
| 1099 write_blocked_ = true; | 1099 write_blocked_ = true; |
| 1100 // If the socket buffers the the data, then the packet should not | 1100 // If the socket buffers the the data, then the packet should not |
| 1101 // be queued and sent again, which would result in an unnecessary | 1101 // be queued and sent again, which would result in an unnecessary |
| 1102 // duplicate packet being sent. | 1102 // duplicate packet being sent. |
| 1103 return helper_->IsWriteBlockedDataBuffered(); | 1103 return helper_->IsWriteBlockedDataBuffered(); |
| 1104 } | 1104 } |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 1129 | 1129 |
| 1130 if (retransmission == IS_RETRANSMISSION) { | 1130 if (retransmission == IS_RETRANSMISSION) { |
| 1131 stats_.bytes_retransmitted += encrypted->length(); | 1131 stats_.bytes_retransmitted += encrypted->length(); |
| 1132 ++stats_.packets_retransmitted; | 1132 ++stats_.packets_retransmitted; |
| 1133 } | 1133 } |
| 1134 | 1134 |
| 1135 delete packet; | 1135 delete packet; |
| 1136 return true; | 1136 return true; |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 int QuicConnection::WritePacketToWire(QuicPacketSequenceNumber sequence_number, | |
| 1140 EncryptionLevel level, | |
| 1141 const QuicEncryptedPacket& packet, | |
| 1142 int* error) { | |
| 1143 int rv = helper_->WritePacketToWire(packet, error); | |
| 1144 if (debug_visitor_) { | |
| 1145 debug_visitor_->OnPacketSent(sequence_number, level, packet, | |
| 1146 rv == -1 ? *error : rv); | |
|
eroman
2013/06/20 22:20:04
What is the range of |*error|?
Is it a NetError c
Ryan Hamilton
2013/06/20 22:44:16
-1 == error, otherwise positive values equal the n
| |
| 1147 } | |
| 1148 return rv; | |
| 1149 } | |
| 1150 | |
| 1139 bool QuicConnection::OnSerializedPacket( | 1151 bool QuicConnection::OnSerializedPacket( |
| 1140 const SerializedPacket& serialized_packet) { | 1152 const SerializedPacket& serialized_packet) { |
| 1141 if (serialized_packet.retransmittable_frames != NULL) { | 1153 if (serialized_packet.retransmittable_frames != NULL) { |
| 1142 DCHECK(unacked_packets_.empty() || | 1154 DCHECK(unacked_packets_.empty() || |
| 1143 unacked_packets_.rbegin()->first < | 1155 unacked_packets_.rbegin()->first < |
| 1144 serialized_packet.sequence_number); | 1156 serialized_packet.sequence_number); |
| 1145 // Retransmitted frames will be sent with the same encryption level as the | 1157 // Retransmitted frames will be sent with the same encryption level as the |
| 1146 // original. | 1158 // original. |
| 1147 serialized_packet.retransmittable_frames->set_encryption_level( | 1159 serialized_packet.retransmittable_frames->set_encryption_level( |
| 1148 encryption_level_); | 1160 encryption_level_); |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1497 if (connection_timeout < timeout) { | 1509 if (connection_timeout < timeout) { |
| 1498 timeout = connection_timeout; | 1510 timeout = connection_timeout; |
| 1499 } | 1511 } |
| 1500 } | 1512 } |
| 1501 | 1513 |
| 1502 helper_->SetTimeoutAlarm(timeout); | 1514 helper_->SetTimeoutAlarm(timeout); |
| 1503 return false; | 1515 return false; |
| 1504 } | 1516 } |
| 1505 | 1517 |
| 1506 } // namespace net | 1518 } // namespace net |
| OLD | NEW |