| Index: net/quic/quic_protocol.cc
|
| diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
|
| index 878ffee329138f2ae25f5988dbc0c3db3e353640..629644629e8a5599f936a98d5fa851b4a987b243 100644
|
| --- a/net/quic/quic_protocol.cc
|
| +++ b/net/quic/quic_protocol.cc
|
| @@ -3,8 +3,10 @@
|
| // found in the LICENSE file.
|
|
|
| #include "net/quic/quic_protocol.h"
|
| +#include "base/stl_util.h"
|
|
|
| using base::StringPiece;
|
| +using std::map;
|
| using std::ostream;
|
|
|
| namespace net {
|
| @@ -21,30 +23,87 @@ QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
|
| data(data) {
|
| }
|
|
|
| -ReceivedPacketInfo::ReceivedPacketInfo() {}
|
| +// TODO(ianswett): Initializing largest_received to 0 should not be necessary.
|
| +ReceivedPacketInfo::ReceivedPacketInfo() : largest_received(0) {}
|
|
|
| ReceivedPacketInfo::~ReceivedPacketInfo() {}
|
|
|
| +void ReceivedPacketInfo::RecordAck(QuicPacketSequenceNumber sequence_number,
|
| + QuicTime time) {
|
| + DCHECK(!ContainsAck(sequence_number));
|
| + received_packet_times[sequence_number] = time;
|
| + if (largest_received < sequence_number) {
|
| + largest_received = sequence_number;
|
| + }
|
| +}
|
| +
|
| +bool ReceivedPacketInfo::ContainsAck(
|
| + QuicPacketSequenceNumber sequence_number) const {
|
| + return ContainsKey(received_packet_times, sequence_number);
|
| +}
|
| +
|
| +void ReceivedPacketInfo::ClearAcksBefore(
|
| + QuicPacketSequenceNumber least_unacked) {
|
| + for (QuicPacketSequenceNumber i = received_packet_times.begin()->first;
|
| + i < least_unacked; ++i) {
|
| + received_packet_times.erase(i);
|
| + }
|
| +}
|
| +
|
| SentPacketInfo::SentPacketInfo() {}
|
|
|
| SentPacketInfo::~SentPacketInfo() {}
|
|
|
| +QuicAckFrame::QuicAckFrame(QuicPacketSequenceNumber largest_received,
|
| + QuicTime time_received,
|
| + QuicPacketSequenceNumber least_unacked) {
|
| + received_info.largest_received = largest_received;
|
| + for (QuicPacketSequenceNumber seq_num = 1;
|
| + seq_num <= largest_received; ++seq_num) {
|
| + received_info.RecordAck(seq_num, time_received);
|
| + }
|
| + sent_info.least_unacked = least_unacked;
|
| + congestion_info.type = kNone;
|
| +}
|
| +
|
| ostream& operator<<(ostream& os, const QuicAckFrame& s) {
|
| - os << "largest_received: " << s.received_info.largest_received
|
| - << " time: " << s.received_info.time_received.ToMicroseconds()
|
| - << " missing: ";
|
| - for (SequenceSet::const_iterator it = s.received_info.missing_packets.begin();
|
| - it != s.received_info.missing_packets.end(); ++it) {
|
| - os << *it << " ";
|
| + os << "sent info { least_waiting: " << s.sent_info.least_unacked << " } "
|
| + << "received info { largest_received: "
|
| + << s.received_info.largest_received
|
| + << " received packets: [ ";
|
| + for (map<QuicPacketSequenceNumber, QuicTime>::const_iterator it =
|
| + s.received_info.received_packet_times.begin();
|
| + it != s.received_info.received_packet_times.end(); ++it) {
|
| + os << it->first << "@" << it->second.ToMilliseconds() << " ";
|
| }
|
|
|
| - os << " least_waiting: " << s.sent_info.least_unacked
|
| - << " no_retransmit: ";
|
| - for (SequenceSet::const_iterator it = s.sent_info.non_retransmiting.begin();
|
| - it != s.sent_info.non_retransmiting.end(); ++it) {
|
| - os << *it << " ";
|
| + os << "] } congestion info { type: " << s.congestion_info.type;
|
| + switch (s.congestion_info.type) {
|
| + case kNone:
|
| + break;
|
| + case kInterArrival: {
|
| + const CongestionFeedbackMessageInterArrival& inter_arrival =
|
| + s.congestion_info.inter_arrival;
|
| + os << " accumulated_number_of_lost_packets: "
|
| + << inter_arrival.accumulated_number_of_lost_packets;
|
| + os << " offset_time: " << inter_arrival.offset_time;
|
| + os << " delta_time: " << inter_arrival.delta_time;
|
| + break;
|
| + }
|
| + case kFixRate: {
|
| + os << " bitrate_in_bytes_per_second: "
|
| + << s.congestion_info.fix_rate.bitrate_in_bytes_per_second;
|
| + break;
|
| + }
|
| + case kTCP: {
|
| + const CongestionFeedbackMessageTCP& tcp = s.congestion_info.tcp;
|
| + os << " accumulated_number_of_lost_packets: "
|
| + << tcp.accumulated_number_of_lost_packets;
|
| + os << " receive_window: " << tcp.receive_window;
|
| + break;
|
| + }
|
| }
|
| - os << "\n";
|
| + os << " }\n";
|
| return os;
|
| }
|
|
|
|
|