From 625de563d0b967253854d284c1918d032f9fddea Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Wed, 30 Jan 2013 15:55:50 +0100 Subject: [PATCH] Convert an RR to its unknown representation --- dns.go | 17 +++++++++++++++++ dns_test.go | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/dns.go b/dns.go index a5c39ebe..4c54f848 100644 --- a/dns.go +++ b/dns.go @@ -207,3 +207,20 @@ func zoneMatch(pattern, zone string) (ok bool) { } return } + +// ToRFC3597 converts a known RR to the unknown RR representation +func ToRFC3597(r RR) *RFC3597 { + buf := make([]byte, r.Len()*2) + off, err := PackStruct(r, buf, 0) + if err != nil { + return nil + } + buf = buf[:off] + rawSetRdlength(buf, 0, off) + u := new(RFC3597) + _, err = UnpackStruct(u, buf, 0) + if err != nil { + return nil + } + return u +} diff --git a/dns_test.go b/dns_test.go index 28f9c564..528ba52b 100644 --- a/dns_test.go +++ b/dns_test.go @@ -152,3 +152,11 @@ func TestCompressLenght(t *testing.T) { t.Fatalf("Should be equal") } } + +func TestToRFC3597(t *testing.T) { + a, _ := NewRR("miek.nl. IN A 10.0.1.1") + x := ToRFC3597(a) + if x.String() != `miek.nl. 3600 IN A \# 4 0a000101` { + t.Fail() + } +}