Clash.Meta/listener/inbound/shadowtls.go
2025-04-22 21:16:56 +08:00

59 lines
2.0 KiB
Go

package inbound
import (
"github.com/metacubex/mihomo/common/utils"
LC "github.com/metacubex/mihomo/listener/config"
)
type ShadowTLS struct {
Enable bool `inbound:"enable"`
Version int `inbound:"version,omitempty"`
Password string `inbound:"password,omitempty"`
Users []ShadowTLSUser `inbound:"users,omitempty"`
Handshake ShadowTLSHandshakeOptions `inbound:"handshake,omitempty"`
HandshakeForServerName map[string]ShadowTLSHandshakeOptions `inbound:"handshake-for-server-name,omitempty"`
StrictMode bool `inbound:"strict-mode,omitempty"`
WildcardSNI string `inbound:"wildcard-sni,omitempty"`
}
type ShadowTLSUser struct {
Name string `inbound:"name,omitempty"`
Password string `inbound:"password,omitempty"`
}
type ShadowTLSHandshakeOptions struct {
Dest string `inbound:"dest"`
Proxy string `inbound:"proxy,omitempty"`
}
func (c ShadowTLS) Build() LC.ShadowTLS {
handshakeForServerName := make(map[string]LC.ShadowTLSHandshakeOptions)
for k, v := range c.HandshakeForServerName {
handshakeForServerName[k] = v.Build()
}
return LC.ShadowTLS{
Enable: c.Enable,
Version: c.Version,
Password: c.Password,
Users: utils.Map(c.Users, ShadowTLSUser.Build),
Handshake: c.Handshake.Build(),
HandshakeForServerName: handshakeForServerName,
StrictMode: c.StrictMode,
WildcardSNI: c.WildcardSNI,
}
}
func (c ShadowTLSUser) Build() LC.ShadowTLSUser {
return LC.ShadowTLSUser{
Name: c.Name,
Password: c.Password,
}
}
func (c ShadowTLSHandshakeOptions) Build() LC.ShadowTLSHandshakeOptions {
return LC.ShadowTLSHandshakeOptions{
Dest: c.Dest,
Proxy: c.Proxy,
}
}