Skip to content

Commit 17e3073

Browse files
TUN-4613: Add a no-op protocol version slot
1 parent 071d595 commit 17e3073

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

quic/quic_protocol.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,25 @@ import (
1212
// before writing the metadata.
1313
var protocolSignature = []byte{0x0A, 0x36, 0xCD, 0x12, 0xA1, 0x3E}
1414

15+
const protocolVersionLength = 2
16+
17+
type protocolVersion string
18+
19+
const (
20+
protocolV1 protocolVersion = "01"
21+
)
22+
1523
// ReadConnectRequestData reads the handshake data from a QUIC stream.
1624
func ReadConnectRequestData(stream io.Reader) (*ConnectRequest, error) {
1725
if err := verifySignature(stream); err != nil {
1826
return nil, err
1927
}
2028

29+
// This is a NO-OP for now. We could cause a branching if we wanted to use multiple versions.
30+
if _, err := readVersion(stream); err != nil {
31+
return nil, err
32+
}
33+
2134
msg, err := capnp.NewDecoder(stream).Decode()
2235
if err != nil {
2336
return nil, err
@@ -55,6 +68,11 @@ func ReadConnectResponseData(stream io.Reader) (*ConnectResponse, error) {
5568
return nil, err
5669
}
5770

71+
// This is a NO-OP for now. We could cause a branching if we wanted to use multiple versions.
72+
if _, err := readVersion(stream); err != nil {
73+
return nil, err
74+
}
75+
5876
msg, err := capnp.NewDecoder(stream).Decode()
5977
if err != nil {
6078
return nil, err
@@ -92,8 +110,22 @@ func WriteConnectResponseData(stream io.Writer, respErr error, metadata ...Metad
92110
}
93111

94112
func writePreamble(stream io.Writer) error {
95-
return writeSignature(stream)
96-
// TODO : TUN-4613 Write protocol version here
113+
if err := writeSignature(stream); err != nil {
114+
return err
115+
}
116+
117+
return writeVersion(stream)
118+
}
119+
120+
func writeVersion(stream io.Writer) error {
121+
_, err := stream.Write([]byte(protocolV1)[:protocolVersionLength])
122+
return err
123+
}
124+
125+
func readVersion(stream io.Reader) (string, error) {
126+
version := make([]byte, protocolVersionLength)
127+
_, err := stream.Read(version)
128+
return string(version), err
97129
}
98130

99131
func writeSignature(stream io.Writer) error {

0 commit comments

Comments
 (0)