Fix ECH retry support

This commit is contained in:
世界
2025-10-07 13:19:57 +08:00
parent 1f03080540
commit fecdbf20de

View File

@@ -89,20 +89,18 @@ func (d *defaultDialer) dialContext(ctx context.Context, destination M.Socksaddr
return nil, err return nil, err
} }
tlsConn, err := aTLS.ClientHandshake(ctx, conn, d.config) tlsConn, err := aTLS.ClientHandshake(ctx, conn, d.config)
if err == nil { if err != nil {
return tlsConn, nil conn.Close()
}
conn.Close()
if echRetry {
var echErr *tls.ECHRejectionError var echErr *tls.ECHRejectionError
if errors.As(err, &echErr) && len(echErr.RetryConfigList) > 0 { if echRetry && errors.As(err, &echErr) && len(echErr.RetryConfigList) > 0 {
if echConfig, isECH := d.config.(ECHCapableConfig); isECH { if echConfig, isECH := d.config.(ECHCapableConfig); isECH {
echConfig.SetECHConfigList(echErr.RetryConfigList) echConfig.SetECHConfigList(echErr.RetryConfigList)
return d.dialContext(ctx, destination, false)
} }
} }
return d.dialContext(ctx, destination, false) return nil, err
} }
return nil, err return tlsConn, nil
} }
func (d *defaultDialer) Upstream() any { func (d *defaultDialer) Upstream() any {