diff --git a/zscan_rr.go b/zscan_rr.go index 1ad8dc9c..7cf71159 100644 --- a/zscan_rr.go +++ b/zscan_rr.go @@ -37,6 +37,12 @@ func setRR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { case TypeMD: r, e = setMD(h, c, o, f) goto Slurp + case TypeMG: + r, e = setMG(h, c, o, f) + goto Slurp + case TypeRT: + r, e = setRT(h, c, o, f) + goto Slurp case TypeAFSDB: r, e = setAFSDB(h, c, o, f) goto Slurp @@ -349,6 +355,29 @@ func setMX(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { return rr, nil } +func setRT(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { + rr := new(RR_RT) + rr.Hdr = h + + l := <-c + if i, e := strconv.Atoi(l.token); e != nil { + return nil, &ParseError{f, "bad RT Preference", l} + } else { + rr.Preference = uint16(i) + } + <-c // _BLANK + l = <-c // _STRING + rr.Host = l.token + _, ld, ok := IsDomainName(l.token) + if !ok { + return nil, &ParseError{f, "bad RT Host", l} + } + if rr.Host[ld-1] != '.' { + rr.Host= appendOrigin(rr.Host, o) + } + return rr, nil +} + func setAFSDB(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { rr := new(RR_AFSDB) rr.Hdr = h