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
|
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