diff options
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/server.go b/server.go new file mode 100644 index 00000000..62647c89 --- /dev/null +++ b/server.go @@ -0,0 +1,42 @@ +package main + +import ( + "crypto/tls" + "golang.org/x/net/http2" + "net/http" +) + +type TLSHandler interface { + http.Handler + ServeTLS(*tls.ClientHelloInfo) (*tls.Certificate, error) +} + +func ListenAndServe(addr string, handler http.Handler) error { + // create server + server := &http.Server{Addr: addr, Handler: handler} + + if *http2proto { + err := http2.ConfigureServer(server, &http2.Server{}) + if err != nil { + return err + } + } + + return server.ListenAndServe() +} + +func ListenAndServeTLS(addr string, certFile, keyFile string, handler TLSHandler) error { + // create server + server := &http.Server{Addr: addr, Handler: handler} + server.TLSConfig = &tls.Config{} + server.TLSConfig.GetCertificate = handler.ServeTLS + + if *http2proto { + err := http2.ConfigureServer(server, &http2.Server{}) + if err != nil { + return err + } + } + + return server.ListenAndServeTLS(certFile, keyFile) +} |