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 #include "base/stl_util.h" | 6 #include "base/stl_util.h" |
7 | 7 |
8 using base::StringPiece; | 8 using base::StringPiece; |
9 using std::map; | 9 using std::map; |
10 using std::numeric_limits; | 10 using std::numeric_limits; |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 size_t GetStartOfFecProtectedData(bool include_version) { | 27 size_t GetStartOfFecProtectedData(bool include_version) { |
28 return GetPacketHeaderSize(include_version); | 28 return GetPacketHeaderSize(include_version); |
29 } | 29 } |
30 | 30 |
31 size_t GetStartOfEncryptedData(bool include_version) { | 31 size_t GetStartOfEncryptedData(bool include_version) { |
32 return GetPacketHeaderSize(include_version) - kPrivateFlagsSize - | 32 return GetPacketHeaderSize(include_version) - kPrivateFlagsSize - |
33 kFecGroupSize; | 33 kFecGroupSize; |
34 } | 34 } |
35 | 35 |
| 36 QuicPacketPublicHeader::QuicPacketPublicHeader() {} |
| 37 |
| 38 QuicPacketPublicHeader::QuicPacketPublicHeader( |
| 39 const QuicPacketPublicHeader& other) |
| 40 : guid(other.guid), |
| 41 reset_flag(other.reset_flag), |
| 42 version_flag(other.version_flag), |
| 43 versions(other.versions) { |
| 44 } |
| 45 |
| 46 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
| 47 |
| 48 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=( |
| 49 const QuicPacketPublicHeader& other) { |
| 50 guid = other.guid; |
| 51 reset_flag = other.reset_flag; |
| 52 version_flag = other.version_flag; |
| 53 // Window's STL crashes when empty std::vectors are copied. |
| 54 if (other.versions.size() > 0) |
| 55 versions = other.versions; |
| 56 return *this; |
| 57 } |
| 58 |
36 QuicStreamFrame::QuicStreamFrame() {} | 59 QuicStreamFrame::QuicStreamFrame() {} |
37 | 60 |
38 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, | 61 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
39 bool fin, | 62 bool fin, |
40 QuicStreamOffset offset, | 63 QuicStreamOffset offset, |
41 StringPiece data) | 64 StringPiece data) |
42 : stream_id(stream_id), | 65 : stream_id(stream_id), |
43 fin(fin), | 66 fin(fin), |
44 offset(offset), | 67 offset(offset), |
45 data(data) { | 68 data(data) { |
46 } | 69 } |
47 | 70 |
48 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { | 71 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { |
49 os << "{ guid: " << header.public_header.guid | 72 os << "{ guid: " << header.public_header.guid |
50 << ", reset_flag: " << header.public_header.reset_flag | 73 << ", reset_flag: " << header.public_header.reset_flag |
51 << ", version_flag: " << header.public_header.version_flag | 74 << ", version_flag: " << header.public_header.version_flag; |
52 << ", fec_flag: " << header.fec_flag | 75 if (header.public_header.version_flag) { |
| 76 os << " version: "; |
| 77 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
| 78 os << header.public_header.versions[0] << " "; |
| 79 } |
| 80 } |
| 81 os << ", fec_flag: " << header.fec_flag |
53 << ", entropy_flag: " << header.entropy_flag | 82 << ", entropy_flag: " << header.entropy_flag |
54 << ", entropy hash: " << static_cast<int>(header.entropy_hash) | 83 << ", entropy hash: " << static_cast<int>(header.entropy_hash) |
55 << ", sequence_number: " << header.packet_sequence_number | 84 << ", sequence_number: " << header.packet_sequence_number |
56 << ", fec_group: " << header.fec_group<< "}\n"; | 85 << ", fec_group: " << header.fec_group<< "}\n"; |
57 return os; | 86 return os; |
58 } | 87 } |
59 | 88 |
60 // TODO(ianswett): Initializing largest_observed to 0 should not be necessary. | 89 // TODO(ianswett): Initializing largest_observed to 0 should not be necessary. |
61 ReceivedPacketInfo::ReceivedPacketInfo() | 90 ReceivedPacketInfo::ReceivedPacketInfo() |
62 : largest_observed(0) { | 91 : largest_observed(0), |
| 92 delta_time_largest_observed(QuicTime::Delta::Infinite()) { |
63 } | 93 } |
64 | 94 |
65 ReceivedPacketInfo::~ReceivedPacketInfo() {} | 95 ReceivedPacketInfo::~ReceivedPacketInfo() {} |
66 | 96 |
67 bool IsAwaitingPacket(const ReceivedPacketInfo& received_info, | 97 bool IsAwaitingPacket(const ReceivedPacketInfo& received_info, |
68 QuicPacketSequenceNumber sequence_number) { | 98 QuicPacketSequenceNumber sequence_number) { |
69 return sequence_number > received_info.largest_observed || | 99 return sequence_number > received_info.largest_observed || |
70 ContainsKey(received_info.missing_packets, sequence_number); | 100 ContainsKey(received_info.missing_packets, sequence_number); |
71 } | 101 } |
72 | 102 |
73 void InsertMissingPacketsBetween(ReceivedPacketInfo* received_info, | 103 void InsertMissingPacketsBetween(ReceivedPacketInfo* received_info, |
74 QuicPacketSequenceNumber lower, | 104 QuicPacketSequenceNumber lower, |
75 QuicPacketSequenceNumber higher) { | 105 QuicPacketSequenceNumber higher) { |
76 for (QuicPacketSequenceNumber i = lower; i < higher; ++i) { | 106 for (QuicPacketSequenceNumber i = lower; i < higher; ++i) { |
77 received_info->missing_packets.insert(i); | 107 received_info->missing_packets.insert(i); |
78 } | 108 } |
79 } | 109 } |
80 | 110 |
81 SentPacketInfo::SentPacketInfo() {} | 111 SentPacketInfo::SentPacketInfo() {} |
82 | 112 |
83 SentPacketInfo::~SentPacketInfo() {} | 113 SentPacketInfo::~SentPacketInfo() {} |
84 | 114 |
85 // Testing convenience method. | 115 // Testing convenience method. |
86 QuicAckFrame::QuicAckFrame(QuicPacketSequenceNumber largest_observed, | 116 QuicAckFrame::QuicAckFrame(QuicPacketSequenceNumber largest_observed, |
| 117 QuicTime largest_observed_receive_time, |
87 QuicPacketSequenceNumber least_unacked) { | 118 QuicPacketSequenceNumber least_unacked) { |
88 received_info.largest_observed = largest_observed; | 119 received_info.largest_observed = largest_observed; |
89 received_info.entropy_hash = 0; | 120 received_info.entropy_hash = 0; |
90 sent_info.least_unacked = least_unacked; | 121 sent_info.least_unacked = least_unacked; |
91 sent_info.entropy_hash = 0; | 122 sent_info.entropy_hash = 0; |
92 } | 123 } |
93 | 124 |
94 ostream& operator<<(ostream& os, const SentPacketInfo& sent_info) { | 125 ostream& operator<<(ostream& os, const SentPacketInfo& sent_info) { |
95 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash) | 126 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash) |
96 << " least_unacked: " << sent_info.least_unacked; | 127 << " least_unacked: " << sent_info.least_unacked; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 return os; | 303 return os; |
273 } | 304 } |
274 | 305 |
275 ostream& operator<<(ostream& os, const QuicConsumedData& s) { | 306 ostream& operator<<(ostream& os, const QuicConsumedData& s) { |
276 os << "bytes_consumed: " << s.bytes_consumed | 307 os << "bytes_consumed: " << s.bytes_consumed |
277 << " fin_consumed: " << s.fin_consumed; | 308 << " fin_consumed: " << s.fin_consumed; |
278 return os; | 309 return os; |
279 } | 310 } |
280 | 311 |
281 } // namespace net | 312 } // namespace net |
OLD | NEW |