@@ -24,6 +24,11 @@ type ClientConfig struct {
2424 ConfigPath string `toml:"-"`
2525 ProtocolType string `toml:"PROTOCOL_TYPE"`
2626 Domains []string `toml:"DOMAINS"`
27+ LocalDNSEnabled bool `toml:"LOCAL_DNS_ENABLED"`
28+ LocalDNSIP string `toml:"LOCAL_DNS_IP"`
29+ LocalDNSPort int `toml:"LOCAL_DNS_PORT"`
30+ LocalDNSWorkers int `toml:"LOCAL_DNS_WORKERS"`
31+ LocalDNSQueueSize int `toml:"LOCAL_DNS_QUEUE_SIZE"`
2732 ResolverBalancingStrategy int `toml:"RESOLVER_BALANCING_STRATEGY"`
2833 BaseEncodeData bool `toml:"BASE_ENCODE_DATA"`
2934 UploadCompressionType int `toml:"UPLOAD_COMPRESSION_TYPE"`
@@ -47,6 +52,11 @@ func defaultClientConfig() ClientConfig {
4752 return ClientConfig {
4853 ProtocolType : "SOCKS5" ,
4954 Domains : nil ,
55+ LocalDNSEnabled : false ,
56+ LocalDNSIP : "127.0.0.1" ,
57+ LocalDNSPort : 5353 ,
58+ LocalDNSWorkers : 2 ,
59+ LocalDNSQueueSize : 512 ,
5060 ResolverBalancingStrategy : 0 ,
5161 BaseEncodeData : false ,
5262 UploadCompressionType : compression .TypeOff ,
@@ -99,6 +109,19 @@ func LoadClientConfig(filename string) (ClientConfig, error) {
99109 if cfg .DataEncryptionMethod < 0 || cfg .DataEncryptionMethod > 5 {
100110 return cfg , fmt .Errorf ("invalid DATA_ENCRYPTION_METHOD: %d" , cfg .DataEncryptionMethod )
101111 }
112+ cfg .LocalDNSIP = strings .TrimSpace (cfg .LocalDNSIP )
113+ if cfg .LocalDNSIP == "" {
114+ cfg .LocalDNSIP = "127.0.0.1"
115+ }
116+ if cfg .LocalDNSPort < 0 || cfg .LocalDNSPort > 65535 {
117+ return cfg , fmt .Errorf ("invalid LOCAL_DNS_PORT: %d" , cfg .LocalDNSPort )
118+ }
119+ if cfg .LocalDNSWorkers < 1 {
120+ cfg .LocalDNSWorkers = 1
121+ }
122+ if cfg .LocalDNSQueueSize < 1 {
123+ cfg .LocalDNSQueueSize = 512
124+ }
102125 if cfg .UploadCompressionType < compression .TypeOff || cfg .UploadCompressionType > compression .TypeZLIB {
103126 return cfg , fmt .Errorf ("invalid UPLOAD_COMPRESSION_TYPE: %d" , cfg .UploadCompressionType )
104127 }
0 commit comments