| Index: net/quic/test_tools/quic_test_packet_maker.cc
|
| diff --git a/net/quic/test_tools/quic_test_packet_maker.cc b/net/quic/test_tools/quic_test_packet_maker.cc
|
| index 91d1a6059b8a26be66a27bf7c4aa748de2131d73..2b9993b6413193674f38b4fdb9cd2b63d391bec0 100644
|
| --- a/net/quic/test_tools/quic_test_packet_maker.cc
|
| +++ b/net/quic/test_tools/quic_test_packet_maker.cc
|
| @@ -167,11 +167,23 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket(
|
| return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close)));
|
| }
|
|
|
| +// Sets both least_unacked fields in stop waiting frame and ack frame
|
| +// to be |least_unacked|.
|
| scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket(
|
| QuicPacketNumber packet_number,
|
| QuicPacketNumber largest_received,
|
| QuicPacketNumber least_unacked,
|
| bool send_feedback) {
|
| + return MakeAckPacket(packet_number, largest_received, least_unacked,
|
| + least_unacked, send_feedback);
|
| +}
|
| +
|
| +scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket(
|
| + QuicPacketNumber packet_number,
|
| + QuicPacketNumber largest_received,
|
| + QuicPacketNumber ack_least_unacked,
|
| + QuicPacketNumber stop_least_unacked,
|
| + bool send_feedback) {
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = connection_id_;
|
| header.public_header.reset_flag = false;
|
| @@ -184,7 +196,7 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket(
|
|
|
| QuicAckFrame ack(MakeAckFrame(largest_received));
|
| ack.delta_time_largest_observed = QuicTime::Delta::Zero();
|
| - for (QuicPacketNumber i = least_unacked; i <= largest_received; ++i) {
|
| + for (QuicPacketNumber i = ack_least_unacked; i <= largest_received; ++i) {
|
| ack.received_packet_times.push_back(make_pair(i, clock_->Now()));
|
| }
|
|
|
| @@ -194,7 +206,7 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket(
|
| frames.push_back(QuicFrame(&ack));
|
|
|
| QuicStopWaitingFrame stop_waiting;
|
| - stop_waiting.least_unacked = least_unacked;
|
| + stop_waiting.least_unacked = stop_least_unacked;
|
| frames.push_back(QuicFrame(&stop_waiting));
|
|
|
| scoped_ptr<QuicPacket> packet(
|
| @@ -228,6 +240,22 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket(
|
| SpdyPriority priority,
|
| const SpdyHeaderBlock& headers,
|
| size_t* spdy_headers_frame_length) {
|
| + return MakeRequestHeadersPacket(packet_number, stream_id,
|
| + should_include_version, fin, priority,
|
| + headers, spdy_headers_frame_length, nullptr);
|
| +}
|
| +
|
| +// If |offset| is provided, will use the value when creating the packet.
|
| +// Will also update the value after packet creation.
|
| +scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket(
|
| + QuicPacketNumber packet_number,
|
| + QuicStreamId stream_id,
|
| + bool should_include_version,
|
| + bool fin,
|
| + SpdyPriority priority,
|
| + const SpdyHeaderBlock& headers,
|
| + size_t* spdy_headers_frame_length,
|
| + QuicStreamOffset* offset) {
|
| InitializeHeader(packet_number, should_include_version);
|
| scoped_ptr<SpdySerializedFrame> spdy_frame;
|
| if (spdy_request_framer_.protocol_version() == SPDY3) {
|
| @@ -247,34 +275,50 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket(
|
| if (spdy_headers_frame_length) {
|
| *spdy_headers_frame_length = spdy_frame->size();
|
| }
|
| - QuicStreamFrame frame(
|
| - kHeadersStreamId, false, 0,
|
| - base::StringPiece(spdy_frame->data(), spdy_frame->size()));
|
| - return MakePacket(header_, QuicFrame(&frame));
|
| + if (offset != nullptr) {
|
| + QuicStreamFrame frame(
|
| + kHeadersStreamId, false, *offset,
|
| + base::StringPiece(spdy_frame->data(), spdy_frame->size()));
|
| + *offset += spdy_frame->size();
|
| + return MakePacket(header_, QuicFrame(&frame));
|
| + } else {
|
| + QuicStreamFrame frame(
|
| + kHeadersStreamId, false, 0,
|
| + base::StringPiece(spdy_frame->data(), spdy_frame->size()));
|
| +
|
| + return MakePacket(header_, QuicFrame(&frame));
|
| + }
|
| }
|
|
|
| -scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket(
|
| +// Convenience method for calling MakeRequestHeadersPacket with nullptr for
|
| +// |spdy_headers_frame_length|.
|
| +scoped_ptr<QuicEncryptedPacket>
|
| +QuicTestPacketMaker::MakeRequestHeadersPacketWithOffsetTracking(
|
| QuicPacketNumber packet_number,
|
| QuicStreamId stream_id,
|
| bool should_include_version,
|
| bool fin,
|
| SpdyPriority priority,
|
| - const SpdyHeaderBlock& headers) {
|
| + const SpdyHeaderBlock& headers,
|
| + QuicStreamOffset* offset) {
|
| return MakeRequestHeadersPacket(packet_number, stream_id,
|
| should_include_version, fin, priority,
|
| - headers, nullptr);
|
| + headers, nullptr, offset);
|
| }
|
|
|
| +// If |offset| is provided, will use the value when creating the packet.
|
| +// Will also update the value after packet creation.
|
| scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket(
|
| QuicPacketNumber packet_number,
|
| QuicStreamId stream_id,
|
| bool should_include_version,
|
| bool fin,
|
| const SpdyHeaderBlock& headers,
|
| - size_t* spdy_headers_frame_length) {
|
| + size_t* spdy_headers_frame_length,
|
| + QuicStreamOffset* offset) {
|
| InitializeHeader(packet_number, should_include_version);
|
| scoped_ptr<SpdySerializedFrame> spdy_frame;
|
| - if (spdy_request_framer_.protocol_version() == SPDY3) {
|
| + if (spdy_response_framer_.protocol_version() == SPDY3) {
|
| SpdySynReplyIR syn_reply(stream_id);
|
| syn_reply.set_header_block(headers);
|
| syn_reply.set_fin(fin);
|
| @@ -283,15 +327,23 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket(
|
| SpdyHeadersIR headers_frame(stream_id);
|
| headers_frame.set_header_block(headers);
|
| headers_frame.set_fin(fin);
|
| - spdy_frame.reset(spdy_request_framer_.SerializeFrame(headers_frame));
|
| + spdy_frame.reset(spdy_response_framer_.SerializeFrame(headers_frame));
|
| }
|
| if (spdy_headers_frame_length) {
|
| *spdy_headers_frame_length = spdy_frame->size();
|
| }
|
| - QuicStreamFrame frame(
|
| - kHeadersStreamId, false, 0,
|
| - base::StringPiece(spdy_frame->data(), spdy_frame->size()));
|
| - return MakePacket(header_, QuicFrame(&frame));
|
| + if (offset != nullptr) {
|
| + QuicStreamFrame frame(
|
| + kHeadersStreamId, false, *offset,
|
| + base::StringPiece(spdy_frame->data(), spdy_frame->size()));
|
| + *offset += spdy_frame->size();
|
| + return MakePacket(header_, QuicFrame(&frame));
|
| + } else {
|
| + QuicStreamFrame frame(
|
| + kHeadersStreamId, false, 0,
|
| + base::StringPiece(spdy_frame->data(), spdy_frame->size()));
|
| + return MakePacket(header_, QuicFrame(&frame));
|
| + }
|
| }
|
|
|
| scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket(
|
| @@ -299,9 +351,26 @@ scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket(
|
| QuicStreamId stream_id,
|
| bool should_include_version,
|
| bool fin,
|
| - const SpdyHeaderBlock& headers) {
|
| - return MakeResponseHeadersPacket(
|
| - packet_number, stream_id, should_include_version, fin, headers, nullptr);
|
| + const SpdyHeaderBlock& headers,
|
| + size_t* spdy_headers_frame_length) {
|
| + return MakeResponseHeadersPacket(packet_number, stream_id,
|
| + should_include_version, fin, headers,
|
| + spdy_headers_frame_length, nullptr);
|
| +}
|
| +
|
| +// Convenience method for calling MakeResponseHeadersPacket with nullptr for
|
| +// |spdy_headers_frame_length|.
|
| +scoped_ptr<QuicEncryptedPacket>
|
| +QuicTestPacketMaker::MakeResponseHeadersPacketWithOffsetTracking(
|
| + QuicPacketNumber packet_number,
|
| + QuicStreamId stream_id,
|
| + bool should_include_version,
|
| + bool fin,
|
| + const SpdyHeaderBlock& headers,
|
| + QuicStreamOffset* offset) {
|
| + return MakeResponseHeadersPacket(packet_number, stream_id,
|
| + should_include_version, fin, headers,
|
| + nullptr, offset);
|
| }
|
|
|
| SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders(
|
| @@ -324,6 +393,16 @@ SpdyHeaderBlock QuicTestPacketMaker::GetResponseHeaders(
|
| return headers;
|
| }
|
|
|
| +SpdyHeaderBlock QuicTestPacketMaker::GetResponseHeaders(
|
| + const std::string& status,
|
| + const std::string& alt_svc) {
|
| + SpdyHeaderBlock headers;
|
| + headers[":status"] = status;
|
| + headers["Alt-Svc"] = alt_svc;
|
| + headers["content-type"] = "text/plain";
|
| + return headers;
|
| +}
|
| +
|
| scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakePacket(
|
| const QuicPacketHeader& header,
|
| const QuicFrame& frame) {
|
|
|