From 671557542bb0c64661aecea12b014247feb72231 Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Fri, 8 Apr 2016 12:56:15 +0200 Subject: [PATCH] add example server --- example/main.go | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 example/main.go diff --git a/example/main.go b/example/main.go new file mode 100644 index 000000000..73f381357 --- /dev/null +++ b/example/main.go @@ -0,0 +1,65 @@ +package main + +import ( + "bytes" + "errors" + "fmt" + "net" + + "github.com/lucas-clemente/quic-go" + "github.com/lucas-clemente/quic-go/crypto" +) + +func main() { + addr, err := net.ResolveUDPAddr("udp", "localhost:6121") + if err != nil { + panic(err) + } + + conn, err := net.ListenUDP("udp", addr) + if err != nil { + panic(err) + } + + data := make([]byte, 0x10000) + n, remoteAddr, err := conn.ReadFromUDP(data) + if err != nil { + panic(err) + } + data = data[:n] + r := bytes.NewReader(data) + + fmt.Printf("Number of bytes: %d\n", n) + fmt.Printf("Remote addr: %v\n", remoteAddr) + + publicHeader, err := quic.ParsePublicHeader(r) + if err != nil { + panic(err) + } + + if publicHeader.VersionFlag && publicHeader.QuicVersion != 0x51303330 { + panic("only version Q030 supported") + } + + nullAEAD := &crypto.NullAEAD{} + r, err = nullAEAD.Open(data[0:int(r.Size())-r.Len()], r) + if err != nil { + panic(err) + } + + privateFlag, err := r.ReadByte() + if err != nil { + panic(err) + } + + if privateFlag&0x02 > 0 || privateFlag&0x04 > 0 { + panic(errors.New("FEC packets are not implemented")) + } + + frame, err := quic.ParseStreamFrame(r) + if err != nil { + panic(err) + } + + fmt.Printf("%s\n", string(frame.Data[0:4])) +}