This commit is contained in:
parent
588e83131a
commit
a6ad95f299
27
rr.go
27
rr.go
|
@ -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
32
rr_test.go
Normal 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())
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue