mirror of https://github.com/v2ray/v2ray-core
				
				
				
			Log matched rules and DNS to use during priority matching
2. Dotless domain support in static host & modify first letter's captial in logpull/2714/head
							parent
							
								
									dfeaef75e7
								
							
						
					
					
						commit
						22b4e68a2d
					
				| 
						 | 
				
			
			@ -6,6 +6,7 @@ package dns
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strings"
 | 
			
		||||
| 
						 | 
				
			
			@ -370,6 +371,16 @@ func (s *Server) lookupIPInternal(domain string, option IPOption) ([]net.IP, err
 | 
			
		|||
	var matchedClient Client
 | 
			
		||||
	if s.domainMatcher != nil {
 | 
			
		||||
		indices := s.domainMatcher.Match(domain)
 | 
			
		||||
		domainRules := []string{}
 | 
			
		||||
		matchingDNS := []string{}
 | 
			
		||||
		for _, idx := range indices {
 | 
			
		||||
			info := s.matcherInfos[idx]
 | 
			
		||||
			rule := s.domainRules[info.clientIdx][info.domainRuleIdx]
 | 
			
		||||
			domainRules = append(domainRules, fmt.Sprintf("%s(DNS idx:%d)", rule, info.clientIdx))
 | 
			
		||||
			matchingDNS = append(matchingDNS, s.clients[info.clientIdx].Name())
 | 
			
		||||
		}
 | 
			
		||||
		newError("domain ", domain, " matching following rules: ", domainRules).AtDebug().WriteToLog()
 | 
			
		||||
		newError("domain ", domain, " uses following DNS first: ", matchingDNS).AtDebug().WriteToLog()
 | 
			
		||||
		for _, idx := range indices {
 | 
			
		||||
			clientIdx := int(s.matcherInfos[idx].clientIdx)
 | 
			
		||||
			matchedClient = s.clients[clientIdx]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -191,6 +191,19 @@ func (c *DnsConfig) Build() (*dns.Config, error) {
 | 
			
		|||
				mapping.Type = dns.DomainMatchingType_Full
 | 
			
		||||
				mapping.Domain = domain[5:]
 | 
			
		||||
 | 
			
		||||
				mappings = append(mappings, mapping)
 | 
			
		||||
			} else if strings.HasPrefix(domain, "dotless:") {
 | 
			
		||||
				mapping := getHostMapping(addr)
 | 
			
		||||
				mapping.Type = dns.DomainMatchingType_Regex
 | 
			
		||||
				switch substr := domain[8:]; {
 | 
			
		||||
				case substr == "":
 | 
			
		||||
					mapping.Domain = "^[^.]*$"
 | 
			
		||||
				case !strings.Contains(substr, "."):
 | 
			
		||||
					mapping.Domain = "^[^.]*" + substr + "[^.]*$"
 | 
			
		||||
				default:
 | 
			
		||||
					return nil, newError("substr in dotless rule should not contain a dot: ", substr)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				mappings = append(mappings, mapping)
 | 
			
		||||
			} else if strings.HasPrefix(domain, "ext:") {
 | 
			
		||||
				kv := strings.Split(domain[4:], ":")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -307,7 +307,7 @@ func parseDomainRule(domain string) ([]*router.Domain, error) {
 | 
			
		|||
		case !strings.Contains(substr, "."):
 | 
			
		||||
			domainRule.Value = "^[^.]*" + substr + "[^.]*$"
 | 
			
		||||
		default:
 | 
			
		||||
			return nil, newError("Substr in dotless rule should not contain a dot: ", substr)
 | 
			
		||||
			return nil, newError("substr in dotless rule should not contain a dot: ", substr)
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		domainRule.Type = router.Domain_Plain
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue