forked from quic-go/quic-go
add writing of basic ack frames
This commit is contained in:
17
frame.go
17
frame.go
@@ -85,3 +85,20 @@ func WriteStreamFrame(b *bytes.Buffer, f *StreamFrame) {
|
|||||||
utils.WriteUint16(b, uint16(len(f.Data)))
|
utils.WriteUint16(b, uint16(len(f.Data)))
|
||||||
b.Write(f.Data)
|
b.Write(f.Data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// An AckFrame in QUIC
|
||||||
|
type AckFrame struct {
|
||||||
|
LargestObserved uint32 // TODO: change to uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// WriteAckFrame writes an ack frame.
|
||||||
|
func WriteAckFrame(b *bytes.Buffer, f *AckFrame) {
|
||||||
|
typeByte := uint8(0x48)
|
||||||
|
b.WriteByte(typeByte)
|
||||||
|
b.WriteByte(0x00) // TODO: Entropy accumulation
|
||||||
|
utils.WriteUint32(b, f.LargestObserved)
|
||||||
|
utils.WriteUint16(b, 1) // TODO: Ack delay time
|
||||||
|
b.WriteByte(0x01) // Just one timestamp
|
||||||
|
b.WriteByte(0x00) // Largest observed
|
||||||
|
utils.WriteUint32(b, 0) // First timestamp
|
||||||
|
}
|
||||||
|
|||||||
@@ -52,4 +52,16 @@ var _ = Describe("Frame", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("ACK frames", func() {
|
||||||
|
Context("when writing", func() {
|
||||||
|
It("writes simple frames", func() {
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
WriteAckFrame(b, &AckFrame{
|
||||||
|
LargestObserved: 1,
|
||||||
|
})
|
||||||
|
Expect(b.Bytes()).To(Equal([]byte{0x48, 0, 0x01, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0}))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user