Add NINFO record
This commit is contained in:
parent
f7956a96e6
commit
3686d24ca7
1
msg.go
1
msg.go
|
@ -120,6 +120,7 @@ var Rr_str = map[uint16]string{
|
|||
TypeDS: "DS",
|
||||
TypeDHCID: "DHCID",
|
||||
TypeHIP: "HIP",
|
||||
TypeNINFO: "NINFO",
|
||||
TypeIPSECKEY: "IPSECKEY",
|
||||
TypeSSHFP: "SSHFP",
|
||||
TypeRRSIG: "RRSIG",
|
||||
|
|
34
types.go
34
types.go
|
@ -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"`
|
||||
|
|
44
zscan_rr.go
44
zscan_rr.go
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue