mirror of
https://github.com/DNSCrypt/dnscrypt-proxy.git
synced 2025-04-04 21:57:44 +03:00
Only find the farthest route on wildcards
This commit is contained in:
parent
0f54b2b34c
commit
1e10251407
1 changed files with 18 additions and 2 deletions
|
@ -323,8 +323,10 @@ func route(proxy *Proxy, name string) (*Relay, error) {
|
|||
if routes == nil {
|
||||
return nil, nil
|
||||
}
|
||||
wildcard := false
|
||||
relayNames, ok := (*routes)[name]
|
||||
if !ok {
|
||||
wildcard = true
|
||||
relayNames, ok = (*routes)["*"]
|
||||
}
|
||||
if !ok {
|
||||
|
@ -338,6 +340,8 @@ func route(proxy *Proxy, name string) (*Relay, error) {
|
|||
for _, registeredServer := range proxy.registeredRelays {
|
||||
relayStamps = append(relayStamps, registeredServer.stamp)
|
||||
}
|
||||
wildcard = true
|
||||
break
|
||||
} else {
|
||||
for _, registeredServer := range proxy.registeredRelays {
|
||||
if registeredServer.name == relayName {
|
||||
|
@ -356,10 +360,22 @@ func route(proxy *Proxy, name string) (*Relay, error) {
|
|||
if len(relayStamps) == 0 {
|
||||
return nil, fmt.Errorf("Empty relay set for [%v]", name)
|
||||
}
|
||||
relayCandidateStamp := findFarthestRoute(proxy, name, relayStamps)
|
||||
var relayCandidateStamp *stamps.ServerStamp
|
||||
if !wildcard || len(relayStamps) == 1 {
|
||||
relayCandidateStamp = &relayStamps[rand.Intn(len(relayStamps))]
|
||||
} else {
|
||||
relayCandidateStamp = findFarthestRoute(proxy, name, relayStamps)
|
||||
}
|
||||
if relayCandidateStamp == nil {
|
||||
return nil, fmt.Errorf("No valid relay for server [%v]", name)
|
||||
}
|
||||
relayName := relayCandidateStamp.ServerAddrStr
|
||||
for _, registeredServer := range proxy.registeredRelays {
|
||||
if registeredServer.stamp.ServerAddrStr == relayCandidateStamp.ServerAddrStr {
|
||||
relayName = registeredServer.name
|
||||
break
|
||||
}
|
||||
}
|
||||
switch relayCandidateStamp.Proto {
|
||||
case stamps.StampProtoTypeDNSCrypt, stamps.StampProtoTypeDNSCryptRelay:
|
||||
relayUDPAddr, err := net.ResolveUDPAddr("udp", relayCandidateStamp.ServerAddrStr)
|
||||
|
@ -370,7 +386,7 @@ func route(proxy *Proxy, name string) (*Relay, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dlog.Noticef("Anonymizing queries for [%v] via [%v]", name, relayCandidateStamp.ServerAddrStr)
|
||||
dlog.Noticef("Anonymizing queries for [%v] via [%v]", name, relayName)
|
||||
return &Relay{Proto: stamps.StampProtoTypeDNSCryptRelay, Dnscrypt: &DNSCryptRelay{RelayUDPAddr: relayUDPAddr, RelayTCPAddr: relayTCPAddr}}, nil
|
||||
case stamps.StampProtoTypeODoHRelay:
|
||||
return &Relay{Proto: stamps.StampProtoTypeODoHRelay, ODoH: &ODoHRelay{}}, nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue