add includeStreamFrames option to PacketPacker

This commit is contained in:
Lucas Clemente
2016-04-26 19:04:42 +02:00
parent 270b2f0f99
commit 5d8293716e
3 changed files with 45 additions and 22 deletions

View File

@@ -34,25 +34,25 @@ func (p *packetPacker) AddStreamFrame(f frames.StreamFrame) {
p.mutex.Unlock()
}
func (p *packetPacker) PackPacket(controlFrames []frames.Frame) (*packedPacket, error) {
func (p *packetPacker) PackPacket(controlFrames []frames.Frame, includeStreamFrames bool) (*packedPacket, error) {
// TODO: save controlFrames as a member variable, makes it easier to handle in the unlikely event that there are more controlFrames than you can put into on packet
p.mutex.Lock()
defer p.mutex.Unlock() // TODO: Split up?
if len(p.queuedStreamFrames) == 0 {
return nil, nil
}
currentPacketNumber := protocol.PacketNumber(atomic.AddUint64(
(*uint64)(&p.lastPacketNumber),
1,
))
payloadFrames, err := p.composeNextPacket(controlFrames)
payloadFrames, err := p.composeNextPacket(controlFrames, includeStreamFrames)
if err != nil {
return nil, err
}
if len(payloadFrames) == 0 {
return nil, nil
}
payload, err := p.getPayload(payloadFrames, currentPacketNumber)
if err != nil {
return nil, err
@@ -99,7 +99,7 @@ func (p *packetPacker) getPayload(frames []frames.Frame, currentPacketNumber pro
return payload.Bytes(), nil
}
func (p *packetPacker) composeNextPacket(controlFrames []frames.Frame) ([]frames.Frame, error) {
func (p *packetPacker) composeNextPacket(controlFrames []frames.Frame, includeStreamFrames bool) ([]frames.Frame, error) {
payloadLength := 0
var payloadFrames []frames.Frame
@@ -111,6 +111,10 @@ func (p *packetPacker) composeNextPacket(controlFrames []frames.Frame) ([]frames
controlFrames = controlFrames[1:]
}
if !includeStreamFrames {
return payloadFrames, nil
}
for len(p.queuedStreamFrames) > 0 {
frame := p.queuedStreamFrames[0]