send Version Negotiation Packet if the client uses the wrong QUIC version

This commit is contained in:
Marten Seemann
2016-04-14 14:29:25 +07:00
parent 703aad12c0
commit 55c6a51b45

View File

@@ -8,14 +8,17 @@ import (
"github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go/crypto"
"github.com/lucas-clemente/quic-go/utils"
)
const (
// QuicVersion32 is Q032
QuicVersion32 uint32 = 'Q'<<24 + '0'<<16 + '3'<<8 + '2'
// QuicVersion32Bytes is the QUIC protocol version
QuicVersionNumber32 = 32
)
func main() {
QuicVersion32, _ := utils.ReadUint32BigEndian(bytes.NewReader([]byte{'Q', '0', 48 + (QuicVersionNumber32/10)%10, 48 + QuicVersionNumber32%10}))
path := os.Getenv("GOPATH") + "/src/github.com/lucas-clemente/quic-go/example/"
keyData, err := crypto.LoadKeyData(path+"cert.der", path+"key.der")
if err != nil {
@@ -47,9 +50,17 @@ func main() {
panic(err)
}
// send Version Negotiation Packet if the client is speaking a different protocol version
if publicHeader.VersionFlag && publicHeader.QuicVersion != QuicVersion32 {
println(publicHeader.QuicVersion)
panic("only version Q032 supported")
fmt.Println("Sending VersionNegotiationPacket")
fullReply := &bytes.Buffer{}
responsePublicHeader := quic.PublicHeader{ConnectionID: publicHeader.ConnectionID, PacketNumber: 1, VersionFlag: true}
err = responsePublicHeader.WritePublicHeader(fullReply)
if err != nil {
panic(err)
}
utils.WriteUint32BigEndian(fullReply, QuicVersion32)
conn.WriteToUDP(fullReply.Bytes(), remoteAddr)
}
nullAEAD := &crypto.NullAEAD{}