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

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

Issue 157403006: Add QUIC_VERSION_15 to add a revived_packets set to replace the (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 | « no previous file | 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 #include <algorithm> 9 #include <algorithm>
10 #include <iterator> 10 #include <iterator>
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 361
362 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { 362 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) {
363 return true; 363 return true;
364 } 364 }
365 365
366 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { 366 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) {
367 if (debug_visitor_) { 367 if (debug_visitor_) {
368 debug_visitor_->OnPacketHeader(header); 368 debug_visitor_->OnPacketHeader(header);
369 } 369 }
370 370
371 if (header.fec_flag && framer_.version() <= QUIC_VERSION_14) {
372 DLOG(WARNING) << "Ignoring FEC packets for versions prior to 15.";
373 return false;
374 }
375
371 if (!ProcessValidatedPacket()) { 376 if (!ProcessValidatedPacket()) {
372 return false; 377 return false;
373 } 378 }
374 379
375 // Will be decrement below if we fall through to return true; 380 // Will be decrement below if we fall through to return true;
376 ++stats_.packets_dropped; 381 ++stats_.packets_dropped;
377 382
378 if (header.public_header.guid != guid_) { 383 if (header.public_header.guid != guid_) {
379 DVLOG(1) << ENDPOINT << "Ignoring packet from unexpected GUID: " 384 DVLOG(1) << ENDPOINT << "Ignoring packet from unexpected GUID: "
380 << header.public_header.guid << " instead of " << guid_; 385 << header.public_header.guid << " instead of " << guid_;
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 } 572 }
568 573
569 if (!sent_entropy_manager_.IsValidEntropy( 574 if (!sent_entropy_manager_.IsValidEntropy(
570 incoming_ack.received_info.largest_observed, 575 incoming_ack.received_info.largest_observed,
571 incoming_ack.received_info.missing_packets, 576 incoming_ack.received_info.missing_packets,
572 incoming_ack.received_info.entropy_hash)) { 577 incoming_ack.received_info.entropy_hash)) {
573 DLOG(ERROR) << ENDPOINT << "Peer sent invalid entropy."; 578 DLOG(ERROR) << ENDPOINT << "Peer sent invalid entropy.";
574 return false; 579 return false;
575 } 580 }
576 581
582 for (SequenceNumberSet::const_iterator iter =
583 incoming_ack.received_info.revived_packets.begin();
584 iter != incoming_ack.received_info.revived_packets.end(); ++iter) {
585 if (!ContainsKey(incoming_ack.received_info.missing_packets, *iter)) {
586 DLOG(ERROR) << ENDPOINT
587 << "Peer specified revived packet which was not missing.";
588 return false;
589 }
590 }
577 return true; 591 return true;
578 } 592 }
579 593
580 void QuicConnection::OnFecData(const QuicFecData& fec) { 594 void QuicConnection::OnFecData(const QuicFecData& fec) {
581 DCHECK_EQ(IN_FEC_GROUP, last_header_.is_in_fec_group); 595 DCHECK_EQ(IN_FEC_GROUP, last_header_.is_in_fec_group);
582 DCHECK_NE(0u, last_header_.fec_group); 596 DCHECK_NE(0u, last_header_.fec_group);
583 QuicFecGroup* group = GetFecGroup(); 597 QuicFecGroup* group = GetFecGroup();
584 if (group != NULL) { 598 if (group != NULL) {
585 group->UpdateFec(last_header_.packet_sequence_number, fec); 599 group->UpdateFec(last_header_.packet_sequence_number, fec);
586 } 600 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 << " stream frames for " << last_header_.public_header.guid; 651 << " stream frames for " << last_header_.public_header.guid;
638 652
639 MaybeQueueAck(); 653 MaybeQueueAck();
640 654
641 // Discard the packet if the visitor fails to process the stream frames. 655 // Discard the packet if the visitor fails to process the stream frames.
642 if (!last_stream_frames_.empty() && 656 if (!last_stream_frames_.empty() &&
643 !visitor_->OnStreamFrames(last_stream_frames_)) { 657 !visitor_->OnStreamFrames(last_stream_frames_)) {
644 return; 658 return;
645 } 659 }
646 660
647 received_packet_manager_.RecordPacketReceived(last_size_, 661 if (last_packet_revived_) {
648 last_header_, 662 received_packet_manager_.RecordPacketRevived(
649 time_of_last_received_packet_, 663 last_header_.packet_sequence_number);
650 last_packet_revived_); 664 } else {
665 received_packet_manager_.RecordPacketReceived(
666 last_size_, last_header_, time_of_last_received_packet_);
667 }
651 for (size_t i = 0; i < last_stream_frames_.size(); ++i) { 668 for (size_t i = 0; i < last_stream_frames_.size(); ++i) {
652 stats_.stream_bytes_received += 669 stats_.stream_bytes_received +=
653 last_stream_frames_[i].data.TotalBufferSize(); 670 last_stream_frames_[i].data.TotalBufferSize();
654 } 671 }
655 672
656 // Process stream resets, then acks, then congestion feedback. 673 // Process stream resets, then acks, then congestion feedback.
657 for (size_t i = 0; i < last_goaway_frames_.size(); ++i) { 674 for (size_t i = 0; i < last_goaway_frames_.size(); ++i) {
658 visitor_->OnGoAway(last_goaway_frames_[i]); 675 visitor_->OnGoAway(last_goaway_frames_[i]);
659 } 676 }
660 for (size_t i = 0; i < last_rst_frames_.size(); ++i) { 677 for (size_t i = 0; i < last_rst_frames_.size(); ++i) {
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 // If we changed the generator's batch state, restore original batch state. 1681 // If we changed the generator's batch state, restore original batch state.
1665 if (!already_in_batch_mode_) { 1682 if (!already_in_batch_mode_) {
1666 DVLOG(1) << "Leaving Batch Mode."; 1683 DVLOG(1) << "Leaving Batch Mode.";
1667 connection_->packet_generator_.FinishBatchOperations(); 1684 connection_->packet_generator_.FinishBatchOperations();
1668 } 1685 }
1669 DCHECK_EQ(already_in_batch_mode_, 1686 DCHECK_EQ(already_in_batch_mode_,
1670 connection_->packet_generator_.InBatchMode()); 1687 connection_->packet_generator_.InBatchMode());
1671 } 1688 }
1672 1689
1673 } // namespace net 1690 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/quic_connection_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698