| 594 | } |
| 595 | |
| 596 | int 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 | |
| 650 | int ProtocolHttp2::sendGoAway(QIODevice *io, quint32 lastStreamId, quint32 error) const |
| 651 | { |
nothing calls this directly
no test coverage detected