From 316350ce24ab27c29f45666f3f6f9e17e3c17e28 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 7 Nov 2016 13:27:44 +0700 Subject: [PATCH] send inchoate CHLO --- example/client.go | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/example/client.go b/example/client.go index f52fbe2c..126f5b63 100644 --- a/example/client.go +++ b/example/client.go @@ -9,20 +9,15 @@ import ( quic "github.com/lucas-clemente/quic-go" "github.com/lucas-clemente/quic-go/crypto" + "github.com/lucas-clemente/quic-go/frames" + "github.com/lucas-clemente/quic-go/handshake" "github.com/lucas-clemente/quic-go/protocol" ) func main() { addr := "quic.clemente.io:6121" - udpAddr, err := net.ResolveUDPAddr("udp", addr) - if err != nil { - panic(err) - } - - fmt.Println(udpAddr.String()) - - conn, err := net.DialUDP("udp", nil, udpAddr) + conn, err := connect(addr) defer conn.Close() if err != nil { panic(err) @@ -31,13 +26,14 @@ func main() { rand.Seed(time.Now().UTC().UnixNano()) connectionID := protocol.ConnectionID(0x1337 + rand.Int63()) packetNumber := protocol.PacketNumber(1) + version := protocol.Version34 ph := quic.PublicHeader{ ConnectionID: connectionID, PacketNumber: packetNumber, - PacketNumberLen: protocol.PacketNumberLen2, + PacketNumberLen: protocol.PacketNumberLen6, VersionFlag: true, - VersionNumber: protocol.Version34, + VersionNumber: version, } raw := make([]byte, 0, protocol.MaxPacketSize) @@ -49,6 +45,22 @@ func main() { } payloadStartIndex := buffer.Len() + b := &bytes.Buffer{} + + tags := make(map[handshake.Tag][]byte) + tags[handshake.TagSNI] = []byte("quic.clemente.io") + tags[handshake.TagPDMD] = []byte("X509") + tags[handshake.TagPAD] = bytes.Repeat([]byte("F"), 1000) + handshake.WriteHandshakeMessage(b, handshake.TagCHLO, tags) + + frame := frames.StreamFrame{ + StreamID: 1, + DataLenPresent: true, + Data: b.Bytes(), + } + + frame.Write(buffer, version) + raw = raw[0:buffer.Len()] aead := crypto.NullAEAD{} aead.Seal(raw[payloadStartIndex:payloadStartIndex], raw[payloadStartIndex:], packetNumber, raw[:payloadStartIndex]) @@ -67,3 +79,17 @@ func main() { fmt.Println(data) } } + +func connect(addr string) (*net.UDPConn, error) { + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return nil, err + } + + conn, err := net.DialUDP("udp", nil, udpAddr) + if err != nil { + return nil, err + } + + return conn, nil +}