mirror of
https://github.com/smallnest/rpcx.git
synced 2025-10-25 17:10:21 +08:00
refactor TLS
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
reuseport "github.com/kavu/go_reuseport"
|
reuseport "github.com/kavu/go_reuseport"
|
||||||
@@ -22,7 +23,12 @@ func (s *Server) makeListener(network, address string) (ln net.Listener, err err
|
|||||||
|
|
||||||
ln, err = reuseport.NewReusablePortListener(network, address)
|
ln, err = reuseport.NewReusablePortListener(network, address)
|
||||||
default: //tcp, http
|
default: //tcp, http
|
||||||
ln, err = net.Listen(network, address)
|
if s.TLSConfig == nil {
|
||||||
|
ln, err = net.Listen(network, address)
|
||||||
|
} else {
|
||||||
|
ln, err = tls.Listen(network, address, s.TLSConfig)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ln, err
|
return ln, err
|
||||||
|
|||||||
@@ -32,12 +32,16 @@ func (s *Server) makeListener(network, address string) (ln net.Listener, err err
|
|||||||
|
|
||||||
ln, err = reuseport.NewReusablePortListener(network, address)
|
ln, err = reuseport.NewReusablePortListener(network, address)
|
||||||
case "quic":
|
case "quic":
|
||||||
if s.Options == nil || s.Options["QuicConfig"] == nil {
|
if s.TLSConfig == nil {
|
||||||
return nil, errors.New("KCP BlockCrypt must be configured in server.Options")
|
return nil, errors.New("KCP BlockCrypt must be configured in server.Options")
|
||||||
}
|
}
|
||||||
ln, err = quicconn.Listen("udp", address, s.Options["QuicConfig"].(*tls.Config))
|
ln, err = quicconn.Listen("udp", address, s.TLSConfig)
|
||||||
default: //tcp, http
|
default: //tcp, http
|
||||||
ln, err = net.Listen(network, address)
|
if s.TLSConfig == nil {
|
||||||
|
ln, err = net.Listen(network, address)
|
||||||
|
} else {
|
||||||
|
ln, err = tls.Listen(network, address, s.TLSConfig)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ln, err
|
return ln, err
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
// +build windows
|
// +build windows
|
||||||
// +build !udp
|
// +build !udp
|
||||||
|
|
||||||
package rpcx
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
|
quicconn "github.com/marten-seemann/quic-conn"
|
||||||
)
|
)
|
||||||
|
|
||||||
// block can be nil if the caller wishes to skip encryption.
|
// block can be nil if the caller wishes to skip encryption.
|
||||||
// tlsConfig can be nil iff we are not using network "quic".
|
// tlsConfig can be nil iff we are not using network "quic".
|
||||||
func makeListener(network, address string) (ln net.Listener, err error) {
|
func (s *Server) makeListener(network, address string) (ln net.Listener, err error) {
|
||||||
switch network {
|
switch network {
|
||||||
case "reuseport":
|
case "reuseport":
|
||||||
if validIP4(address) {
|
if validIP4(address) {
|
||||||
@@ -20,7 +23,10 @@ func makeListener(network, address string) (ln net.Listener, err error) {
|
|||||||
|
|
||||||
ln, err = net.Listen(network, address)
|
ln, err = net.Listen(network, address)
|
||||||
default: //tcp
|
default: //tcp
|
||||||
ln, err = net.Listen(network, address)
|
if s.TLSConfig == nil {
|
||||||
|
return nil, errors.New("KCP BlockCrypt must be configured in server.Options")
|
||||||
|
}
|
||||||
|
ln, err = quicconn.Listen("udp", address, s.TLSConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ln, err
|
return ln, err
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
// +build windows
|
// +build windows
|
||||||
// +build udp
|
// +build udp
|
||||||
|
|
||||||
package rpcx
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
@@ -12,12 +13,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// block can be nil if the caller wishes to skip encryption.
|
// block can be nil if the caller wishes to skip encryption.
|
||||||
// tlsConfig can be nil iff we are not using network "quic".
|
// tlsConfig can be nil if we are not using network "quic".
|
||||||
func makeListener(network, address string) (ln net.Listener, err error) {
|
func (s *Server) makeListener(network, address string) (ln net.Listener, err error) {
|
||||||
switch network {
|
switch network {
|
||||||
case "kcp":
|
case "kcp":
|
||||||
if s.Options == nil || s.Options["BlockCrypt"] == nil {
|
if s.Options == nil || s.Options["BlockCrypt"] == nil {
|
||||||
return errors.New("KCP BlockCrypt must be configured in server.Options")
|
return nil, errors.New("KCP BlockCrypt must be configured in server.Options")
|
||||||
}
|
}
|
||||||
|
|
||||||
ln, err = kcp.ListenWithOptions(address, s.Options["BlockCrypt"].(kcp.BlockCrypt), 10, 3)
|
ln, err = kcp.ListenWithOptions(address, s.Options["BlockCrypt"].(kcp.BlockCrypt), 10, 3)
|
||||||
@@ -30,9 +31,16 @@ func makeListener(network, address string) (ln net.Listener, err error) {
|
|||||||
|
|
||||||
ln, err = net.Listen(network, address)
|
ln, err = net.Listen(network, address)
|
||||||
case "quic":
|
case "quic":
|
||||||
ln, err = quicconn.Listen("udp", address, tlsConfig)
|
if s.TLSConfig == nil {
|
||||||
|
return nil, errors.New("KCP BlockCrypt must be configured in server.Options")
|
||||||
|
}
|
||||||
|
ln, err = quicconn.Listen("udp", address, s.TLSConfig)
|
||||||
default: //tcp
|
default: //tcp
|
||||||
ln, err = net.Listen(network, address)
|
if s.TLSConfig == nil {
|
||||||
|
ln, err = net.Listen(network, address)
|
||||||
|
} else {
|
||||||
|
ln, err = tls.Listen(network, address, s.TLSConfig)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ln, err
|
return ln, err
|
||||||
|
|||||||
@@ -62,7 +62,9 @@ type Server struct {
|
|||||||
inShutdown int32
|
inShutdown int32
|
||||||
onShutdown []func()
|
onShutdown []func()
|
||||||
|
|
||||||
// BlockCrypt for kcp.BlockCrypt, QUICConfig for quic TlsConfig, etc.
|
// TLSConfig for creating tls tcp connection.
|
||||||
|
TLSConfig *tls.Config
|
||||||
|
// BlockCrypt for kcp.BlockCrypt
|
||||||
Options map[string]interface{}
|
Options map[string]interface{}
|
||||||
// // use for KCP
|
// // use for KCP
|
||||||
// KCPConfig KCPConfig
|
// KCPConfig KCPConfig
|
||||||
@@ -82,16 +84,6 @@ func NewServer(options map[string]interface{}) *Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// // KCPConfig is config of KCP.
|
|
||||||
// type KCPConfig struct {
|
|
||||||
// BlockCrypt kcp.BlockCrypt
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // QUICConfig is config of QUIC.
|
|
||||||
// type QUICConfig struct {
|
|
||||||
// TlsConfig *tls.Config
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Address returns listened address.
|
// Address returns listened address.
|
||||||
func (s *Server) Address() net.Addr {
|
func (s *Server) Address() net.Addr {
|
||||||
if s.ln == nil {
|
if s.ln == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user