Http2: RST: Also checking peer stream IDs for idleness
A peer can send a RST_STREAM frame for their own stream, so we have to check if one such stream has been active instead of just our own. Change-Id: I5a46b10df98809ed3d803bfb1a92a45ab7f7d961 Reviewed-by: Øystein Heskestad <oystein.heskestad@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> (cherry picked from commit 0026b17eff313a0bb248a8d04593eb80f16f315d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
61ae6f1c8a
commit
c861e01300
@ -1329,8 +1329,12 @@ void QHttp2Connection::handleRST_STREAM()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Anything greater than m_nextStreamID has not been started yet.
|
// Verify that whatever stream is being RST'd is not in the idle state:
|
||||||
if (streamID >= m_nextStreamID) {
|
const quint32 lastRelevantStreamID = [this, streamID]() {
|
||||||
|
quint32 peerMask = m_connectionType == Type::Client ? 0 : 1;
|
||||||
|
return ((streamID & 1) == peerMask) ? m_lastIncomingStreamID : m_nextStreamID - 2;
|
||||||
|
}();
|
||||||
|
if (streamID > lastRelevantStreamID) {
|
||||||
// "RST_STREAM frames MUST NOT be sent for a stream
|
// "RST_STREAM frames MUST NOT be sent for a stream
|
||||||
// in the "idle" state. .. the recipient MUST treat this
|
// in the "idle" state. .. the recipient MUST treat this
|
||||||
// as a connection error (Section 5.4.1) of type PROTOCOL_ERROR."
|
// as a connection error (Section 5.4.1) of type PROTOCOL_ERROR."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user