diff options
author | jokulik <jokulik@chromium.org> | 2016-03-24 15:35:30 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-24 22:37:10 +0000 |
commit | f2bd55c5ab99300b7df0a97b3d0ef16c9a2e584a (patch) | |
tree | a075e02a5d98fce698e53b975674271b17673b3b /net/quic/quic_chromium_client_session.cc | |
parent | ef26d8f77ba056704780199893f1ebaf518136de (diff) | |
download | chromium_src-f2bd55c5ab99300b7df0a97b3d0ef16c9a2e584a.zip chromium_src-f2bd55c5ab99300b7df0a97b3d0ef16c9a2e584a.tar.gz chromium_src-f2bd55c5ab99300b7df0a97b3d0ef16c9a2e584a.tar.bz2 |
Landing Recent QUIC changes until 3/18/2016 23:30 UTC
relnote: Add a QUIC end to end test of huge post.
The test code has been added but is currently disabled, due to
net_unittest timeout issues.
Merge internal change: 117596033
https://codereview.chromium.org/1830253002/
relnote: Do not read rejected packet number in PUBLIC RESET packet.
Merge internal change: 117595846
https://codereview.chromium.org/1834683002/
relnote: Trailers are now parsed and stored in QuicSpdyStream.
Moved the TrailersWithoutOffset test to the parent QuicSpdyStreamTest.
Deleted the ReceiveTrailersBeforeHeaders test entirely as it doesn't test useful behavior: it calls OnTrailingHeadersComplete directly but this is only ever called from within QuicSpdyStream (and subclasses).
Switch to the new WriteOrBufferBody method.
Merge internal change: 117582133
https://codereview.chromium.org/1832513004/
relnote: Move QuicSpdyClientStream::SendBody to QuicSpdyStream::WriteBody.
Merge internal change: 117577200
https://codereview.chromium.org/1830043004/
relnote: Make ShouldCreate{Incoming,Outgoing}DynamicStream abstract methods in QuicSpdySession. No behavior change.
Merge internal change: 117574127
https://codereview.chromium.org/1828123003/
relnote: Correctly set cmsg space for timestamping. Additionally, guard against future cmsg overflows. Not flag protected.
The previous calculation for the cmsg space was too small by 8B.
Merge internal change: 117568981
https://codereview.chromium.org/1828953002/
relnote: Creating a basic QUIC packet dumper
Adding newlines to any logged quic frames
Merge internal change: 117543172
https://codereview.chromium.org/1834593002/
relnote: Rename StreamSequencerBuffer to QuicStreamSequencerBuffer to bring it in line with other classes in //gfe/quic. No behavior change.
Merge internal change: 117487896
https://codereview.chromium.org/1831723002/
relnote: Rename QuicSpdyStream::response_trailers_ to received_trailers_. No behavior change.
QuicSpdyStream is used by servers and clients, received
trailers could be request trailers.
Merge internal change: 117483696
https://codereview.chromium.org/1822763002/
relnote: Introduces a QUIC_OVERLAPPING_STREAM_DATA error code, sent when receiving a stream frame containing data that overlaps with buffered data.
Renames QUIC_INVALID_STREAM_FRAME to QUIC_EMPTY_STREAM_FRAME_NO_FIN
Dan pointed out that QUIC_INVALID_STREAM_DATA is also used in the framer, making debugging the sequencer specific errors harder. Also the description of QUIC_INVALID_STREAM_DATA is that "STREAM frame data is malformed." which I don't think is true here: it's not malformed, it's just overlapping.
Merge internal change: 117452324
https://codereview.chromium.org/1830063002/
relnote: Close QUIC connection if any error occurs in QuicStreamSequencerBuffer::OnStreamData. Flag protected behind default enabled --flag_quic_consolidate_onstreamframe_errors
Flag protecting out of paranoia: new behavior is that if ever hit the QUIC_INTERNAL_ERROR branch in OnStreamData then we will now close the connection, whereas we did not before. Additionally a stream frame containing data which overlaps with existing data will now result in QUIC_INVALID_STREAM_DATA being sent on close, instead of QUIC_INVALID_STREAM_FRAME.
Merge internal change: 117446575
https://codereview.chromium.org/1830773002/
relnote: Use SO_TIMESTAMPING for received packet timestamps. Guarded by flag_quic_use_socket_timestamp.
This corrects the RTT for extremely low RTT connections (i.e. RTT < EpollServer
iteration duration). This manifests as a ~1.5Gbps improvement in egress at 100%
GFE CPU in the ustreamer load test, which while not indicative of reality, does
bring it closer to the TCP+SSL load test behavior. In practice, this really
just manages to reduce the number of calls to EpollServer::Now().
This is part of a broader set of changes to enable PACKET_RX_RING and all of
the capabilities it provides, notably PACKET_TIMESTAMPING.
Additionally, in QuicPacketReader's plain recvmsg path, ensure the returned
server IP is valid as is done in the recvmmsg path.
Merge internal change: 117434383
https://codereview.chromium.org/1828863002/
relnote: Remove QuicStreamSequencerBufferInterface that only has a single implementation. No behavior change.
Merge internal change: 117397110
https://codereview.chromium.org/1823803003/
relnote: Report no client nonce as INCHOATE_HELLO_FAILURE.
Merge internal change: 117371001
https://codereview.chromium.org/1820383002/
relnote: Add and plumb QuicReceivedPacket in the packet reception path. Optionally use its timestamp, guarded by gfe2_restart_flag_quic_use_socket_timestamp.
This is part of a broader set of changes to enable socket-level timestamping
and to enable PACKET_RX_RING with all of the capabilities it provides.
Merge internal change: 117362867
https://codereview.chromium.org/1821843003/
relnote: Add QUIC 32 in which FEC related fields are removed from private flags and revived packet list are removed from ACK frame.
Merge internal change: 117278937
https://codereview.chromium.org/1817223002/
relnote: rename QuicSpdyClientStream::headers to response_headers
Merge internal change: 117272106
https://codereview.chromium.org/1822763002/
R=rch@chromium.org
BUG=
Review URL: https://codereview.chromium.org/1832953002
Cr-Commit-Position: refs/heads/master@{#383171}
Diffstat (limited to 'net/quic/quic_chromium_client_session.cc')
-rw-r--r-- | net/quic/quic_chromium_client_session.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc index 08145fc..0f018bb 100644 --- a/net/quic/quic_chromium_client_session.cc +++ b/net/quic/quic_chromium_client_session.cc @@ -655,24 +655,32 @@ bool QuicChromiumClientSession::CanPool(const std::string& hostname, server_id_.host(), hostname); } -QuicChromiumClientStream* -QuicChromiumClientSession::CreateIncomingDynamicStream(QuicStreamId id) { +bool QuicChromiumClientSession::ShouldCreateIncomingDynamicStream( + QuicStreamId id) { if (!connection()->connected()) { LOG(DFATAL) << "ShouldCreateIncomingDynamicStream called when disconnected"; - return nullptr; + return false; } if (goaway_received()) { - DVLOG(1) << "Failed to create a new outgoing stream. " + DVLOG(1) << "Cannot create a new outgoing stream. " << "Already received goaway."; - return nullptr; + return false; } if (going_away_) { - return nullptr; + return false; } if (id % 2 != 0) { LOG(WARNING) << "Received invalid push stream id " << id; connection()->SendConnectionCloseWithDetails( QUIC_INVALID_STREAM_ID, "Server created odd numbered stream"); + return false; + } + return true; +} + +QuicChromiumClientStream* +QuicChromiumClientSession::CreateIncomingDynamicStream(QuicStreamId id) { + if (!ShouldCreateIncomingDynamicStream(id)) { return nullptr; } return CreateIncomingReliableStreamImpl(id); @@ -1056,7 +1064,7 @@ void QuicChromiumClientSession::OnReadError( NotifyFactoryOfSessionClosedLater(); } -bool QuicChromiumClientSession::OnPacket(const QuicEncryptedPacket& packet, +bool QuicChromiumClientSession::OnPacket(const QuicReceivedPacket& packet, IPEndPoint local_address, IPEndPoint peer_address) { ProcessUdpPacket(local_address, peer_address, packet); |