forked from quic-go/quic-go
@@ -127,13 +127,17 @@ func (p *packetPacker) packPacket(stopWaitingFrame *frames.StopWaitingFrame, con
|
||||
return nil, err
|
||||
}
|
||||
|
||||
entropyBit, err := utils.RandomBit()
|
||||
// set entropy bit in Private Header, for QUIC version < 34
|
||||
var entropyBit bool
|
||||
if p.version < protocol.Version34 {
|
||||
entropyBit, err = utils.RandomBit()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if entropyBit {
|
||||
payload[0] = 1
|
||||
}
|
||||
}
|
||||
|
||||
var raw bytes.Buffer
|
||||
if err := responsePublicHeader.WritePublicHeader(&raw, p.version); err != nil {
|
||||
@@ -157,7 +161,13 @@ func (p *packetPacker) packPacket(stopWaitingFrame *frames.StopWaitingFrame, con
|
||||
|
||||
func (p *packetPacker) getPayload(frames []frames.Frame, currentPacketNumber protocol.PacketNumber) ([]byte, error) {
|
||||
var payload bytes.Buffer
|
||||
payload.WriteByte(0) // The entropy bit is set in sendPayload
|
||||
|
||||
// reserve 1 byte for the Private Header, for QUIC Version < 34
|
||||
// the entropy bit is set in sendPayload
|
||||
if p.version < protocol.Version34 {
|
||||
payload.WriteByte(0)
|
||||
}
|
||||
|
||||
for _, frame := range frames {
|
||||
frame.Write(&payload, p.version)
|
||||
}
|
||||
|
||||
@@ -68,6 +68,29 @@ var _ = Describe("Packet packer", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
|
||||
It("doesn't set a private header for QUIC version >= 34", func() {
|
||||
// This is not trivial to test, since PackPacket() already encrypts the packet
|
||||
// So pack the packet for QUIC 33, then for QUIC 34. The packet for QUIC 33 should be 1 byte longer, since it contains the Private Header
|
||||
f := frames.StreamFrame{
|
||||
StreamID: 5,
|
||||
Data: []byte("foobar"),
|
||||
}
|
||||
// pack the packet for QUIC version 33
|
||||
packer.version = protocol.Version33
|
||||
packer.AddStreamFrame(f)
|
||||
p33, err := packer.PackPacket(nil, []frames.Frame{})
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(p33).ToNot(BeNil())
|
||||
// pack the packet for QUIC version 34
|
||||
packer.version = protocol.Version34
|
||||
packer.AddStreamFrame(f)
|
||||
p34, err := packer.PackPacket(nil, []frames.Frame{})
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(p34).ToNot(BeNil())
|
||||
Expect(p34.entropyBit).To(BeFalse())
|
||||
Expect(p34.raw).To(HaveLen(len(p33.raw) - 1))
|
||||
})
|
||||
|
||||
It("packs single packets", func() {
|
||||
f := frames.StreamFrame{
|
||||
StreamID: 5,
|
||||
|
||||
Reference in New Issue
Block a user