dae/control/dns_utils.go
2024-01-04 17:28:16 +08:00

50 lines
962 B
Go

/*
* SPDX-License-Identifier: AGPL-3.0-only
* Copyright (c) 2022-2024, daeuniverse Organization <dae@v2raya.org>
*/
package control
import (
"fmt"
"strconv"
"strings"
dnsmessage "github.com/miekg/dns"
)
type RscWrapper struct {
Rsc dnsmessage.RR
}
func (w RscWrapper) String() string {
var strBody string
switch body := w.Rsc.(type) {
case *dnsmessage.A:
strBody = body.A.String()
case *dnsmessage.AAAA:
strBody = body.AAAA.String()
case *dnsmessage.CNAME:
strBody = body.Target
default:
strBody = body.String()
}
return fmt.Sprintf("%v(%v): %v", w.Rsc.Header().Name, QtypeToString(w.Rsc.Header().Rrtype), strBody)
}
func FormatDnsRsc(ans []dnsmessage.RR) string {
var w []string
for _, a := range ans {
w = append(w, RscWrapper{Rsc: a}.String())
}
return strings.Join(w, "; ")
}
func QtypeToString(qtype uint16) string {
str, ok := dnsmessage.TypeToString[qtype]
if !ok {
str = strconv.Itoa(int(qtype))
}
return str
}