Add multiple server names and multi-user support for shadowtls

This commit is contained in:
世界
2023-02-21 16:07:08 +08:00
parent 611d6bbfc5
commit 23e8d282a3
9 changed files with 106 additions and 27 deletions

View File

@@ -10,6 +10,7 @@ import (
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option"
"github.com/sagernet/sing-shadowtls"
"github.com/sagernet/sing/common"
N "github.com/sagernet/sing/common/network"
)
@@ -31,13 +32,29 @@ func NewShadowTLS(ctx context.Context, router adapter.Router, logger log.Context
},
}
var handshakeForServerName map[string]shadowtls.HandshakeConfig
if options.Version > 1 {
handshakeForServerName = make(map[string]shadowtls.HandshakeConfig)
for serverName, serverOptions := range options.HandshakeForServerName {
handshakeForServerName[serverName] = shadowtls.HandshakeConfig{
Server: serverOptions.ServerOptions.Build(),
Dialer: dialer.New(router, serverOptions.DialerOptions),
}
}
}
service, err := shadowtls.NewService(shadowtls.ServiceConfig{
Version: options.Version,
Password: options.Password,
HandshakeServer: options.Handshake.ServerOptions.Build(),
HandshakeDialer: dialer.New(router, options.Handshake.DialerOptions),
Handler: inbound.upstreamContextHandler(),
Logger: logger,
Version: options.Version,
Password: options.Password,
Users: common.Map(options.Users, func(it option.ShadowTLSUser) shadowtls.User {
return (shadowtls.User)(it)
}),
Handshake: shadowtls.HandshakeConfig{
Server: options.Handshake.ServerOptions.Build(),
Dialer: dialer.New(router, options.Handshake.DialerOptions),
},
HandshakeForServerName: handshakeForServerName,
Handler: inbound.upstreamContextHandler(),
Logger: logger,
})
if err != nil {
return nil, err