Expose TypeToRR

This commit is contained in:
Filippo Valsorda 2015-10-16 17:01:49 +01:00
parent dfefa36553
commit 023972bb19
5 changed files with 17 additions and 17 deletions

View File

@ -428,7 +428,7 @@ func TestToRFC3597(t *testing.T) {
func TestNoRdataPack(t *testing.T) { func TestNoRdataPack(t *testing.T) {
data := make([]byte, 1024) data := make([]byte, 1024)
for typ, fn := range typeToRR { for typ, fn := range TypeToRR {
r := fn() r := fn()
*r.Header() = RR_Header{Name: "miek.nl.", Rrtype: typ, Class: ClassINET, Ttl: 3600} *r.Header() = RR_Header{Name: "miek.nl.", Rrtype: typ, Class: ClassINET, Ttl: 3600}
_, err := PackRR(r, data, 0, nil, false) _, err := PackRR(r, data, 0, nil, false)
@ -441,7 +441,7 @@ func TestNoRdataPack(t *testing.T) {
// TODO(miek): fix dns buffer too small errors this throws // TODO(miek): fix dns buffer too small errors this throws
func TestNoRdataUnpack(t *testing.T) { func TestNoRdataUnpack(t *testing.T) {
data := make([]byte, 1024) data := make([]byte, 1024)
for typ, fn := range typeToRR { for typ, fn := range TypeToRR {
if typ == TypeSOA || typ == TypeTSIG || typ == TypeWKS { if typ == TypeSOA || typ == TypeTSIG || typ == TypeWKS {
// SOA, TSIG will not be seen (like this) in dyn. updates? // SOA, TSIG will not be seen (like this) in dyn. updates?
// WKS is an bug, but...deprecated record. // WKS is an bug, but...deprecated record.

2
msg.go
View File

@ -1383,7 +1383,7 @@ func UnpackRR(msg []byte, off int) (rr RR, off1 int, err error) {
} }
end := off + int(h.Rdlength) end := off + int(h.Rdlength)
// make an rr of that type and re-unpack. // make an rr of that type and re-unpack.
mk, known := typeToRR[h.Rrtype] mk, known := TypeToRR[h.Rrtype]
if !known { if !known {
rr = new(RFC3597) rr = new(RFC3597)
} else { } else {

View File

@ -33,7 +33,7 @@ type PrivateRR struct {
func mkPrivateRR(rrtype uint16) *PrivateRR { func mkPrivateRR(rrtype uint16) *PrivateRR {
// Panics if RR is not an instance of PrivateRR. // Panics if RR is not an instance of PrivateRR.
rrfunc, ok := typeToRR[rrtype] rrfunc, ok := TypeToRR[rrtype]
if !ok { if !ok {
panic(fmt.Sprintf("dns: invalid operation with Private RR type %d", rrtype)) panic(fmt.Sprintf("dns: invalid operation with Private RR type %d", rrtype))
} }
@ -43,7 +43,7 @@ func mkPrivateRR(rrtype uint16) *PrivateRR {
case *PrivateRR: case *PrivateRR:
return rr return rr
} }
panic(fmt.Sprintf("dns: RR is not a PrivateRR, typeToRR[%d] generator returned %T", rrtype, anyrr)) panic(fmt.Sprintf("dns: RR is not a PrivateRR, TypeToRR[%d] generator returned %T", rrtype, anyrr))
} }
// Header return the RR header of r. // Header return the RR header of r.
@ -71,7 +71,7 @@ func (r *PrivateRR) copy() RR {
func PrivateHandle(rtypestr string, rtype uint16, generator func() PrivateRdata) { func PrivateHandle(rtypestr string, rtype uint16, generator func() PrivateRdata) {
rtypestr = strings.ToUpper(rtypestr) rtypestr = strings.ToUpper(rtypestr)
typeToRR[rtype] = func() RR { return &PrivateRR{RR_Header{}, generator()} } TypeToRR[rtype] = func() RR { return &PrivateRR{RR_Header{}, generator()} }
TypeToString[rtype] = rtypestr TypeToString[rtype] = rtypestr
StringToType[rtypestr] = rtype StringToType[rtypestr] = rtype
@ -108,7 +108,7 @@ func PrivateHandle(rtypestr string, rtype uint16, generator func() PrivateRdata)
func PrivateHandleRemove(rtype uint16) { func PrivateHandleRemove(rtype uint16) {
rtypestr, ok := TypeToString[rtype] rtypestr, ok := TypeToString[rtype]
if ok { if ok {
delete(typeToRR, rtype) delete(TypeToRR, rtype)
delete(TypeToString, rtype) delete(TypeToString, rtype)
delete(typeToparserFunc, rtype) delete(typeToparserFunc, rtype)
delete(StringToType, rtypestr) delete(StringToType, rtypestr)

View File

@ -2,7 +2,7 @@
// types_generate.go is meant to run with go generate. It will use // types_generate.go is meant to run with go generate. It will use
// go/{importer,types} to track down all the RR struct types. Then for each type // go/{importer,types} to track down all the RR struct types. Then for each type
// it will generate conversion tables (typeToRR and TypeToString) and banal // it will generate conversion tables (TypeToRR and TypeToString) and banal
// methods (len, Header, copy) based on the struct tags. The generated source is // methods (len, Header, copy) based on the struct tags. The generated source is
// written to ztypes.go, and is meant to be checked into git. // written to ztypes.go, and is meant to be checked into git.
package main package main
@ -40,16 +40,16 @@ import (
` `
var typeToRR = template.Must(template.New("typeToRR").Parse(` var TypeToRR = template.Must(template.New("TypeToRR").Parse(`
// Map of constructors for each RR type. // TypeToRR is a map of constructors for each RR type.
var typeToRR = map[uint16]func() RR{ var TypeToRR = map[uint16]func() RR{
{{range .}}{{if ne . "RFC3597"}} Type{{.}}: func() RR { return new({{.}}) }, {{range .}}{{if ne . "RFC3597"}} Type{{.}}: func() RR { return new({{.}}) },
{{end}}{{end}} } {{end}}{{end}} }
`)) `))
var typeToString = template.Must(template.New("typeToString").Parse(` var typeToString = template.Must(template.New("typeToString").Parse(`
// TypeToString is a map of strings for each RR wire type. // TypeToString is a map of strings for each RR type.
var TypeToString = map[uint16]string{ var TypeToString = map[uint16]string{
{{range .}}{{if ne . "NSAPPTR"}} Type{{.}}: "{{.}}", {{range .}}{{if ne . "NSAPPTR"}} Type{{.}}: "{{.}}",
{{end}}{{end}} TypeNSAPPTR: "NSAP-PTR", {{end}}{{end}} TypeNSAPPTR: "NSAP-PTR",
@ -136,8 +136,8 @@ func main() {
b := &bytes.Buffer{} b := &bytes.Buffer{}
b.WriteString(packageHdr) b.WriteString(packageHdr)
// Generate typeToRR // Generate TypeToRR
fatalIfErr(typeToRR.Execute(b, namedTypes)) fatalIfErr(TypeToRR.Execute(b, namedTypes))
// Generate typeToString // Generate typeToString
fatalIfErr(typeToString.Execute(b, numberedTypes)) fatalIfErr(typeToString.Execute(b, numberedTypes))

View File

@ -8,8 +8,8 @@ import (
"net" "net"
) )
// Map of constructors for each RR type. // TypeToRR is a map of constructors for each RR type.
var typeToRR = map[uint16]func() RR{ var TypeToRR = map[uint16]func() RR{
TypeA: func() RR { return new(A) }, TypeA: func() RR { return new(A) },
TypeAAAA: func() RR { return new(AAAA) }, TypeAAAA: func() RR { return new(AAAA) },
TypeAFSDB: func() RR { return new(AFSDB) }, TypeAFSDB: func() RR { return new(AFSDB) },
@ -80,7 +80,7 @@ var typeToRR = map[uint16]func() RR{
TypeX25: func() RR { return new(X25) }, TypeX25: func() RR { return new(X25) },
} }
// TypeToString is a map of strings for each RR wire type. // TypeToString is a map of strings for each RR type.
var TypeToString = map[uint16]string{ var TypeToString = map[uint16]string{
TypeA: "A", TypeA: "A",
TypeAAAA: "AAAA", TypeAAAA: "AAAA",