mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-11-14 11:03:02 +00:00
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, ", ")
|
||
|
}
|