RRSet encode/decode
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-06-15 11:59:49 +02:00
parent 588e83131a
commit a6ad95f299
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
2 changed files with 59 additions and 0 deletions

27
rr.go
View file

@ -119,3 +119,30 @@ func (s RRSet) OnlyTypes(allow ...uint16) (result RRSet) {
return
}
func (s RRSet) Encode() (result []byte, err error) {
var off int
for _, rr := range s {
buf := make([]byte, dns.Len(rr))
off, err = dns.PackRR(rr, buf, 0, nil, false)
if err != nil {
return nil, err
}
result = append(result, buf[:off]...)
}
return result, nil
}
func DecodeRRSet(buf []byte) (result RRSet, err error) {
for len(buf) > 0 {
rr, off, err := dns.UnpackRR(buf, 0)
if err != nil {
return nil, err
}
buf = buf[off:]
result = append(result, rr)
}
return result, nil
}

32
rr_test.go Normal file
View file

@ -0,0 +1,32 @@
package dns_api
import (
"net"
"testing"
)
func TestDecodeEncode(t *testing.T) {
zone := NewZoneFromPrivateKey(testZone, DecodeTorPrivateKey(testPrivateKey))
zone.AddRecordTXT("@", []string{"test"}, 3600)
zone.AddRecordA("test", net.IPv4(1, 2, 3, 4), 3600)
t.Logf("encoded:")
for _, rr := range zone.GetRRSet() {
t.Logf(" %s\n", rr.String())
}
buf, err := zone.GetRRSet().Encode()
if err != nil {
t.Error(err)
}
rrset, err := DecodeRRSet(buf)
if err != nil {
t.Error(err)
}
t.Logf("decoded:")
for _, rr := range rrset {
t.Logf(" %s\n", rr.String())
}
}