1package wire
2
3import (
4	"bytes"
5	"io"
6
7	"github.com/lucas-clemente/quic-go/internal/protocol"
8)
9
10// A PathChallengeFrame is a PATH_CHALLENGE frame
11type PathChallengeFrame struct {
12	Data [8]byte
13}
14
15func parsePathChallengeFrame(r *bytes.Reader, _ protocol.VersionNumber) (*PathChallengeFrame, error) {
16	if _, err := r.ReadByte(); err != nil {
17		return nil, err
18	}
19	frame := &PathChallengeFrame{}
20	if _, err := io.ReadFull(r, frame.Data[:]); err != nil {
21		if err == io.ErrUnexpectedEOF {
22			return nil, io.EOF
23		}
24		return nil, err
25	}
26	return frame, nil
27}
28
29func (f *PathChallengeFrame) Write(b *bytes.Buffer, _ protocol.VersionNumber) error {
30	b.WriteByte(0x1a)
31	b.Write(f.Data[:])
32	return nil
33}
34
35// Length of a written frame
36func (f *PathChallengeFrame) Length(_ protocol.VersionNumber) protocol.ByteCount {
37	return 1 + 8
38}
39