Procházet zdrojové kódy

Added Stoppable listener for TLS listener

Shelikhoo před 9 roky
rodič
revize
062d05fdcf

+ 6 - 1
transport/internet/ws/hub.go

@@ -83,7 +83,12 @@ func (wsl *WSListener) listenws(address v2net.Address, port v2net.Port) error {
 
 	if effectiveConfig.Pto == "wss" {
 		listenerfunc = func() error {
-			return http.ListenAndServeTLS(address.String()+":"+strconv.Itoa(int(port.Value())), effectiveConfig.Cert, effectiveConfig.PrivKey, nil)
+			var err error
+			wsl.listener, err = getstopableTLSlistener(effectiveConfig.Cert, effectiveConfig.PrivKey, address.String()+":"+strconv.Itoa(int(port.Value())))
+			if err != nil {
+				return err
+			}
+			return http.Serve(wsl.listener, nil)
 		}
 	}
 

+ 18 - 0
transport/internet/ws/stopabletlslistener.go

@@ -0,0 +1,18 @@
+package ws
+
+import "crypto/tls"
+
+func getstopableTLSlistener(cert, key, listenaddr string) (*StoppableListener, error) {
+	cer, err := tls.LoadX509KeyPair(cert, key)
+	if err != nil {
+		return nil, err
+	}
+
+	config := &tls.Config{Certificates: []tls.Certificate{cer}}
+	ln, err := tls.Listen("tcp", listenaddr, config)
+	if err != nil {
+		return nil, err
+	}
+	lns, err := NewStoppableListener(ln)
+	return lns, err
+}