rule: parse cidr once

This commit is contained in:
nadoo 2017-08-23 21:11:08 +08:00
parent 1b400d984e
commit 6055efa537

11
rule.go
View File

@ -44,11 +44,14 @@ func NewRuleDialer(rules []*RuleConf, gDialer Dialer) *RuleDialer {
rd.ipMap.Store(ip, sd)
}
for _, cidr := range r.CIDR {
for _, s := range r.CIDR {
if _, cidr, err := net.ParseCIDR(s); err == nil {
rd.cidrMap.Store(cidr, sd)
}
}
}
return rd
}
@ -73,14 +76,12 @@ func (p *RuleDialer) NextDialer(dstAddr string) Dialer {
var ret Dialer
// check cidr
// TODO: do not parse cidr every time
p.cidrMap.Range(func(key, value interface{}) bool {
if _, net, err := net.ParseCIDR(key.(string)); err == nil {
if net.Contains(ip) {
cidr := key.(*net.IPNet)
if cidr.Contains(ip) {
ret = value.(Dialer)
return false
}
}
return true
})