aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-04-04 02:10:52 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-04-04 02:10:52 +0200
commit16663e2524c0eea212bf5e9a0b3eccf5273c7fe2 (patch)
tree9a95c5d71c86fb17b3ddd6cbaf9bdfb2b9e88177 /server.go
parent9e3cbd9fcb2cc9c8e7d9ba7d3d8c817872a58dbf (diff)
Separate cert selector
Diffstat (limited to 'server.go')
-rw-r--r--server.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/server.go b/server.go
index 694751c..2122644 100644
--- a/server.go
+++ b/server.go
@@ -2,6 +2,7 @@ package goxy
import (
"crypto/tls"
+ "net"
"net/http"
"net/http/httputil"
"net/url"
@@ -10,6 +11,7 @@ import (
type Server struct {
DataFile string
Routes
+ SNI
wwwServer http.Server
tlsServer http.Server
rpcServer http.Server
@@ -22,6 +24,7 @@ func NewServer(dataFile, listenWWW, listenTLS, listenRPC string) (*Server, error
server := &Server{
DataFile: dataFile,
Routes: make(Routes),
+ SNI: make(SNI),
wwwServer: http.Server{Addr: listenWWW},
tlsServer: http.Server{Addr: listenTLS},
rpcServer: http.Server{Addr: listenRPC},
@@ -60,13 +63,16 @@ func (s *Server) UpdateMux() error {
return err
}
- if r.certificate == nil && serverName.Scheme == "https" {
+ if serverName.Scheme == "https" {
cert, err := tls.X509KeyPair(r.Cert, r.Key)
if err != nil {
return err
}
- r.certificate = &cert
- s.Routes[host] = r
+ slug, _, err := net.SplitHostPort(serverName.Host)
+ if err != nil {
+ slug = serverName.Host
+ }
+ s.SNI[slug] = &cert
}
switch serverName.Scheme {