common.utls.client_hello_id.go Maven / Gradle / Ivy
package utls
import (
"errors"
utls "github.com/refraction-networking/utls"
"strings"
)
// ported from https://github.com/max-b/snowflake/commit/9dded063cb74c6941a16ad90b9dd0e06e618e55e
var clientHelloIDMap = map[string]utls.ClientHelloID{
// No HelloCustom: not useful for external configuration.
// No HelloRandomized: doesn't negotiate consistent ALPN.
"hellorandomizedalpn": utls.HelloRandomizedALPN,
"hellorandomizednoalpn": utls.HelloRandomizedNoALPN,
"hellofirefox_auto": utls.HelloFirefox_Auto,
"hellofirefox_55": utls.HelloFirefox_55,
"hellofirefox_56": utls.HelloFirefox_56,
"hellofirefox_63": utls.HelloFirefox_63,
"hellofirefox_65": utls.HelloFirefox_65,
"hellochrome_auto": utls.HelloChrome_Auto,
"hellochrome_58": utls.HelloChrome_58,
"hellochrome_62": utls.HelloChrome_62,
"hellochrome_70": utls.HelloChrome_70,
"hellochrome_72": utls.HelloChrome_72,
"helloios_auto": utls.HelloIOS_Auto,
"helloios_11_1": utls.HelloIOS_11_1,
"helloios_12_1": utls.HelloIOS_12_1,
}
var errNameNotFound = errors.New("client hello name is unrecognized")
func NameToUTLSID(name string) (utls.ClientHelloID, error) {
normalizedName := strings.ToLower(name)
if id, ok := clientHelloIDMap[normalizedName]; ok {
return id, nil
}
return utls.ClientHelloID{}, errNameNotFound
}