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, ", ")
|
|
}
|