mirror of https://github.com/XTLS/Xray-core
				
				
				
			
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
package log
 | 
						|
 | 
						|
import (
 | 
						|
	"net"
 | 
						|
	"strings"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
type DNSLog struct {
 | 
						|
	Server  string
 | 
						|
	Domain  string
 | 
						|
	Result  []net.IP
 | 
						|
	Status  dnsStatus
 | 
						|
	Elapsed time.Duration
 | 
						|
	Error   error
 | 
						|
}
 | 
						|
 | 
						|
func (l *DNSLog) String() string {
 | 
						|
	builder := &strings.Builder{}
 | 
						|
 | 
						|
	// Server got answer: domain -> [ip1, ip2] 23ms
 | 
						|
	builder.WriteString(l.Server)
 | 
						|
	builder.WriteString(" ")
 | 
						|
	builder.WriteString(string(l.Status))
 | 
						|
	builder.WriteString(" ")
 | 
						|
	builder.WriteString(l.Domain)
 | 
						|
	builder.WriteString(" -> [")
 | 
						|
	builder.WriteString(joinNetIP(l.Result))
 | 
						|
	builder.WriteString("]")
 | 
						|
 | 
						|
	if l.Elapsed > 0 {
 | 
						|
		builder.WriteString(" ")
 | 
						|
		builder.WriteString(l.Elapsed.String())
 | 
						|
	}
 | 
						|
	if l.Error != nil {
 | 
						|
		builder.WriteString(" <")
 | 
						|
		builder.WriteString(l.Error.Error())
 | 
						|
		builder.WriteString(">")
 | 
						|
	}
 | 
						|
	return builder.String()
 | 
						|
}
 | 
						|
 | 
						|
type dnsStatus string
 | 
						|
 | 
						|
var (
 | 
						|
	DNSQueried  = dnsStatus("got answer:")
 | 
						|
	DNSCacheHit = dnsStatus("cache HIT:")
 | 
						|
)
 | 
						|
 | 
						|
func joinNetIP(ips []net.IP) string {
 | 
						|
	if len(ips) == 0 {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	sips := make([]string, 0, len(ips))
 | 
						|
	for _, ip := range ips {
 | 
						|
		sips = append(sips, ip.String())
 | 
						|
	}
 | 
						|
	return strings.Join(sips, ", ")
 | 
						|
}
 |