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 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 last_header_ = header; | 497 last_header_ = header; |
498 DCHECK(connected_); | 498 DCHECK(connected_); |
499 return true; | 499 return true; |
500 } | 500 } |
501 | 501 |
502 void QuicConnection::OnFecProtectedPayload(StringPiece payload) { | 502 void QuicConnection::OnFecProtectedPayload(StringPiece payload) { |
503 DCHECK_EQ(IN_FEC_GROUP, last_header_.is_in_fec_group); | 503 DCHECK_EQ(IN_FEC_GROUP, last_header_.is_in_fec_group); |
504 DCHECK_NE(0u, last_header_.fec_group); | 504 DCHECK_NE(0u, last_header_.fec_group); |
505 QuicFecGroup* group = GetFecGroup(); | 505 QuicFecGroup* group = GetFecGroup(); |
506 if (group != NULL) { | 506 if (group != NULL) { |
507 group->Update(last_header_, payload); | 507 group->Update(last_decrypted_packet_level_, last_header_, payload); |
508 } | 508 } |
509 } | 509 } |
510 | 510 |
511 bool QuicConnection::OnStreamFrame(const QuicStreamFrame& frame) { | 511 bool QuicConnection::OnStreamFrame(const QuicStreamFrame& frame) { |
512 DCHECK(connected_); | 512 DCHECK(connected_); |
513 if (debug_visitor_) { | 513 if (debug_visitor_) { |
514 debug_visitor_->OnStreamFrame(frame); | 514 debug_visitor_->OnStreamFrame(frame); |
515 } | 515 } |
516 if (frame.stream_id != kCryptoStreamId && | 516 if (frame.stream_id != kCryptoStreamId && |
517 last_decrypted_packet_level_ == ENCRYPTION_NONE) { | 517 last_decrypted_packet_level_ == ENCRYPTION_NONE) { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 } | 707 } |
708 | 708 |
709 return true; | 709 return true; |
710 } | 710 } |
711 | 711 |
712 void QuicConnection::OnFecData(const QuicFecData& fec) { | 712 void QuicConnection::OnFecData(const QuicFecData& fec) { |
713 DCHECK_EQ(IN_FEC_GROUP, last_header_.is_in_fec_group); | 713 DCHECK_EQ(IN_FEC_GROUP, last_header_.is_in_fec_group); |
714 DCHECK_NE(0u, last_header_.fec_group); | 714 DCHECK_NE(0u, last_header_.fec_group); |
715 QuicFecGroup* group = GetFecGroup(); | 715 QuicFecGroup* group = GetFecGroup(); |
716 if (group != NULL) { | 716 if (group != NULL) { |
717 group->UpdateFec(last_header_.packet_sequence_number, fec); | 717 group->UpdateFec(last_decrypted_packet_level_, |
| 718 last_header_.packet_sequence_number, fec); |
718 } | 719 } |
719 } | 720 } |
720 | 721 |
721 bool QuicConnection::OnRstStreamFrame(const QuicRstStreamFrame& frame) { | 722 bool QuicConnection::OnRstStreamFrame(const QuicRstStreamFrame& frame) { |
722 DCHECK(connected_); | 723 DCHECK(connected_); |
723 if (debug_visitor_) { | 724 if (debug_visitor_) { |
724 debug_visitor_->OnRstStreamFrame(frame); | 725 debug_visitor_->OnRstStreamFrame(frame); |
725 } | 726 } |
726 DVLOG(1) << ENDPOINT << "Stream reset with error " | 727 DVLOG(1) << ENDPOINT << "Stream reset with error " |
727 << QuicUtils::StreamErrorToString(frame.error_code); | 728 << QuicUtils::StreamErrorToString(frame.error_code); |
(...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1618 QuicEncrypter* encrypter) { | 1619 QuicEncrypter* encrypter) { |
1619 framer_.SetEncrypter(level, encrypter); | 1620 framer_.SetEncrypter(level, encrypter); |
1620 } | 1621 } |
1621 | 1622 |
1622 const QuicEncrypter* QuicConnection::encrypter(EncryptionLevel level) const { | 1623 const QuicEncrypter* QuicConnection::encrypter(EncryptionLevel level) const { |
1623 return framer_.encrypter(level); | 1624 return framer_.encrypter(level); |
1624 } | 1625 } |
1625 | 1626 |
1626 void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) { | 1627 void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) { |
1627 encryption_level_ = level; | 1628 encryption_level_ = level; |
| 1629 packet_creator_.set_encryption_level(level); |
1628 } | 1630 } |
1629 | 1631 |
1630 void QuicConnection::SetDecrypter(QuicDecrypter* decrypter, | 1632 void QuicConnection::SetDecrypter(QuicDecrypter* decrypter, |
1631 EncryptionLevel level) { | 1633 EncryptionLevel level) { |
1632 framer_.SetDecrypter(decrypter, level); | 1634 framer_.SetDecrypter(decrypter, level); |
1633 } | 1635 } |
1634 | 1636 |
1635 void QuicConnection::SetAlternativeDecrypter(QuicDecrypter* decrypter, | 1637 void QuicConnection::SetAlternativeDecrypter(QuicDecrypter* decrypter, |
1636 EncryptionLevel level, | 1638 EncryptionLevel level, |
1637 bool latch_once_used) { | 1639 bool latch_once_used) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1691 revived_header.public_header.connection_id_length = | 1693 revived_header.public_header.connection_id_length = |
1692 last_header_.public_header.connection_id_length; | 1694 last_header_.public_header.connection_id_length; |
1693 revived_header.public_header.version_flag = false; | 1695 revived_header.public_header.version_flag = false; |
1694 revived_header.public_header.reset_flag = false; | 1696 revived_header.public_header.reset_flag = false; |
1695 revived_header.public_header.sequence_number_length = | 1697 revived_header.public_header.sequence_number_length = |
1696 last_header_.public_header.sequence_number_length; | 1698 last_header_.public_header.sequence_number_length; |
1697 revived_header.fec_flag = false; | 1699 revived_header.fec_flag = false; |
1698 revived_header.is_in_fec_group = NOT_IN_FEC_GROUP; | 1700 revived_header.is_in_fec_group = NOT_IN_FEC_GROUP; |
1699 revived_header.fec_group = 0; | 1701 revived_header.fec_group = 0; |
1700 group_map_.erase(last_header_.fec_group); | 1702 group_map_.erase(last_header_.fec_group); |
| 1703 last_decrypted_packet_level_ = group->effective_encryption_level(); |
| 1704 DCHECK_LT(last_decrypted_packet_level_, NUM_ENCRYPTION_LEVELS); |
1701 delete group; | 1705 delete group; |
1702 | 1706 |
1703 last_packet_revived_ = true; | 1707 last_packet_revived_ = true; |
1704 if (debug_visitor_) { | 1708 if (debug_visitor_) { |
1705 debug_visitor_->OnRevivedPacket(revived_header, | 1709 debug_visitor_->OnRevivedPacket(revived_header, |
1706 StringPiece(revived_payload, len)); | 1710 StringPiece(revived_payload, len)); |
1707 } | 1711 } |
1708 | 1712 |
1709 ++stats_.packets_revived; | 1713 ++stats_.packets_revived; |
1710 framer_.ProcessRevivedPacket(&revived_header, | 1714 framer_.ProcessRevivedPacket(&revived_header, |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1945 // If we changed the generator's batch state, restore original batch state. | 1949 // If we changed the generator's batch state, restore original batch state. |
1946 if (!already_in_batch_mode_) { | 1950 if (!already_in_batch_mode_) { |
1947 DVLOG(1) << "Leaving Batch Mode."; | 1951 DVLOG(1) << "Leaving Batch Mode."; |
1948 connection_->packet_generator_.FinishBatchOperations(); | 1952 connection_->packet_generator_.FinishBatchOperations(); |
1949 } | 1953 } |
1950 DCHECK_EQ(already_in_batch_mode_, | 1954 DCHECK_EQ(already_in_batch_mode_, |
1951 connection_->packet_generator_.InBatchMode()); | 1955 connection_->packet_generator_.InBatchMode()); |
1952 } | 1956 } |
1953 | 1957 |
1954 } // namespace net | 1958 } // namespace net |
OLD | NEW |