MCPcopy Create free account
hub / github.com/cutelyst/cutelyst / parseWindowUpdate

Method parseWindowUpdate

Cutelyst/Server/protocolhttp2.cpp:596–648  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

594}
595
596int ProtocolHttp2::parseWindowUpdate(ProtoRequestHttp2 *request,
597 QIODevice *io,
598 const H2Frame &fr) const
599{
600 if (fr.len != 4) {
601 return sendGoAway(io, request->maxStreamId, ErrorFrameSizeError);
602 }
603
604 quint32 windowSizeIncrement = net_be32(request->buffer + 9);
605 if (windowSizeIncrement == 0) {
606 return sendGoAway(io, request->maxStreamId, ErrorProtocolError);
607 }
608
609 // qDebug() << "Consuming WINDOW_UPDATE" << fr.streamId << "increment" << windowSizeIncrement
610 // << request;
611
612 if (fr.streamId) {
613 H2Stream *stream;
614 auto streamIt = request->streams.constFind(fr.streamId);
615 if (streamIt != request->streams.constEnd()) {
616 stream = streamIt.value();
617
618 if (stream->state == H2Stream::Idle) {
619 return sendGoAway(io, request->maxStreamId, ErrorProtocolError);
620 }
621 } else {
622 return sendGoAway(io, request->maxStreamId, ErrorStreamClosed);
623 }
624
625 const qint64 result = qint64(stream->windowSize) + windowSizeIncrement;
626 if (result > 2147483647) {
627 stream->state = H2Stream::Closed;
628 return sendRstStream(io, fr.streamId, ErrorFlowControlError);
629 }
630 stream->windowSize = qint32(result);
631 stream->windowUpdated();
632
633 } else {
634 const qint64 result = qint64(request->windowSize) + windowSizeIncrement;
635 if (result > 2147483647) {
636 return sendGoAway(io, request->maxStreamId, ErrorFlowControlError);
637 }
638 request->windowSize = qint32(result);
639
640 if (result > 0) {
641 for (const auto &stream : std::as_const(request->streams)) {
642 stream->windowUpdated();
643 }
644 }
645 }
646
647 return 0;
648}
649
650int ProtocolHttp2::sendGoAway(QIODevice *io, quint32 lastStreamId, quint32 error) const
651{

Callers

nothing calls this directly

Calls 3

net_be32Function · 0.85
windowUpdatedMethod · 0.80
valueMethod · 0.45

Tested by

no test coverage detected