pad datagrams containing ack-eliciting Initial packets from the server

This commit is contained in:
Marten Seemann
2020-10-25 14:43:57 +07:00
parent 27f569e2c9
commit 459fa5d19b
2 changed files with 112 additions and 92 deletions

View File

@@ -303,12 +303,21 @@ func (p *packetPacker) MaybePackAckPacket(handshakeConfirmed bool) (*packedPacke
if err != nil {
return nil, err
}
return p.writeSinglePacket(hdr, payload, encLevel, sealer)
packet, err := p.writeSinglePacket(hdr, payload, encLevel, sealer)
if err != nil {
return nil, err
}
p.maybePadPacket(packet.packetContents, packet.buffer)
return packet, nil
}
func (p *packetPacker) maybePadPacket(firstPacket *packetContents, buffer *packetBuffer) {
// Only Initial packets need to be padded.
if firstPacket.header.Type != protocol.PacketTypeInitial || p.perspective == protocol.PerspectiveServer {
if firstPacket.header.Type != protocol.PacketTypeInitial {
return
}
// For the server, only ack-eliciting Initial packets need to be padded.
if p.perspective == protocol.PerspectiveServer && !ackhandler.HasAckElicitingFrames(firstPacket.frames) {
return
}
if dataLen := protocol.ByteCount(len(buffer.Data)); dataLen < p.maxPacketSize {