Fix: dns fallback logic
This commit is contained in:
parent
ad551c1e30
commit
eb3be06859
2 changed files with 3 additions and 4 deletions
|
@ -14,7 +14,7 @@ type geoipFilter struct{}
|
||||||
|
|
||||||
func (gf *geoipFilter) Match(ip net.IP) bool {
|
func (gf *geoipFilter) Match(ip net.IP) bool {
|
||||||
record, _ := mmdb.Instance().Country(ip)
|
record, _ := mmdb.Instance().Country(ip)
|
||||||
return record.Country.IsoCode == "CN" || record.Country.IsoCode == ""
|
return record.Country.IsoCode != "CN" && record.Country.IsoCode != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
type ipnetFilter struct {
|
type ipnetFilter struct {
|
||||||
|
|
|
@ -197,8 +197,7 @@ func (r *Resolver) fallbackExchange(m *D.Msg) (msg *D.Msg, err error) {
|
||||||
res := <-msgCh
|
res := <-msgCh
|
||||||
if res.Error == nil {
|
if res.Error == nil {
|
||||||
if ips := r.msgToIP(res.Msg); len(ips) != 0 {
|
if ips := r.msgToIP(res.Msg); len(ips) != 0 {
|
||||||
if r.shouldFallback(ips[0]) {
|
if !r.shouldFallback(ips[0]) {
|
||||||
go func() { <-fallbackMsg }()
|
|
||||||
msg = res.Msg
|
msg = res.Msg
|
||||||
err = res.Error
|
err = res.Error
|
||||||
return msg, err
|
return msg, err
|
||||||
|
@ -258,7 +257,7 @@ func (r *Resolver) msgToIP(msg *D.Msg) []net.IP {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Resolver) asyncExchange(client []dnsClient, msg *D.Msg) <-chan *result {
|
func (r *Resolver) asyncExchange(client []dnsClient, msg *D.Msg) <-chan *result {
|
||||||
ch := make(chan *result)
|
ch := make(chan *result, 1)
|
||||||
go func() {
|
go func() {
|
||||||
res, err := r.batchExchange(client, msg)
|
res, err := r.batchExchange(client, msg)
|
||||||
ch <- &result{Msg: res, Error: err}
|
ch <- &result{Msg: res, Error: err}
|
||||||
|
|
Loading…
Reference in a new issue