summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_chromium_client_session.cc
diff options
context:
space:
mode:
authorjokulik <jokulik@chromium.org>2016-03-24 15:35:30 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-24 22:37:10 +0000
commitf2bd55c5ab99300b7df0a97b3d0ef16c9a2e584a (patch)
treea075e02a5d98fce698e53b975674271b17673b3b /net/quic/quic_chromium_client_session.cc
parentef26d8f77ba056704780199893f1ebaf518136de (diff)
downloadchromium_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.cc22
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);