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

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

Issue 181483006: PACKET_NBYTE_GUID -> PACKET_NBYTE_CONNECTION_ID (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: small comment fix Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_connection_logger.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 #include <algorithm> 9 #include <algorithm>
10 #include <iterator> 10 #include <iterator>
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 packet.retransmittable_frames != NULL) ? 155 packet.retransmittable_frames != NULL) ?
156 HAS_RETRANSMITTABLE_DATA : NO_RETRANSMITTABLE_DATA), 156 HAS_RETRANSMITTABLE_DATA : NO_RETRANSMITTABLE_DATA),
157 handshake(packet.retransmittable_frames == NULL ? 157 handshake(packet.retransmittable_frames == NULL ?
158 NOT_HANDSHAKE : packet.retransmittable_frames->HasCryptoHandshake()), 158 NOT_HANDSHAKE : packet.retransmittable_frames->HasCryptoHandshake()),
159 type(GetPacketType(packet.retransmittable_frames)), 159 type(GetPacketType(packet.retransmittable_frames)),
160 length(packet.packet->length()) { 160 length(packet.packet->length()) {
161 } 161 }
162 162
163 #define ENDPOINT (is_server_ ? "Server: " : " Client: ") 163 #define ENDPOINT (is_server_ ? "Server: " : " Client: ")
164 164
165 QuicConnection::QuicConnection(QuicGuid guid, 165 QuicConnection::QuicConnection(QuicConnectionId connection_id,
166 IPEndPoint address, 166 IPEndPoint address,
167 QuicConnectionHelperInterface* helper, 167 QuicConnectionHelperInterface* helper,
168 QuicPacketWriter* writer, 168 QuicPacketWriter* writer,
169 bool is_server, 169 bool is_server,
170 const QuicVersionVector& supported_versions) 170 const QuicVersionVector& supported_versions)
171 : framer_(supported_versions, 171 : framer_(supported_versions,
172 helper->GetClock()->ApproximateNow(), 172 helper->GetClock()->ApproximateNow(),
173 is_server), 173 is_server),
174 helper_(helper), 174 helper_(helper),
175 writer_(writer), 175 writer_(writer),
176 encryption_level_(ENCRYPTION_NONE), 176 encryption_level_(ENCRYPTION_NONE),
177 clock_(helper->GetClock()), 177 clock_(helper->GetClock()),
178 random_generator_(helper->GetRandomGenerator()), 178 random_generator_(helper->GetRandomGenerator()),
179 guid_(guid), 179 connection_id_(connection_id),
180 peer_address_(address), 180 peer_address_(address),
181 largest_seen_packet_with_ack_(0), 181 largest_seen_packet_with_ack_(0),
182 largest_seen_packet_with_stop_waiting_(0), 182 largest_seen_packet_with_stop_waiting_(0),
183 pending_version_negotiation_packet_(false), 183 pending_version_negotiation_packet_(false),
184 received_packet_manager_(kTCP), 184 received_packet_manager_(kTCP),
185 ack_queued_(false), 185 ack_queued_(false),
186 stop_waiting_count_(0), 186 stop_waiting_count_(0),
187 ack_alarm_(helper->CreateAlarm(new AckAlarm(this))), 187 ack_alarm_(helper->CreateAlarm(new AckAlarm(this))),
188 retransmission_alarm_(helper->CreateAlarm(new RetransmissionAlarm(this))), 188 retransmission_alarm_(helper->CreateAlarm(new RetransmissionAlarm(this))),
189 send_alarm_(helper->CreateAlarm(new SendAlarm(this))), 189 send_alarm_(helper->CreateAlarm(new SendAlarm(this))),
190 resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))), 190 resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))),
191 timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))), 191 timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))),
192 debug_visitor_(NULL), 192 debug_visitor_(NULL),
193 packet_creator_(guid_, &framer_, random_generator_, is_server), 193 packet_creator_(connection_id_, &framer_, random_generator_, is_server),
194 packet_generator_(this, NULL, &packet_creator_), 194 packet_generator_(this, NULL, &packet_creator_),
195 idle_network_timeout_( 195 idle_network_timeout_(
196 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)), 196 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)),
197 overall_connection_timeout_(QuicTime::Delta::Infinite()), 197 overall_connection_timeout_(QuicTime::Delta::Infinite()),
198 creation_time_(clock_->ApproximateNow()), 198 creation_time_(clock_->ApproximateNow()),
199 time_of_last_received_packet_(clock_->ApproximateNow()), 199 time_of_last_received_packet_(clock_->ApproximateNow()),
200 time_of_last_sent_new_packet_(clock_->ApproximateNow()), 200 time_of_last_sent_new_packet_(clock_->ApproximateNow()),
201 sequence_number_of_last_sent_packet_(0), 201 sequence_number_of_last_sent_packet_(0),
202 sent_packet_manager_(is_server, clock_, &stats_, kTCP), 202 sent_packet_manager_(is_server, clock_, &stats_, kTCP),
203 version_negotiation_state_(START_NEGOTIATION), 203 version_negotiation_state_(START_NEGOTIATION),
204 is_server_(is_server), 204 is_server_(is_server),
205 connected_(true), 205 connected_(true),
206 address_migrating_(false) { 206 address_migrating_(false) {
207 if (!is_server_) { 207 if (!is_server_) {
208 // Pacing will be enabled if the client negotiates it. 208 // Pacing will be enabled if the client negotiates it.
209 sent_packet_manager_.MaybeEnablePacing(); 209 sent_packet_manager_.MaybeEnablePacing();
210 } 210 }
211 DVLOG(1) << ENDPOINT << "Created connection with guid: " << guid; 211 DVLOG(1) << ENDPOINT << "Created connection with connection_id: "
212 << connection_id;
212 timeout_alarm_->Set(clock_->ApproximateNow().Add(idle_network_timeout_)); 213 timeout_alarm_->Set(clock_->ApproximateNow().Add(idle_network_timeout_));
213 framer_.set_visitor(this); 214 framer_.set_visitor(this);
214 framer_.set_received_entropy_calculator(&received_packet_manager_); 215 framer_.set_received_entropy_calculator(&received_packet_manager_);
215 } 216 }
216 217
217 QuicConnection::~QuicConnection() { 218 QuicConnection::~QuicConnection() {
218 STLDeleteElements(&undecryptable_packets_); 219 STLDeleteElements(&undecryptable_packets_);
219 STLDeleteValues(&group_map_); 220 STLDeleteValues(&group_map_);
220 for (QueuedPacketList::iterator it = queued_packets_.begin(); 221 for (QueuedPacketList::iterator it = queued_packets_.begin();
221 it != queued_packets_.end(); ++it) { 222 it != queued_packets_.end(); ++it) {
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 return false; 393 return false;
393 } 394 }
394 395
395 if (!ProcessValidatedPacket()) { 396 if (!ProcessValidatedPacket()) {
396 return false; 397 return false;
397 } 398 }
398 399
399 // Will be decrement below if we fall through to return true; 400 // Will be decrement below if we fall through to return true;
400 ++stats_.packets_dropped; 401 ++stats_.packets_dropped;
401 402
402 if (header.public_header.guid != guid_) { 403 if (header.public_header.connection_id != connection_id_) {
403 DVLOG(1) << ENDPOINT << "Ignoring packet from unexpected GUID: " 404 DVLOG(1) << ENDPOINT << "Ignoring packet from unexpected ConnectionId: "
404 << header.public_header.guid << " instead of " << guid_; 405 << header.public_header.connection_id << " instead of "
406 << connection_id_;
405 return false; 407 return false;
406 } 408 }
407 409
408 if (!Near(header.packet_sequence_number, 410 if (!Near(header.packet_sequence_number,
409 last_header_.packet_sequence_number)) { 411 last_header_.packet_sequence_number)) {
410 DVLOG(1) << ENDPOINT << "Packet " << header.packet_sequence_number 412 DVLOG(1) << ENDPOINT << "Packet " << header.packet_sequence_number
411 << " out of bounds. Discarding"; 413 << " out of bounds. Discarding";
412 SendConnectionCloseWithDetails(QUIC_INVALID_PACKET_HEADER, 414 SendConnectionCloseWithDetails(QUIC_INVALID_PACKET_HEADER,
413 "Packet sequence number out of bounds"); 415 "Packet sequence number out of bounds");
414 return false; 416 return false;
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 last_rst_frames_.push_back(frame); 672 last_rst_frames_.push_back(frame);
671 return connected_; 673 return connected_;
672 } 674 }
673 675
674 bool QuicConnection::OnConnectionCloseFrame( 676 bool QuicConnection::OnConnectionCloseFrame(
675 const QuicConnectionCloseFrame& frame) { 677 const QuicConnectionCloseFrame& frame) {
676 DCHECK(connected_); 678 DCHECK(connected_);
677 if (debug_visitor_) { 679 if (debug_visitor_) {
678 debug_visitor_->OnConnectionCloseFrame(frame); 680 debug_visitor_->OnConnectionCloseFrame(frame);
679 } 681 }
680 DVLOG(1) << ENDPOINT << "Connection " << guid() << " closed with error " 682 DVLOG(1) << ENDPOINT << "Connection " << connection_id()
683 << " closed with error "
681 << QuicUtils::ErrorToString(frame.error_code) 684 << QuicUtils::ErrorToString(frame.error_code)
682 << " " << frame.error_details; 685 << " " << frame.error_details;
683 last_close_frames_.push_back(frame); 686 last_close_frames_.push_back(frame);
684 return connected_; 687 return connected_;
685 } 688 }
686 689
687 bool QuicConnection::OnGoAwayFrame(const QuicGoAwayFrame& frame) { 690 bool QuicConnection::OnGoAwayFrame(const QuicGoAwayFrame& frame) {
688 DCHECK(connected_); 691 DCHECK(connected_);
689 DVLOG(1) << ENDPOINT << "Go away received with error " 692 DVLOG(1) << ENDPOINT << "Go away received with error "
690 << QuicUtils::ErrorToString(frame.error_code) 693 << QuicUtils::ErrorToString(frame.error_code)
(...skipping 29 matching lines...) Expand all
720 << " packet " << last_header_.packet_sequence_number 723 << " packet " << last_header_.packet_sequence_number
721 << " with " << last_ack_frames_.size() << " acks, " 724 << " with " << last_ack_frames_.size() << " acks, "
722 << last_congestion_frames_.size() << " congestions, " 725 << last_congestion_frames_.size() << " congestions, "
723 << last_stop_waiting_frames_.size() << " stop_waiting, " 726 << last_stop_waiting_frames_.size() << " stop_waiting, "
724 << last_goaway_frames_.size() << " goaways, " 727 << last_goaway_frames_.size() << " goaways, "
725 << last_window_update_frames_.size() << " window updates, " 728 << last_window_update_frames_.size() << " window updates, "
726 << last_blocked_frames_.size() << " blocked, " 729 << last_blocked_frames_.size() << " blocked, "
727 << last_rst_frames_.size() << " rsts, " 730 << last_rst_frames_.size() << " rsts, "
728 << last_close_frames_.size() << " closes, " 731 << last_close_frames_.size() << " closes, "
729 << last_stream_frames_.size() 732 << last_stream_frames_.size()
730 << " stream frames for " << last_header_.public_header.guid; 733 << " stream frames for "
734 << last_header_.public_header.connection_id;
731 735
732 MaybeQueueAck(); 736 MaybeQueueAck();
733 737
734 // Discard the packet if the visitor fails to process the stream frames. 738 // Discard the packet if the visitor fails to process the stream frames.
735 if (!last_stream_frames_.empty() && 739 if (!last_stream_frames_.empty() &&
736 !visitor_->OnStreamFrames(last_stream_frames_)) { 740 !visitor_->OnStreamFrames(last_stream_frames_)) {
737 return; 741 return;
738 } 742 }
739 743
740 if (last_packet_revived_) { 744 if (last_packet_revived_) {
(...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 } 1560 }
1557 1561
1558 void QuicConnection::MaybeProcessRevivedPacket() { 1562 void QuicConnection::MaybeProcessRevivedPacket() {
1559 QuicFecGroup* group = GetFecGroup(); 1563 QuicFecGroup* group = GetFecGroup();
1560 if (!connected_ || group == NULL || !group->CanRevive()) { 1564 if (!connected_ || group == NULL || !group->CanRevive()) {
1561 return; 1565 return;
1562 } 1566 }
1563 QuicPacketHeader revived_header; 1567 QuicPacketHeader revived_header;
1564 char revived_payload[kMaxPacketSize]; 1568 char revived_payload[kMaxPacketSize];
1565 size_t len = group->Revive(&revived_header, revived_payload, kMaxPacketSize); 1569 size_t len = group->Revive(&revived_header, revived_payload, kMaxPacketSize);
1566 revived_header.public_header.guid = guid_; 1570 revived_header.public_header.connection_id = connection_id_;
1567 revived_header.public_header.version_flag = false; 1571 revived_header.public_header.version_flag = false;
1568 revived_header.public_header.reset_flag = false; 1572 revived_header.public_header.reset_flag = false;
1569 revived_header.fec_flag = false; 1573 revived_header.fec_flag = false;
1570 revived_header.is_in_fec_group = NOT_IN_FEC_GROUP; 1574 revived_header.is_in_fec_group = NOT_IN_FEC_GROUP;
1571 revived_header.fec_group = 0; 1575 revived_header.fec_group = 0;
1572 group_map_.erase(last_header_.fec_group); 1576 group_map_.erase(last_header_.fec_group);
1573 delete group; 1577 delete group;
1574 1578
1575 last_packet_revived_ = true; 1579 last_packet_revived_ = true;
1576 if (debug_visitor_) { 1580 if (debug_visitor_) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 void QuicConnection::SendConnectionCloseWithDetails(QuicErrorCode error, 1615 void QuicConnection::SendConnectionCloseWithDetails(QuicErrorCode error,
1612 const string& details) { 1616 const string& details) {
1613 // If we're write blocked, WritePacket() will not send, but will capture the 1617 // If we're write blocked, WritePacket() will not send, but will capture the
1614 // serialized packet. 1618 // serialized packet.
1615 SendConnectionClosePacket(error, details); 1619 SendConnectionClosePacket(error, details);
1616 CloseConnection(error, false); 1620 CloseConnection(error, false);
1617 } 1621 }
1618 1622
1619 void QuicConnection::SendConnectionClosePacket(QuicErrorCode error, 1623 void QuicConnection::SendConnectionClosePacket(QuicErrorCode error,
1620 const string& details) { 1624 const string& details) {
1621 DVLOG(1) << ENDPOINT << "Force closing " << guid() << " with error " 1625 DVLOG(1) << ENDPOINT << "Force closing " << connection_id()
1622 << QuicUtils::ErrorToString(error) << " (" << error << ") " 1626 << " with error " << QuicUtils::ErrorToString(error)
1623 << details; 1627 << " (" << error << ") " << details;
1624 ScopedPacketBundler ack_bundler(this, SEND_ACK); 1628 ScopedPacketBundler ack_bundler(this, SEND_ACK);
1625 QuicConnectionCloseFrame* frame = new QuicConnectionCloseFrame(); 1629 QuicConnectionCloseFrame* frame = new QuicConnectionCloseFrame();
1626 frame->error_code = error; 1630 frame->error_code = error;
1627 frame->error_details = details; 1631 frame->error_details = details;
1628 packet_generator_.AddControlFrame(QuicFrame(frame)); 1632 packet_generator_.AddControlFrame(QuicFrame(frame));
1629 Flush(); 1633 Flush();
1630 } 1634 }
1631 1635
1632 void QuicConnection::CloseConnection(QuicErrorCode error, bool from_peer) { 1636 void QuicConnection::CloseConnection(QuicErrorCode error, bool from_peer) {
1633 DCHECK(connected_); 1637 DCHECK(connected_);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1796 // If we changed the generator's batch state, restore original batch state. 1800 // If we changed the generator's batch state, restore original batch state.
1797 if (!already_in_batch_mode_) { 1801 if (!already_in_batch_mode_) {
1798 DVLOG(1) << "Leaving Batch Mode."; 1802 DVLOG(1) << "Leaving Batch Mode.";
1799 connection_->packet_generator_.FinishBatchOperations(); 1803 connection_->packet_generator_.FinishBatchOperations();
1800 } 1804 }
1801 DCHECK_EQ(already_in_batch_mode_, 1805 DCHECK_EQ(already_in_batch_mode_,
1802 connection_->packet_generator_.InBatchMode()); 1806 connection_->packet_generator_.InBatchMode());
1803 } 1807 }
1804 1808
1805 } // namespace net 1809 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_connection_logger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698