send Blocked frames for flow control blocked streams

fixes #100
This commit is contained in:
Marten Seemann
2016-05-17 19:00:11 +07:00
parent 078b563526
commit 42f3091e1b
4 changed files with 61 additions and 0 deletions

View File

@@ -50,6 +50,7 @@ type Session struct {
receivedPacketHandler ackhandler.ReceivedPacketHandler
stopWaitingManager ackhandler.StopWaitingManager
windowUpdateManager *windowUpdateManager
blockedFrameQueue []*frames.BlockedFrame
unpacker *packetUnpacker
packer *packetPacker
@@ -454,6 +455,11 @@ func (s *Session) sendPacket() error {
controlFrames = append(controlFrames, wuf)
}
for _, bf := range s.blockedFrameQueue {
controlFrames = append(controlFrames, bf)
}
s.blockedFrameQueue = s.blockedFrameQueue[:0]
ack, err := s.receivedPacketHandler.GetAckFrame(true)
if err != nil {
return err
@@ -541,6 +547,10 @@ func (s *Session) updateReceiveFlowControlWindow(streamID protocol.StreamID, byt
return nil
}
func (s *Session) streamBlocked(streamID protocol.StreamID) {
s.blockedFrameQueue = append(s.blockedFrameQueue, &frames.BlockedFrame{StreamID: streamID})
}
// OpenStream creates a new stream open for reading and writing
func (s *Session) OpenStream(id protocol.StreamID) (utils.Stream, error) {
s.streamsMutex.Lock()