uquic/example/main.go
2016-05-15 14:42:56 +02:00

79 lines
1.7 KiB
Go

package main
import (
"crypto/tls"
"crypto/x509"
"flag"
"fmt"
"io/ioutil"
"net/http"
"github.com/lucas-clemente/quic-go/h2quic"
"github.com/lucas-clemente/quic-go/testdata"
"github.com/lucas-clemente/quic-go/utils"
)
func main() {
verbose := flag.Bool("v", false, "verbose")
bindTo := flag.String("bind", "localhost", "bind to")
certPath := flag.String("certpath", "", "certificate directory")
www := flag.String("www", "/var/www", "www data")
flag.Parse()
if *verbose {
utils.SetLogLevel(utils.LogLevelDebug)
} else {
utils.SetLogLevel(utils.LogLevelInfo)
}
var tlsConfig *tls.Config
if *certPath == "" {
tlsConfig = testdata.GetTLSConfig()
} else {
var err error
tlsConfig, err = tlsConfigFromCertpath(*certPath)
if err != nil {
panic(err)
}
}
http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Printf("error reading body while handling /echo: %s\n", err.Error())
}
w.Write(body)
})
http.Handle("/", http.FileServer(http.Dir(*www)))
server, err := h2quic.NewServer(tlsConfig)
if err != nil {
panic(err)
}
err = server.ListenAndServe(*bindTo+":6121", nil)
if err != nil {
panic(err)
}
}
func tlsConfigFromCertpath(certpath string) (*tls.Config, error) {
keyDer, err := ioutil.ReadFile(certpath + "/key.der")
if err != nil {
return nil, err
}
certDer, err := ioutil.ReadFile(certpath + "/cert.der")
if err != nil {
return nil, err
}
key, err := x509.ParsePKCS1PrivateKey(keyDer)
if err != nil {
return nil, err
}
return &tls.Config{
Certificates: []tls.Certificate{{
Certificate: [][]byte{certDer},
PrivateKey: key,
}},
}, nil
}