| 1234567891011121314151617181920212223242526272829303132333435363738 |
- // +build json
- package dns
- import (
- "encoding/json"
- "errors"
- "net"
- v2net "github.com/v2ray/v2ray-core/common/net"
- )
- func (this *Config) UnmarshalJSON(data []byte) error {
- type JsonConfig struct {
- Servers []v2net.AddressJson `json:"servers"`
- Hosts map[string]v2net.AddressJson `json:"hosts"`
- }
- jsonConfig := new(JsonConfig)
- if err := json.Unmarshal(data, jsonConfig); err != nil {
- return err
- }
- this.NameServers = make([]v2net.Destination, len(jsonConfig.Servers))
- for idx, server := range jsonConfig.Servers {
- this.NameServers[idx] = v2net.UDPDestination(server.Address, v2net.Port(53))
- }
- if jsonConfig.Hosts != nil {
- this.Hosts = make(map[string]net.IP)
- for domain, ip := range jsonConfig.Hosts {
- if ip.Address.Family().IsDomain() {
- return errors.New(ip.Address.String() + " is not an IP.")
- }
- this.Hosts[domain] = ip.Address.IP()
- }
- }
- return nil
- }
|