From 5b3e84ede681a2b986a172d9af86fcb2a549a3dd Mon Sep 17 00:00:00 2001 From: v2ray Date: Thu, 10 Dec 2015 22:08:36 +0100 Subject: [PATCH] dns config --- app/dns/config.go | 2 +- app/dns/dns.go | 5 +++-- app/dns/dns_test.go | 2 +- app/dns/json/config.go | 35 +++++++++++++++++++++++++++++++ common/net/json/network.go | 22 ++++++------------- common/serial/json/string_list.go | 21 +++++++++++++++++++ 6 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 app/dns/json/config.go create mode 100644 common/serial/json/string_list.go diff --git a/app/dns/config.go b/app/dns/config.go index e93ac1683..f09395343 100644 --- a/app/dns/config.go +++ b/app/dns/config.go @@ -1,5 +1,5 @@ package dns type CacheConfig interface { - TrustedSource() []string + IsTrustedSource(tag string) bool } diff --git a/app/dns/dns.go b/app/dns/dns.go index 7c06bb8e1..247890b54 100644 --- a/app/dns/dns.go +++ b/app/dns/dns.go @@ -31,10 +31,11 @@ func (this *entry) Extend() { type DnsCache struct { sync.RWMutex - cache map[string]*entry + cache map[string]*entry + config CacheConfig } -func NewCache() *DnsCache { +func NewCache(config CacheConfig) *DnsCache { cache := &DnsCache{ cache: make(map[string]*entry), } diff --git a/app/dns/dns_test.go b/app/dns/dns_test.go index de66ab6b1..be2763915 100644 --- a/app/dns/dns_test.go +++ b/app/dns/dns_test.go @@ -13,7 +13,7 @@ func TestDnsAdd(t *testing.T) { v2testing.Current(t) domain := "v2ray.com" - cache := dns.NewCache() + cache := dns.NewCache(nil) ip := cache.Get(domain) netassert.IP(ip).IsNil() diff --git a/app/dns/json/config.go b/app/dns/json/config.go new file mode 100644 index 000000000..cb60ccbec --- /dev/null +++ b/app/dns/json/config.go @@ -0,0 +1,35 @@ +package json + +import ( + "strings" + + serialjson "github.com/v2ray/v2ray-core/common/serial/json" +) + +type TagList map[string]bool + +func NewTagList(tags []string) TagList { + list := TagList(make(map[string]bool)) + for _, tag := range tags { + list[strings.TrimSpace(tag)] = true + } + return list +} + +func (this *TagList) UnmarshalJSON(data []byte) error { + tags, err := serialjson.UnmarshalStringList(data) + if err != nil { + return err + } + *this = NewTagList(tags) + return nil +} + +type CacheConfig struct { + TrustedTags TagList `json:"trustedTags"` +} + +func (this *CacheConfig) IsTrustedSource(tag string) bool { + _, found := this.TrustedTags[tag] + return found +} diff --git a/common/net/json/network.go b/common/net/json/network.go index e7abe4d47..de990f1ab 100644 --- a/common/net/json/network.go +++ b/common/net/json/network.go @@ -1,11 +1,10 @@ package json import ( - "encoding/json" - "errors" "strings" v2net "github.com/v2ray/v2ray-core/common/net" + serialjson "github.com/v2ray/v2ray-core/common/serial/json" ) type NetworkList []string @@ -19,21 +18,12 @@ func NewNetworkList(networks []string) NetworkList { } func (this *NetworkList) UnmarshalJSON(data []byte) error { - var strList []string - err := json.Unmarshal(data, &strList) - if err == nil { - *this = NewNetworkList(strList) - return nil + strlist, err := serialjson.UnmarshalStringList(data) + if err != nil { + return err } - - var str string - err = json.Unmarshal(data, &str) - if err == nil { - strList := strings.Split(str, ",") - *this = NewNetworkList(strList) - return nil - } - return errors.New("Unknown format of network list: " + string(data)) + *this = NewNetworkList(strlist) + return nil } func (this *NetworkList) HasNetwork(network v2net.Network) bool { diff --git a/common/serial/json/string_list.go b/common/serial/json/string_list.go new file mode 100644 index 000000000..b769020fc --- /dev/null +++ b/common/serial/json/string_list.go @@ -0,0 +1,21 @@ +package json + +import ( + "encoding/json" + "errors" + "strings" +) + +func UnmarshalStringList(data []byte) ([]string, error) { + var strarray []string + if err := json.Unmarshal(data, &strarray); err == nil { + return strarray, nil + } + + var rawstr string + if err := json.Unmarshal(data, &rawstr); err == nil { + strlist := strings.Split(rawstr, ",") + return strlist, nil + } + return nil, errors.New("Unknown format of a string list: " + string(data)) +}