Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1047)

Unified Diff: webrtc/p2p/quic/quicsession.cc

Issue 1888903002: Fix QuicSession to unbuffer data when the QuicTransportChannel reconnects (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Respond to pthatcher comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/p2p/quic/quicsession.h ('k') | webrtc/p2p/quic/quictransportchannel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/quic/quicsession.cc
diff --git a/webrtc/p2p/quic/quicsession.cc b/webrtc/p2p/quic/quicsession.cc
index d451f891ba6b22ec593c5cb314658997bdd84e90..65ed135754574dec89a86208ba8acb7cfe902636 100644
--- a/webrtc/p2p/quic/quicsession.cc
+++ b/webrtc/p2p/quic/quicsession.cc
@@ -20,6 +20,10 @@
namespace cricket {
+// Default priority for incoming QUIC streams.
+// TODO(mikescarlett): Determine if this value is correct.
+static const net::SpdyPriority kDefaultPriority = 3;
+
QuicSession::QuicSession(std::unique_ptr<net::QuicConnection> connection,
const net::QuicConfig& config)
: net::QuicSession(connection.release(), config) {}
@@ -62,9 +66,19 @@ void QuicSession::OnCryptoHandshakeEvent(CryptoHandshakeEvent event) {
}
}
+void QuicSession::CloseStream(net::QuicStreamId stream_id) {
+ if (IsClosedStream(stream_id)) {
+ // When CloseStream has been called recursively (via
+ // ReliableQuicStream::OnClose), the stream is already closed so return.
+ return;
+ }
+ write_blocked_streams()->UnregisterStream(stream_id);
+ net::QuicSession::CloseStream(stream_id);
+}
+
ReliableQuicStream* QuicSession::CreateIncomingDynamicStream(
net::QuicStreamId id) {
- ReliableQuicStream* stream = CreateDataStream(id);
+ ReliableQuicStream* stream = CreateDataStream(id, kDefaultPriority);
if (stream) {
SignalIncomingStream(stream);
}
@@ -73,17 +87,23 @@ ReliableQuicStream* QuicSession::CreateIncomingDynamicStream(
ReliableQuicStream* QuicSession::CreateOutgoingDynamicStream(
net::SpdyPriority priority) {
- return CreateDataStream(GetNextOutgoingStreamId());
+ return CreateDataStream(GetNextOutgoingStreamId(), priority);
}
-ReliableQuicStream* QuicSession::CreateDataStream(net::QuicStreamId id) {
+ReliableQuicStream* QuicSession::CreateDataStream(net::QuicStreamId id,
+ net::SpdyPriority priority) {
if (crypto_stream_ == nullptr || !crypto_stream_->encryption_established()) {
// Encryption not active so no stream created
return nullptr;
}
ReliableQuicStream* stream = new ReliableQuicStream(id, this);
if (stream) {
- ActivateStream(stream); // QuicSession owns the stream.
+ // Make QuicSession take ownership of the stream.
+ ActivateStream(stream);
+ // Register the stream to the QuicWriteBlockedList. |priority| is clamped
+ // between 0 and 7, with 0 being the highest priority and 7 the lowest
+ // priority.
+ write_blocked_streams()->RegisterStream(stream->id(), priority);
}
return stream;
}
« no previous file with comments | « webrtc/p2p/quic/quicsession.h ('k') | webrtc/p2p/quic/quictransportchannel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698