0
0
mirror of https://github.com/XTLS/REALITY.git synced 2025-08-22 22:48:36 +00:00

refactor: add fast exit from DetectPostHandshakeRecordsLens if fingerprint already exists in GlobalPostHandshakeRecordsLens.

This commit is contained in:
jesus 2025-06-16 21:41:30 +04:00
parent 6833ba5445
commit f95e393ceb

View File

@ -17,6 +17,8 @@ var GlobalPostHandshakeRecordsLock sync.Mutex
var GlobalPostHandshakeRecordsLens map[string]map[string][]int var GlobalPostHandshakeRecordsLens map[string]map[string][]int
const networkType = "tcp"
func InitAllRecords(config *Config) { func InitAllRecords(config *Config) {
DetectPostHandshakeRecordsLens(config, "hellochrome_131") // init most used first DetectPostHandshakeRecordsLens(config, "hellochrome_131") // init most used first
for f, _ := range ModernFingerprints { for f, _ := range ModernFingerprints {
@ -25,6 +27,10 @@ func InitAllRecords(config *Config) {
} }
func DetectPostHandshakeRecordsLens(config *Config, fingerprint string) map[string][]int { func DetectPostHandshakeRecordsLens(config *Config, fingerprint string) map[string][]int {
if GlobalPostHandshakeRecordsLens != nil && GlobalPostHandshakeRecordsLens[fingerprint] != nil {
return GlobalPostHandshakeRecordsLens[fingerprint]
}
GlobalPostHandshakeRecordsLock.Lock() GlobalPostHandshakeRecordsLock.Lock()
if GlobalPostHandshakeRecordsLens == nil { if GlobalPostHandshakeRecordsLens == nil {
GlobalPostHandshakeRecordsLens = make(map[string]map[string][]int) GlobalPostHandshakeRecordsLens = make(map[string]map[string][]int)
@ -34,13 +40,13 @@ func DetectPostHandshakeRecordsLens(config *Config, fingerprint string) map[stri
} }
var pending []string var pending []string
for sni := range config.ServerNames { for sni := range config.ServerNames {
if (GlobalPostHandshakeRecordsLens[fingerprint][sni] == nil) { if GlobalPostHandshakeRecordsLens[fingerprint][sni] == nil {
pending = append(pending, sni) pending = append(pending, sni)
} }
} }
GlobalPostHandshakeRecordsLock.Unlock() GlobalPostHandshakeRecordsLock.Unlock()
for _, sni := range pending { for _, sni := range pending {
target, err := net.Dial("tcp", config.Dest) target, err := net.Dial(networkType, config.Dest)
if err != nil { if err != nil {
continue continue
} }