Add NINFO record

This commit is contained in:
Miek Gieben 2012-11-20 16:42:16 +01:00
parent f7956a96e6
commit 3686d24ca7
3 changed files with 79 additions and 0 deletions

1
msg.go
View File

@ -120,6 +120,7 @@ var Rr_str = map[uint16]string{
TypeDS: "DS",
TypeDHCID: "DHCID",
TypeHIP: "HIP",
TypeNINFO: "NINFO",
TypeIPSECKEY: "IPSECKEY",
TypeSSHFP: "SSHFP",
TypeRRSIG: "RRSIG",

View File

@ -63,6 +63,7 @@ const (
TypeNSEC3PARAM uint16 = 51
TypeTLSA uint16 = 52
TypeHIP uint16 = 55
TypeNINFO uint16 = 56
TypeTALINK uint16 = 58
TypeSPF uint16 = 99
TypeNID uint16 = 104
@ -1371,6 +1372,39 @@ func (rr *RR_HIP) Copy() RR {
return &RR_HIP{*rr.Hdr.CopyHeader(), rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, rr.RendezvousServers}
}
type RR_NINFO struct {
Hdr RR_Header
ZSData []string `dns:"txt"`
}
func (rr *RR_NINFO) Header() *RR_Header {
return &rr.Hdr
}
func (rr *RR_NINFO) String() string {
s := rr.Hdr.String()
for i, s1 := range rr.ZSData {
if i > 0 {
s += " " + strconv.QuoteToASCII(s1)
} else {
s += strconv.QuoteToASCII(s1)
}
}
return s
}
func (rr *RR_NINFO) Len() int {
l := rr.Hdr.Len()
for _, t := range rr.ZSData {
l += len(t)
}
return l
}
func (rr *RR_NINFO) Copy() RR {
return &RR_NINFO{*rr.Hdr.CopyHeader(), rr.ZSData}
}
type RR_WKS struct {
Hdr RR_Header
Address net.IP `dns:"a"`

View File

@ -118,6 +118,8 @@ func setRR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
return setTLSA(h, c, f)
case TypeTXT:
return setTXT(h, c, f)
case TypeNINFO:
return setNINFO(h, c, f)
case TypeHIP:
return setHIP(h, c, o, f)
case TypeSPF:
@ -1632,6 +1634,48 @@ func setTXT(h RR_Header, c chan lex, f string) (RR, *ParseError) {
return rr, nil
}
// identical to setTXT
func setNINFO(h RR_Header, c chan lex, f string) (RR, *ParseError) {
rr := new(RR_NINFO)
rr.Hdr = h
// Get the remaining data until we see a NEWLINE
quote := false
l := <-c
var s []string
switch l.value == _QUOTE {
case true: // A number of quoted string
s = make([]string, 0)
for l.value != _NEWLINE && l.value != _EOF {
switch l.value {
case _STRING:
s = append(s, l.token)
case _BLANK:
if quote {
// _BLANK can only be seen in between txt parts.
return nil, &ParseError{f, "bad NINFO ZSData", l}
}
case _QUOTE:
quote = !quote
default:
return nil, &ParseError{f, "bad NINFO ZSData", l}
}
l = <-c
}
if quote {
return nil, &ParseError{f, "bad NINFO ZSData", l}
}
case false: // Unquoted text record
s = make([]string, 1)
for l.value != _NEWLINE && l.value != _EOF {
s[0] += l.token
l = <-c
}
}
rr.ZSData = s
return rr, nil
}
func setURI(h RR_Header, c chan lex, f string) (RR, *ParseError) {
rr := new(RR_URI)
rr.Hdr = h