send inchoate CHLO

This commit is contained in:
Marten Seemann
2016-11-07 13:27:44 +07:00
parent 2b7c67d297
commit 316350ce24

View File

@@ -9,20 +9,15 @@ import (
quic "github.com/lucas-clemente/quic-go" quic "github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go/crypto" "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" "github.com/lucas-clemente/quic-go/protocol"
) )
func main() { func main() {
addr := "quic.clemente.io:6121" addr := "quic.clemente.io:6121"
udpAddr, err := net.ResolveUDPAddr("udp", addr) conn, err := connect(addr)
if err != nil {
panic(err)
}
fmt.Println(udpAddr.String())
conn, err := net.DialUDP("udp", nil, udpAddr)
defer conn.Close() defer conn.Close()
if err != nil { if err != nil {
panic(err) panic(err)
@@ -31,13 +26,14 @@ func main() {
rand.Seed(time.Now().UTC().UnixNano()) rand.Seed(time.Now().UTC().UnixNano())
connectionID := protocol.ConnectionID(0x1337 + rand.Int63()) connectionID := protocol.ConnectionID(0x1337 + rand.Int63())
packetNumber := protocol.PacketNumber(1) packetNumber := protocol.PacketNumber(1)
version := protocol.Version34
ph := quic.PublicHeader{ ph := quic.PublicHeader{
ConnectionID: connectionID, ConnectionID: connectionID,
PacketNumber: packetNumber, PacketNumber: packetNumber,
PacketNumberLen: protocol.PacketNumberLen2, PacketNumberLen: protocol.PacketNumberLen6,
VersionFlag: true, VersionFlag: true,
VersionNumber: protocol.Version34, VersionNumber: version,
} }
raw := make([]byte, 0, protocol.MaxPacketSize) raw := make([]byte, 0, protocol.MaxPacketSize)
@@ -49,6 +45,22 @@ func main() {
} }
payloadStartIndex := buffer.Len() 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()] raw = raw[0:buffer.Len()]
aead := crypto.NullAEAD{} aead := crypto.NullAEAD{}
aead.Seal(raw[payloadStartIndex:payloadStartIndex], raw[payloadStartIndex:], packetNumber, raw[:payloadStartIndex]) aead.Seal(raw[payloadStartIndex:payloadStartIndex], raw[payloadStartIndex:], packetNumber, raw[:payloadStartIndex])
@@ -67,3 +79,17 @@ func main() {
fmt.Println(data) 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
}