mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-05-25 19:38:07 +08:00
36 lines
884 B
Go
36 lines
884 B
Go
|
package ech
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/metacubex/mihomo/component/resolver"
|
||
|
tlsC "github.com/metacubex/mihomo/component/tls"
|
||
|
)
|
||
|
|
||
|
type Config struct {
|
||
|
EncryptedClientHelloConfigList []byte
|
||
|
}
|
||
|
|
||
|
func (cfg *Config) ClientHandle(ctx context.Context, tlsConfig *tlsC.Config) (err error) {
|
||
|
if cfg == nil {
|
||
|
return nil
|
||
|
}
|
||
|
echConfigList := cfg.EncryptedClientHelloConfigList
|
||
|
if len(echConfigList) == 0 {
|
||
|
echConfigList, err = resolver.ResolveECH(ctx, tlsConfig.ServerName)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("resolve ECH config error: %w", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
tlsConfig.EncryptedClientHelloConfigList = echConfigList
|
||
|
if tlsConfig.MinVersion != 0 && tlsConfig.MinVersion < tlsC.VersionTLS13 {
|
||
|
tlsConfig.MinVersion = tlsC.VersionTLS13
|
||
|
}
|
||
|
if tlsConfig.MaxVersion != 0 && tlsConfig.MaxVersion < tlsC.VersionTLS13 {
|
||
|
tlsConfig.MaxVersion = tlsC.VersionTLS13
|
||
|
}
|
||
|
return nil
|
||
|
}
|