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

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

Issue 612323013: QUIC - (no behavior change) s/NULL/nullptr/g in .../quic/... (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_framer_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_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include "base/containers/hash_tables.h" 7 #include "base/containers/hash_tables.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "net/quic/crypto/crypto_framer.h" 9 #include "net/quic/crypto/crypto_framer.h"
10 #include "net/quic/crypto/crypto_handshake_message.h" 10 #include "net/quic/crypto/crypto_handshake_message.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 return true; 139 return true;
140 } 140 }
141 141
142 bool QuicFramerVisitorInterface::OnBlockedFrame(const QuicBlockedFrame& frame) { 142 bool QuicFramerVisitorInterface::OnBlockedFrame(const QuicBlockedFrame& frame) {
143 return true; 143 return true;
144 } 144 }
145 145
146 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions, 146 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions,
147 QuicTime creation_time, 147 QuicTime creation_time,
148 bool is_server) 148 bool is_server)
149 : visitor_(NULL), 149 : visitor_(nullptr),
150 fec_builder_(NULL), 150 fec_builder_(nullptr),
151 entropy_calculator_(NULL), 151 entropy_calculator_(nullptr),
152 error_(QUIC_NO_ERROR), 152 error_(QUIC_NO_ERROR),
153 last_sequence_number_(0), 153 last_sequence_number_(0),
154 last_serialized_connection_id_(0), 154 last_serialized_connection_id_(0),
155 supported_versions_(supported_versions), 155 supported_versions_(supported_versions),
156 decrypter_level_(ENCRYPTION_NONE), 156 decrypter_level_(ENCRYPTION_NONE),
157 alternative_decrypter_level_(ENCRYPTION_NONE), 157 alternative_decrypter_level_(ENCRYPTION_NONE),
158 alternative_decrypter_latch_(false), 158 alternative_decrypter_latch_(false),
159 is_server_(is_server), 159 is_server_(is_server),
160 validate_flags_(true), 160 validate_flags_(true),
161 creation_time_(creation_time), 161 creation_time_(creation_time),
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 QuicPacketEntropyHash QuicFramer::GetPacketEntropyHash( 315 QuicPacketEntropyHash QuicFramer::GetPacketEntropyHash(
316 const QuicPacketHeader& header) const { 316 const QuicPacketHeader& header) const {
317 return header.entropy_flag << (header.packet_sequence_number % 8); 317 return header.entropy_flag << (header.packet_sequence_number % 8);
318 } 318 }
319 319
320 SerializedPacket QuicFramer::BuildDataPacket( 320 SerializedPacket QuicFramer::BuildDataPacket(
321 const QuicPacketHeader& header, 321 const QuicPacketHeader& header,
322 const QuicFrames& frames, 322 const QuicFrames& frames,
323 size_t packet_size) { 323 size_t packet_size) {
324 QuicDataWriter writer(packet_size); 324 QuicDataWriter writer(packet_size);
325 const SerializedPacket kNoPacket( 325 const SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0,
326 0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL); 326 nullptr);
327 if (!AppendPacketHeader(header, &writer)) { 327 if (!AppendPacketHeader(header, &writer)) {
328 LOG(DFATAL) << "AppendPacketHeader failed"; 328 LOG(DFATAL) << "AppendPacketHeader failed";
329 return kNoPacket; 329 return kNoPacket;
330 } 330 }
331 331
332 for (size_t i = 0; i < frames.size(); ++i) { 332 for (size_t i = 0; i < frames.size(); ++i) {
333 const QuicFrame& frame = frames[i]; 333 const QuicFrame& frame = frames[i];
334 334
335 // Determine if we should write stream frame length in header. 335 // Determine if we should write stream frame length in header.
336 const bool no_stream_frame_length = 336 const bool no_stream_frame_length =
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 header.public_header.version_flag, 424 header.public_header.version_flag,
425 header.public_header.sequence_number_length); 425 header.public_header.sequence_number_length);
426 426
427 if (fec_builder_) { 427 if (fec_builder_) {
428 fec_builder_->OnBuiltFecProtectedPayload(header, 428 fec_builder_->OnBuiltFecProtectedPayload(header,
429 packet->FecProtectedData()); 429 packet->FecProtectedData());
430 } 430 }
431 431
432 return SerializedPacket(header.packet_sequence_number, 432 return SerializedPacket(header.packet_sequence_number,
433 header.public_header.sequence_number_length, packet, 433 header.public_header.sequence_number_length, packet,
434 GetPacketEntropyHash(header), NULL); 434 GetPacketEntropyHash(header), nullptr);
435 } 435 }
436 436
437 SerializedPacket QuicFramer::BuildFecPacket(const QuicPacketHeader& header, 437 SerializedPacket QuicFramer::BuildFecPacket(const QuicPacketHeader& header,
438 const QuicFecData& fec) { 438 const QuicFecData& fec) {
439 DCHECK_EQ(IN_FEC_GROUP, header.is_in_fec_group); 439 DCHECK_EQ(IN_FEC_GROUP, header.is_in_fec_group);
440 DCHECK_NE(0u, header.fec_group); 440 DCHECK_NE(0u, header.fec_group);
441 size_t len = GetPacketHeaderSize(header); 441 size_t len = GetPacketHeaderSize(header);
442 len += fec.redundancy.length(); 442 len += fec.redundancy.length();
443 443
444 QuicDataWriter writer(len); 444 QuicDataWriter writer(len);
445 const SerializedPacket kNoPacket( 445 const SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0,
446 0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL); 446 nullptr);
447 if (!AppendPacketHeader(header, &writer)) { 447 if (!AppendPacketHeader(header, &writer)) {
448 LOG(DFATAL) << "AppendPacketHeader failed"; 448 LOG(DFATAL) << "AppendPacketHeader failed";
449 return kNoPacket; 449 return kNoPacket;
450 } 450 }
451 451
452 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) { 452 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) {
453 LOG(DFATAL) << "Failed to add FEC"; 453 LOG(DFATAL) << "Failed to add FEC";
454 return kNoPacket; 454 return kNoPacket;
455 } 455 }
456 456
457 return SerializedPacket( 457 return SerializedPacket(
458 header.packet_sequence_number, 458 header.packet_sequence_number,
459 header.public_header.sequence_number_length, 459 header.public_header.sequence_number_length,
460 QuicPacket::NewFecPacket(writer.take(), len, true, 460 QuicPacket::NewFecPacket(writer.take(), len, true,
461 header.public_header.connection_id_length, 461 header.public_header.connection_id_length,
462 header.public_header.version_flag, 462 header.public_header.version_flag,
463 header.public_header.sequence_number_length), 463 header.public_header.sequence_number_length),
464 GetPacketEntropyHash(header), NULL); 464 GetPacketEntropyHash(header), nullptr);
465 } 465 }
466 466
467 // static 467 // static
468 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket( 468 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket(
469 const QuicPublicResetPacket& packet) { 469 const QuicPublicResetPacket& packet) {
470 DCHECK(packet.public_header.reset_flag); 470 DCHECK(packet.public_header.reset_flag);
471 471
472 CryptoHandshakeMessage reset; 472 CryptoHandshakeMessage reset;
473 reset.set_tag(kPRST); 473 reset.set_tag(kPRST);
474 reset.SetValue(kRNON, packet.nonce_proof); 474 reset.SetValue(kRNON, packet.nonce_proof);
475 reset.SetValue(kRSEQ, packet.rejected_sequence_number); 475 reset.SetValue(kRSEQ, packet.rejected_sequence_number);
476 if (!packet.client_address.address().empty()) { 476 if (!packet.client_address.address().empty()) {
477 // packet.client_address is non-empty. 477 // packet.client_address is non-empty.
478 QuicSocketAddressCoder address_coder(packet.client_address); 478 QuicSocketAddressCoder address_coder(packet.client_address);
479 string serialized_address = address_coder.Encode(); 479 string serialized_address = address_coder.Encode();
480 if (serialized_address.empty()) { 480 if (serialized_address.empty()) {
481 return NULL; 481 return nullptr;
482 } 482 }
483 reset.SetStringPiece(kCADR, serialized_address); 483 reset.SetStringPiece(kCADR, serialized_address);
484 } 484 }
485 const QuicData& reset_serialized = reset.GetSerialized(); 485 const QuicData& reset_serialized = reset.GetSerialized();
486 486
487 size_t len = 487 size_t len =
488 kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + reset_serialized.length(); 488 kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + reset_serialized.length();
489 QuicDataWriter writer(len); 489 QuicDataWriter writer(len);
490 490
491 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_RST | 491 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_RST |
492 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID); 492 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
493 if (!writer.WriteUInt8(flags)) { 493 if (!writer.WriteUInt8(flags)) {
494 return NULL; 494 return nullptr;
495 } 495 }
496 496
497 if (!writer.WriteUInt64(packet.public_header.connection_id)) { 497 if (!writer.WriteUInt64(packet.public_header.connection_id)) {
498 return NULL; 498 return nullptr;
499 } 499 }
500 500
501 if (!writer.WriteBytes(reset_serialized.data(), reset_serialized.length())) { 501 if (!writer.WriteBytes(reset_serialized.data(), reset_serialized.length())) {
502 return NULL; 502 return nullptr;
503 } 503 }
504 504
505 return new QuicEncryptedPacket(writer.take(), len, true); 505 return new QuicEncryptedPacket(writer.take(), len, true);
506 } 506 }
507 507
508 QuicEncryptedPacket* QuicFramer::BuildVersionNegotiationPacket( 508 QuicEncryptedPacket* QuicFramer::BuildVersionNegotiationPacket(
509 const QuicPacketPublicHeader& header, 509 const QuicPacketPublicHeader& header,
510 const QuicVersionVector& supported_versions) { 510 const QuicVersionVector& supported_versions) {
511 DCHECK(header.version_flag); 511 DCHECK(header.version_flag);
512 size_t len = GetVersionNegotiationPacketSize(supported_versions.size()); 512 size_t len = GetVersionNegotiationPacketSize(supported_versions.size());
513 QuicDataWriter writer(len); 513 QuicDataWriter writer(len);
514 514
515 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_VERSION | 515 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_VERSION |
516 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID); 516 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
517 if (!writer.WriteUInt8(flags)) { 517 if (!writer.WriteUInt8(flags)) {
518 return NULL; 518 return nullptr;
519 } 519 }
520 520
521 if (!writer.WriteUInt64(header.connection_id)) { 521 if (!writer.WriteUInt64(header.connection_id)) {
522 return NULL; 522 return nullptr;
523 } 523 }
524 524
525 for (size_t i = 0; i < supported_versions.size(); ++i) { 525 for (size_t i = 0; i < supported_versions.size(); ++i) {
526 if (!writer.WriteUInt32(QuicVersionToQuicTag(supported_versions[i]))) { 526 if (!writer.WriteUInt32(QuicVersionToQuicTag(supported_versions[i]))) {
527 return NULL; 527 return nullptr;
528 } 528 }
529 } 529 }
530 530
531 return new QuicEncryptedPacket(writer.take(), len, true); 531 return new QuicEncryptedPacket(writer.take(), len, true);
532 } 532 }
533 533
534 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { 534 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) {
535 DCHECK(!reader_.get()); 535 DCHECK(!reader_.get());
536 reader_.reset(new QuicDataReader(packet.data(), packet.length())); 536 reader_.reset(new QuicDataReader(packet.data(), packet.length()));
537 537
538 visitor_->OnPacket(); 538 visitor_->OnPacket();
539 539
540 // First parse the public header. 540 // First parse the public header.
541 QuicPacketPublicHeader public_header; 541 QuicPacketPublicHeader public_header;
542 if (!ProcessPublicHeader(&public_header)) { 542 if (!ProcessPublicHeader(&public_header)) {
543 DLOG(WARNING) << "Unable to process public header."; 543 DLOG(WARNING) << "Unable to process public header.";
544 DCHECK_NE("", detailed_error_); 544 DCHECK_NE("", detailed_error_);
545 return RaiseError(QUIC_INVALID_PACKET_HEADER); 545 return RaiseError(QUIC_INVALID_PACKET_HEADER);
546 } 546 }
547 547
548 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { 548 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) {
549 // The visitor suppresses further processing of the packet. 549 // The visitor suppresses further processing of the packet.
550 reader_.reset(NULL); 550 reader_.reset(nullptr);
551 return true; 551 return true;
552 } 552 }
553 553
554 if (is_server_ && public_header.version_flag && 554 if (is_server_ && public_header.version_flag &&
555 public_header.versions[0] != quic_version_) { 555 public_header.versions[0] != quic_version_) {
556 if (!visitor_->OnProtocolVersionMismatch(public_header.versions[0])) { 556 if (!visitor_->OnProtocolVersionMismatch(public_header.versions[0])) {
557 reader_.reset(NULL); 557 reader_.reset(nullptr);
558 return true; 558 return true;
559 } 559 }
560 } 560 }
561 561
562 bool rv; 562 bool rv;
563 if (!is_server_ && public_header.version_flag) { 563 if (!is_server_ && public_header.version_flag) {
564 rv = ProcessVersionNegotiationPacket(&public_header); 564 rv = ProcessVersionNegotiationPacket(&public_header);
565 } else if (public_header.reset_flag) { 565 } else if (public_header.reset_flag) {
566 rv = ProcessPublicResetPacket(public_header); 566 rv = ProcessPublicResetPacket(public_header);
567 } else { 567 } else {
568 rv = ProcessDataPacket(public_header, packet); 568 rv = ProcessDataPacket(public_header, packet);
569 } 569 }
570 570
571 reader_.reset(NULL); 571 reader_.reset(nullptr);
572 return rv; 572 return rv;
573 } 573 }
574 574
575 bool QuicFramer::ProcessVersionNegotiationPacket( 575 bool QuicFramer::ProcessVersionNegotiationPacket(
576 QuicPacketPublicHeader* public_header) { 576 QuicPacketPublicHeader* public_header) {
577 DCHECK(!is_server_); 577 DCHECK(!is_server_);
578 // Try reading at least once to raise error if the packet is invalid. 578 // Try reading at least once to raise error if the packet is invalid.
579 do { 579 do {
580 QuicTag version; 580 QuicTag version;
581 if (!reader_->ReadBytes(&version, kQuicVersionSize)) { 581 if (!reader_->ReadBytes(&version, kQuicVersionSize)) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 } 688 }
689 689
690 reader_.reset(new QuicDataReader(payload.data(), payload.length())); 690 reader_.reset(new QuicDataReader(payload.data(), payload.length()));
691 if (!ProcessFrameData(*header)) { 691 if (!ProcessFrameData(*header)) {
692 DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error. 692 DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error.
693 DLOG(WARNING) << "Unable to process frame data."; 693 DLOG(WARNING) << "Unable to process frame data.";
694 return false; 694 return false;
695 } 695 }
696 696
697 visitor_->OnPacketComplete(); 697 visitor_->OnPacketComplete();
698 reader_.reset(NULL); 698 reader_.reset(nullptr);
699 return true; 699 return true;
700 } 700 }
701 701
702 bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header, 702 bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header,
703 QuicDataWriter* writer) { 703 QuicDataWriter* writer) {
704 DVLOG(1) << "Appending header: " << header; 704 DVLOG(1) << "Appending header: " << header;
705 DCHECK(header.fec_group > 0 || header.is_in_fec_group == NOT_IN_FEC_GROUP); 705 DCHECK(header.fec_group > 0 || header.is_in_fec_group == NOT_IN_FEC_GROUP);
706 uint8 public_flags = 0; 706 uint8 public_flags = 0;
707 if (header.public_header.reset_flag) { 707 if (header.public_header.reset_flag) {
708 public_flags |= PACKET_PUBLIC_FLAGS_RST; 708 public_flags |= PACKET_PUBLIC_FLAGS_RST;
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 bool includes_version, 1632 bool includes_version,
1633 QuicSequenceNumberLength sequence_number_length) { 1633 QuicSequenceNumberLength sequence_number_length) {
1634 return StringPiece( 1634 return StringPiece(
1635 encrypted.data() + kStartOfHashData, GetStartOfEncryptedData( 1635 encrypted.data() + kStartOfHashData, GetStartOfEncryptedData(
1636 connection_id_length, includes_version, sequence_number_length) 1636 connection_id_length, includes_version, sequence_number_length)
1637 - kStartOfHashData); 1637 - kStartOfHashData);
1638 } 1638 }
1639 1639
1640 void QuicFramer::SetDecrypter(QuicDecrypter* decrypter, 1640 void QuicFramer::SetDecrypter(QuicDecrypter* decrypter,
1641 EncryptionLevel level) { 1641 EncryptionLevel level) {
1642 DCHECK(alternative_decrypter_.get() == NULL); 1642 DCHECK(alternative_decrypter_.get() == nullptr);
1643 DCHECK_GE(level, decrypter_level_); 1643 DCHECK_GE(level, decrypter_level_);
1644 decrypter_.reset(decrypter); 1644 decrypter_.reset(decrypter);
1645 decrypter_level_ = level; 1645 decrypter_level_ = level;
1646 } 1646 }
1647 1647
1648 void QuicFramer::SetAlternativeDecrypter(QuicDecrypter* decrypter, 1648 void QuicFramer::SetAlternativeDecrypter(QuicDecrypter* decrypter,
1649 EncryptionLevel level, 1649 EncryptionLevel level,
1650 bool latch_once_used) { 1650 bool latch_once_used) {
1651 alternative_decrypter_.reset(decrypter); 1651 alternative_decrypter_.reset(decrypter);
1652 alternative_decrypter_level_ = level; 1652 alternative_decrypter_level_ = level;
(...skipping 11 matching lines...) Expand all
1664 void QuicFramer::SetEncrypter(EncryptionLevel level, 1664 void QuicFramer::SetEncrypter(EncryptionLevel level,
1665 QuicEncrypter* encrypter) { 1665 QuicEncrypter* encrypter) {
1666 DCHECK_GE(level, 0); 1666 DCHECK_GE(level, 0);
1667 DCHECK_LT(level, NUM_ENCRYPTION_LEVELS); 1667 DCHECK_LT(level, NUM_ENCRYPTION_LEVELS);
1668 encrypter_[level].reset(encrypter); 1668 encrypter_[level].reset(encrypter);
1669 } 1669 }
1670 1670
1671 const QuicEncrypter* QuicFramer::encrypter(EncryptionLevel level) const { 1671 const QuicEncrypter* QuicFramer::encrypter(EncryptionLevel level) const {
1672 DCHECK_GE(level, 0); 1672 DCHECK_GE(level, 0);
1673 DCHECK_LT(level, NUM_ENCRYPTION_LEVELS); 1673 DCHECK_LT(level, NUM_ENCRYPTION_LEVELS);
1674 DCHECK(encrypter_[level].get() != NULL); 1674 DCHECK(encrypter_[level].get() != nullptr);
1675 return encrypter_[level].get(); 1675 return encrypter_[level].get();
1676 } 1676 }
1677 1677
1678 QuicEncryptedPacket* QuicFramer::EncryptPacket( 1678 QuicEncryptedPacket* QuicFramer::EncryptPacket(
1679 EncryptionLevel level, 1679 EncryptionLevel level,
1680 QuicPacketSequenceNumber packet_sequence_number, 1680 QuicPacketSequenceNumber packet_sequence_number,
1681 const QuicPacket& packet) { 1681 const QuicPacket& packet) {
1682 DCHECK(encrypter_[level].get() != NULL); 1682 DCHECK(encrypter_[level].get() != nullptr);
1683 1683
1684 scoped_ptr<QuicData> out(encrypter_[level]->EncryptPacket( 1684 scoped_ptr<QuicData> out(encrypter_[level]->EncryptPacket(
1685 packet_sequence_number, packet.AssociatedData(), packet.Plaintext())); 1685 packet_sequence_number, packet.AssociatedData(), packet.Plaintext()));
1686 if (out.get() == NULL) { 1686 if (out.get() == nullptr) {
1687 RaiseError(QUIC_ENCRYPTION_FAILURE); 1687 RaiseError(QUIC_ENCRYPTION_FAILURE);
1688 return NULL; 1688 return nullptr;
1689 } 1689 }
1690 StringPiece header_data = packet.BeforePlaintext(); 1690 StringPiece header_data = packet.BeforePlaintext();
1691 size_t len = header_data.length() + out->length(); 1691 size_t len = header_data.length() + out->length();
1692 char* buffer = new char[len]; 1692 char* buffer = new char[len];
1693 // TODO(rch): eliminate this buffer copy by passing in a buffer to Encrypt(). 1693 // TODO(rch): eliminate this buffer copy by passing in a buffer to Encrypt().
1694 memcpy(buffer, header_data.data(), header_data.length()); 1694 memcpy(buffer, header_data.data(), header_data.length());
1695 memcpy(buffer + header_data.length(), out->data(), out->length()); 1695 memcpy(buffer + header_data.length(), out->data(), out->length());
1696 return new QuicEncryptedPacket(buffer, len, true); 1696 return new QuicEncryptedPacket(buffer, len, true);
1697 } 1697 }
1698 1698
1699 size_t QuicFramer::GetMaxPlaintextSize(size_t ciphertext_size) { 1699 size_t QuicFramer::GetMaxPlaintextSize(size_t ciphertext_size) {
1700 // In order to keep the code simple, we don't have the current encryption 1700 // In order to keep the code simple, we don't have the current encryption
1701 // level to hand. Both the NullEncrypter and AES-GCM have a tag length of 12. 1701 // level to hand. Both the NullEncrypter and AES-GCM have a tag length of 12.
1702 size_t min_plaintext_size = ciphertext_size; 1702 size_t min_plaintext_size = ciphertext_size;
1703 1703
1704 for (int i = ENCRYPTION_NONE; i < NUM_ENCRYPTION_LEVELS; i++) { 1704 for (int i = ENCRYPTION_NONE; i < NUM_ENCRYPTION_LEVELS; i++) {
1705 if (encrypter_[i].get() != NULL) { 1705 if (encrypter_[i].get() != nullptr) {
1706 size_t size = encrypter_[i]->GetMaxPlaintextSize(ciphertext_size); 1706 size_t size = encrypter_[i]->GetMaxPlaintextSize(ciphertext_size);
1707 if (size < min_plaintext_size) { 1707 if (size < min_plaintext_size) {
1708 min_plaintext_size = size; 1708 min_plaintext_size = size;
1709 } 1709 }
1710 } 1710 }
1711 } 1711 }
1712 1712
1713 return min_plaintext_size; 1713 return min_plaintext_size;
1714 } 1714 }
1715 1715
1716 bool QuicFramer::DecryptPayload(const QuicPacketHeader& header, 1716 bool QuicFramer::DecryptPayload(const QuicPacketHeader& header,
1717 const QuicEncryptedPacket& packet) { 1717 const QuicEncryptedPacket& packet) {
1718 StringPiece encrypted; 1718 StringPiece encrypted;
1719 if (!reader_->ReadStringPiece(&encrypted, reader_->BytesRemaining())) { 1719 if (!reader_->ReadStringPiece(&encrypted, reader_->BytesRemaining())) {
1720 return false; 1720 return false;
1721 } 1721 }
1722 DCHECK(decrypter_.get() != NULL); 1722 DCHECK(decrypter_.get() != nullptr);
1723 decrypted_.reset(decrypter_->DecryptPacket( 1723 decrypted_.reset(decrypter_->DecryptPacket(
1724 header.packet_sequence_number, 1724 header.packet_sequence_number,
1725 GetAssociatedDataFromEncryptedPacket( 1725 GetAssociatedDataFromEncryptedPacket(
1726 packet, 1726 packet,
1727 header.public_header.connection_id_length, 1727 header.public_header.connection_id_length,
1728 header.public_header.version_flag, 1728 header.public_header.version_flag,
1729 header.public_header.sequence_number_length), 1729 header.public_header.sequence_number_length),
1730 encrypted)); 1730 encrypted));
1731 if (decrypted_.get() != NULL) { 1731 if (decrypted_.get() != nullptr) {
1732 visitor_->OnDecryptedPacket(decrypter_level_); 1732 visitor_->OnDecryptedPacket(decrypter_level_);
1733 } else if (alternative_decrypter_.get() != NULL) { 1733 } else if (alternative_decrypter_.get() != nullptr) {
1734 decrypted_.reset(alternative_decrypter_->DecryptPacket( 1734 decrypted_.reset(alternative_decrypter_->DecryptPacket(
1735 header.packet_sequence_number, 1735 header.packet_sequence_number,
1736 GetAssociatedDataFromEncryptedPacket( 1736 GetAssociatedDataFromEncryptedPacket(
1737 packet, 1737 packet,
1738 header.public_header.connection_id_length, 1738 header.public_header.connection_id_length,
1739 header.public_header.version_flag, 1739 header.public_header.version_flag,
1740 header.public_header.sequence_number_length), 1740 header.public_header.sequence_number_length),
1741 encrypted)); 1741 encrypted));
1742 if (decrypted_.get() != NULL) { 1742 if (decrypted_.get() != nullptr) {
1743 visitor_->OnDecryptedPacket(alternative_decrypter_level_); 1743 visitor_->OnDecryptedPacket(alternative_decrypter_level_);
1744 if (alternative_decrypter_latch_) { 1744 if (alternative_decrypter_latch_) {
1745 // Switch to the alternative decrypter and latch so that we cannot 1745 // Switch to the alternative decrypter and latch so that we cannot
1746 // switch back. 1746 // switch back.
1747 decrypter_.reset(alternative_decrypter_.release()); 1747 decrypter_.reset(alternative_decrypter_.release());
1748 decrypter_level_ = alternative_decrypter_level_; 1748 decrypter_level_ = alternative_decrypter_level_;
1749 alternative_decrypter_level_ = ENCRYPTION_NONE; 1749 alternative_decrypter_level_ = ENCRYPTION_NONE;
1750 } else { 1750 } else {
1751 // Switch the alternative decrypter so that we use it first next time. 1751 // Switch the alternative decrypter so that we use it first next time.
1752 decrypter_.swap(alternative_decrypter_); 1752 decrypter_.swap(alternative_decrypter_);
1753 EncryptionLevel level = alternative_decrypter_level_; 1753 EncryptionLevel level = alternative_decrypter_level_;
1754 alternative_decrypter_level_ = decrypter_level_; 1754 alternative_decrypter_level_ = decrypter_level_;
1755 decrypter_level_ = level; 1755 decrypter_level_ = level;
1756 } 1756 }
1757 } 1757 }
1758 } 1758 }
1759 1759
1760 if (decrypted_.get() == NULL) { 1760 if (decrypted_.get() == nullptr) {
1761 DLOG(WARNING) << "DecryptPacket failed for sequence_number:" 1761 DLOG(WARNING) << "DecryptPacket failed for sequence_number:"
1762 << header.packet_sequence_number; 1762 << header.packet_sequence_number;
1763 return false; 1763 return false;
1764 } 1764 }
1765 1765
1766 reader_.reset(new QuicDataReader(decrypted_->data(), decrypted_->length())); 1766 reader_.reset(new QuicDataReader(decrypted_->data(), decrypted_->length()));
1767 return true; 1767 return true;
1768 } 1768 }
1769 1769
1770 size_t QuicFramer::GetAckFrameSize( 1770 size_t QuicFramer::GetAckFrameSize(
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1867 DCHECK(false); 1867 DCHECK(false);
1868 return 0; 1868 return 0;
1869 } 1869 }
1870 1870
1871 bool QuicFramer::AppendTypeByte(const QuicFrame& frame, 1871 bool QuicFramer::AppendTypeByte(const QuicFrame& frame,
1872 bool no_stream_frame_length, 1872 bool no_stream_frame_length,
1873 QuicDataWriter* writer) { 1873 QuicDataWriter* writer) {
1874 uint8 type_byte = 0; 1874 uint8 type_byte = 0;
1875 switch (frame.type) { 1875 switch (frame.type) {
1876 case STREAM_FRAME: { 1876 case STREAM_FRAME: {
1877 if (frame.stream_frame == NULL) { 1877 if (frame.stream_frame == nullptr) {
1878 LOG(DFATAL) << "Failed to append STREAM frame with no stream_frame."; 1878 LOG(DFATAL) << "Failed to append STREAM frame with no stream_frame.";
1879 } 1879 }
1880 // Fin bit. 1880 // Fin bit.
1881 type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0; 1881 type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0;
1882 1882
1883 // Data Length bit. 1883 // Data Length bit.
1884 type_byte <<= kQuicStreamDataLengthShift; 1884 type_byte <<= kQuicStreamDataLengthShift;
1885 type_byte |= no_stream_frame_length ? 0: kQuicStreamDataLengthMask; 1885 type_byte |= no_stream_frame_length ? 0: kQuicStreamDataLengthMask;
1886 1886
1887 // Offset 3 bits. 1887 // Offset 3 bits.
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
2311 if (!writer->WriteUInt32(stream_id)) { 2311 if (!writer->WriteUInt32(stream_id)) {
2312 return false; 2312 return false;
2313 } 2313 }
2314 return true; 2314 return true;
2315 } 2315 }
2316 2316
2317 bool QuicFramer::RaiseError(QuicErrorCode error) { 2317 bool QuicFramer::RaiseError(QuicErrorCode error) {
2318 DVLOG(1) << "Error detail: " << detailed_error_; 2318 DVLOG(1) << "Error detail: " << detailed_error_;
2319 set_error(error); 2319 set_error(error);
2320 visitor_->OnError(this); 2320 visitor_->OnError(this);
2321 reader_.reset(NULL); 2321 reader_.reset(nullptr);
2322 return false; 2322 return false;
2323 } 2323 }
2324 2324
2325 } // namespace net 2325 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698