@@ -12,12 +12,25 @@ import (
1212// before writing the metadata.
1313var 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.
1624func 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
94112func 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
99131func writeSignature (stream io.Writer ) error {
0 commit comments