Skip to content

Commit

Permalink
H2: remove a rather useless limit on the number of streams
Browse files Browse the repository at this point in the history
SETTINGS for max concurrect number of streams is 'one direction' - this
is how our peer conveys the possible number of streams _we_ can open,
not _them_. If they choose to have it unlimited - let it be so.

It's possible to send 0 as maximum number, also, it's possible to
reduce the maximum compared to initial at some point - then I have
to avoid integer overflows.

Pick-to: 6.2
Pick-to: 6.1
Pick-to: 5.15
Fixes: QTBUG-94470
Change-Id: Ia02247acbaedd70998a4cab02082ba10f45cf78c
Reviewed-by: Mårten Nordheim <[email protected]>
Reviewed-by: Edward Welbourne <[email protected]>
  • Loading branch information
Timur Pocheptsov committed Jun 14, 2021
1 parent 76b0713 commit 46940ca
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 10 deletions.
3 changes: 0 additions & 3 deletions src/network/access/http2/http2protocol_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,6 @@ enum Http2PredefinedParameters
maxPayloadSize = (1 << 24) - 1, // HTTP/2 6.5.2

defaultSessionWindowSize = 65535, // HTTP/2 6.5.2
// Using 1000 (rather arbitrarily), just to
// impose *some* upper limit:
maxPeerConcurrentStreams = 1000,
maxConcurrentStreams = 100 // HTTP/2, 6.5.2
};

Expand Down
10 changes: 3 additions & 7 deletions src/network/access/qhttp2protocolhandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,8 @@ bool QHttp2ProtocolHandler::sendRequest()
initReplyFromPushPromise(message, key);
}

const auto streamsToUse = std::min<quint32>(maxConcurrentStreams - activeStreams.size(),
const auto streamsToUse = std::min<quint32>(maxConcurrentStreams > activeStreams.size()
? maxConcurrentStreams - activeStreams.size() : 0,
requests.size());
auto it = requests.begin();
for (quint32 i = 0; i < streamsToUse; ++i) {
Expand Down Expand Up @@ -1085,13 +1086,8 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne
QMetaObject::invokeMethod(this, "resumeSuspendedStreams", Qt::QueuedConnection);
}

if (identifier == Settings::MAX_CONCURRENT_STREAMS_ID) {
if (newValue > maxPeerConcurrentStreams) {
connectionError(PROTOCOL_ERROR, "SETTINGS invalid number of concurrent streams");
return false;
}
if (identifier == Settings::MAX_CONCURRENT_STREAMS_ID)
maxConcurrentStreams = newValue;
}

if (identifier == Settings::MAX_FRAME_SIZE_ID) {
if (newValue < Http2::minPayloadLimit || newValue > Http2::maxPayloadSize) {
Expand Down

0 comments on commit 46940ca

Please sign in to comment.