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_protocol.h" | 5 #include "net/quic/quic_protocol.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/quic_utils.h" | 8 #include "net/quic/quic_utils.h" |
9 | 9 |
10 using base::StringPiece; | 10 using base::StringPiece; |
11 using std::map; | 11 using std::map; |
12 using std::numeric_limits; | 12 using std::numeric_limits; |
13 using std::ostream; | 13 using std::ostream; |
14 using std::string; | 14 using std::string; |
15 | 15 |
16 namespace net { | 16 namespace net { |
17 | 17 |
18 size_t GetPacketHeaderSize(const QuicPacketHeader& header) { | 18 size_t GetPacketHeaderSize(const QuicPacketHeader& header) { |
19 return GetPacketHeaderSize(header.public_header.guid_length, | 19 return GetPacketHeaderSize(header.public_header.connection_id_length, |
20 header.public_header.version_flag, | 20 header.public_header.version_flag, |
21 header.public_header.sequence_number_length, | 21 header.public_header.sequence_number_length, |
22 header.is_in_fec_group); | 22 header.is_in_fec_group); |
23 } | 23 } |
24 | 24 |
25 size_t GetPacketHeaderSize(QuicGuidLength guid_length, | 25 size_t GetPacketHeaderSize(QuicConnectionIdLength connection_id_length, |
26 bool include_version, | 26 bool include_version, |
27 QuicSequenceNumberLength sequence_number_length, | 27 QuicSequenceNumberLength sequence_number_length, |
28 InFecGroup is_in_fec_group) { | 28 InFecGroup is_in_fec_group) { |
29 return kPublicFlagsSize + guid_length + | 29 return kPublicFlagsSize + connection_id_length + |
30 (include_version ? kQuicVersionSize : 0) + sequence_number_length + | 30 (include_version ? kQuicVersionSize : 0) + sequence_number_length + |
31 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); | 31 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); |
32 } | 32 } |
33 | 33 |
34 size_t GetStartOfFecProtectedData( | 34 size_t GetStartOfFecProtectedData( |
35 QuicGuidLength guid_length, | 35 QuicConnectionIdLength connection_id_length, |
36 bool include_version, | 36 bool include_version, |
37 QuicSequenceNumberLength sequence_number_length) { | 37 QuicSequenceNumberLength sequence_number_length) { |
38 return GetPacketHeaderSize( | 38 return GetPacketHeaderSize(connection_id_length, |
39 guid_length, include_version, sequence_number_length, IN_FEC_GROUP); | 39 include_version, |
| 40 sequence_number_length, |
| 41 IN_FEC_GROUP); |
40 } | 42 } |
41 | 43 |
42 size_t GetStartOfEncryptedData( | 44 size_t GetStartOfEncryptedData( |
43 QuicGuidLength guid_length, | 45 QuicConnectionIdLength connection_id_length, |
44 bool include_version, | 46 bool include_version, |
45 QuicSequenceNumberLength sequence_number_length) { | 47 QuicSequenceNumberLength sequence_number_length) { |
46 // Don't include the fec size, since encryption starts before private flags. | 48 // Don't include the fec size, since encryption starts before private flags. |
47 return GetPacketHeaderSize( | 49 return GetPacketHeaderSize(connection_id_length, |
48 guid_length, include_version, sequence_number_length, NOT_IN_FEC_GROUP) - | 50 include_version, |
49 kPrivateFlagsSize; | 51 sequence_number_length, |
| 52 NOT_IN_FEC_GROUP) - kPrivateFlagsSize; |
50 } | 53 } |
51 | 54 |
52 QuicPacketPublicHeader::QuicPacketPublicHeader() | 55 QuicPacketPublicHeader::QuicPacketPublicHeader() |
53 : guid(0), | 56 : connection_id(0), |
54 guid_length(PACKET_8BYTE_GUID), | 57 connection_id_length(PACKET_8BYTE_CONNECTION_ID), |
55 reset_flag(false), | 58 reset_flag(false), |
56 version_flag(false), | 59 version_flag(false), |
57 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { | 60 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { |
58 } | 61 } |
59 | 62 |
60 QuicPacketPublicHeader::QuicPacketPublicHeader( | 63 QuicPacketPublicHeader::QuicPacketPublicHeader( |
61 const QuicPacketPublicHeader& other) | 64 const QuicPacketPublicHeader& other) |
62 : guid(other.guid), | 65 : connection_id(other.connection_id), |
63 guid_length(other.guid_length), | 66 connection_id_length(other.connection_id_length), |
64 reset_flag(other.reset_flag), | 67 reset_flag(other.reset_flag), |
65 version_flag(other.version_flag), | 68 version_flag(other.version_flag), |
66 sequence_number_length(other.sequence_number_length), | 69 sequence_number_length(other.sequence_number_length), |
67 versions(other.versions) { | 70 versions(other.versions) { |
68 } | 71 } |
69 | 72 |
70 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} | 73 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
71 | 74 |
72 QuicPacketHeader::QuicPacketHeader() | 75 QuicPacketHeader::QuicPacketHeader() |
73 : fec_flag(false), | 76 : fec_flag(false), |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 for (size_t i = 0; i < versions.size(); ++i) { | 205 for (size_t i = 0; i < versions.size(); ++i) { |
203 if (i != 0) { | 206 if (i != 0) { |
204 result.append(","); | 207 result.append(","); |
205 } | 208 } |
206 result.append(QuicVersionToString(versions[i])); | 209 result.append(QuicVersionToString(versions[i])); |
207 } | 210 } |
208 return result; | 211 return result; |
209 } | 212 } |
210 | 213 |
211 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { | 214 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { |
212 os << "{ guid: " << header.public_header.guid | 215 os << "{ connection_id: " << header.public_header.connection_id |
213 << ", guid_length:" << header.public_header.guid_length | 216 << ", connection_id_length:" << header.public_header.connection_id_length |
214 << ", sequence_number_length:" | 217 << ", sequence_number_length:" |
215 << header.public_header.sequence_number_length | 218 << header.public_header.sequence_number_length |
216 << ", reset_flag: " << header.public_header.reset_flag | 219 << ", reset_flag: " << header.public_header.reset_flag |
217 << ", version_flag: " << header.public_header.version_flag; | 220 << ", version_flag: " << header.public_header.version_flag; |
218 if (header.public_header.version_flag) { | 221 if (header.public_header.version_flag) { |
219 os << " version: "; | 222 os << " version: "; |
220 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { | 223 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
221 os << header.public_header.versions[0] << " "; | 224 os << header.public_header.versions[0] << " "; |
222 } | 225 } |
223 } | 226 } |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 QuicStreamOffset byte_offset) | 559 QuicStreamOffset byte_offset) |
557 : stream_id(stream_id), | 560 : stream_id(stream_id), |
558 byte_offset(byte_offset) {} | 561 byte_offset(byte_offset) {} |
559 | 562 |
560 QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id) | 563 QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id) |
561 : stream_id(stream_id) {} | 564 : stream_id(stream_id) {} |
562 | 565 |
563 QuicPacket::QuicPacket(char* buffer, | 566 QuicPacket::QuicPacket(char* buffer, |
564 size_t length, | 567 size_t length, |
565 bool owns_buffer, | 568 bool owns_buffer, |
566 QuicGuidLength guid_length, | 569 QuicConnectionIdLength connection_id_length, |
567 bool includes_version, | 570 bool includes_version, |
568 QuicSequenceNumberLength sequence_number_length, | 571 QuicSequenceNumberLength sequence_number_length, |
569 bool is_fec_packet) | 572 bool is_fec_packet) |
570 : QuicData(buffer, length, owns_buffer), | 573 : QuicData(buffer, length, owns_buffer), |
571 buffer_(buffer), | 574 buffer_(buffer), |
572 is_fec_packet_(is_fec_packet), | 575 is_fec_packet_(is_fec_packet), |
573 guid_length_(guid_length), | 576 connection_id_length_(connection_id_length), |
574 includes_version_(includes_version), | 577 includes_version_(includes_version), |
575 sequence_number_length_(sequence_number_length) { | 578 sequence_number_length_(sequence_number_length) { |
576 } | 579 } |
577 | 580 |
578 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, | 581 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, |
579 size_t length) | 582 size_t length) |
580 : QuicData(buffer, length) { | 583 : QuicData(buffer, length) { |
581 } | 584 } |
582 | 585 |
583 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, | 586 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, |
584 size_t length, | 587 size_t length, |
585 bool owns_buffer) | 588 bool owns_buffer) |
586 : QuicData(buffer, length, owns_buffer) { | 589 : QuicData(buffer, length, owns_buffer) { |
587 } | 590 } |
588 | 591 |
589 StringPiece QuicPacket::FecProtectedData() const { | 592 StringPiece QuicPacket::FecProtectedData() const { |
590 const size_t start_of_fec = GetStartOfFecProtectedData( | 593 const size_t start_of_fec = GetStartOfFecProtectedData( |
591 guid_length_, includes_version_, sequence_number_length_); | 594 connection_id_length_, includes_version_, sequence_number_length_); |
592 return StringPiece(data() + start_of_fec, length() - start_of_fec); | 595 return StringPiece(data() + start_of_fec, length() - start_of_fec); |
593 } | 596 } |
594 | 597 |
595 StringPiece QuicPacket::AssociatedData() const { | 598 StringPiece QuicPacket::AssociatedData() const { |
596 return StringPiece( | 599 return StringPiece( |
597 data() + kStartOfHashData, | 600 data() + kStartOfHashData, |
598 GetStartOfEncryptedData( | 601 GetStartOfEncryptedData( |
599 guid_length_, includes_version_, sequence_number_length_) - | 602 connection_id_length_, includes_version_, sequence_number_length_) - |
600 kStartOfHashData); | 603 kStartOfHashData); |
601 } | 604 } |
602 | 605 |
603 StringPiece QuicPacket::BeforePlaintext() const { | 606 StringPiece QuicPacket::BeforePlaintext() const { |
604 return StringPiece(data(), GetStartOfEncryptedData(guid_length_, | 607 return StringPiece(data(), GetStartOfEncryptedData(connection_id_length_, |
605 includes_version_, | 608 includes_version_, |
606 sequence_number_length_)); | 609 sequence_number_length_)); |
607 } | 610 } |
608 | 611 |
609 StringPiece QuicPacket::Plaintext() const { | 612 StringPiece QuicPacket::Plaintext() const { |
610 const size_t start_of_encrypted_data = | 613 const size_t start_of_encrypted_data = |
611 GetStartOfEncryptedData( | 614 GetStartOfEncryptedData( |
612 guid_length_, includes_version_, sequence_number_length_); | 615 connection_id_length_, includes_version_, sequence_number_length_); |
613 return StringPiece(data() + start_of_encrypted_data, | 616 return StringPiece(data() + start_of_encrypted_data, |
614 length() - start_of_encrypted_data); | 617 length() - start_of_encrypted_data); |
615 } | 618 } |
616 | 619 |
617 RetransmittableFrames::RetransmittableFrames() | 620 RetransmittableFrames::RetransmittableFrames() |
618 : encryption_level_(NUM_ENCRYPTION_LEVELS) { | 621 : encryption_level_(NUM_ENCRYPTION_LEVELS) { |
619 } | 622 } |
620 | 623 |
621 RetransmittableFrames::~RetransmittableFrames() { | 624 RetransmittableFrames::~RetransmittableFrames() { |
622 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { | 625 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 return os; | 732 return os; |
730 } | 733 } |
731 | 734 |
732 WriteResult::WriteResult(WriteStatus status, | 735 WriteResult::WriteResult(WriteStatus status, |
733 int bytes_written_or_error_code) | 736 int bytes_written_or_error_code) |
734 : status(status), | 737 : status(status), |
735 bytes_written(bytes_written_or_error_code) { | 738 bytes_written(bytes_written_or_error_code) { |
736 } | 739 } |
737 | 740 |
738 } // namespace net | 741 } // namespace net |
OLD | NEW |