Update the documentation

This commit is contained in:
Miek Gieben 2011-02-24 16:13:23 +01:00
parent 71b860e0d3
commit 77348913dd
4 changed files with 34 additions and 27 deletions

View File

@ -6,7 +6,7 @@ import (
"os"
"flag"
"fmt"
"strconv"
"strconv"
"strings"
)
@ -18,7 +18,7 @@ func main() {
var cd *bool = flag.Bool("cd", false, "Set CD flag in query")
var rd *bool = flag.Bool("rd", true, "Unset RD flag in query")
var tcp *bool = flag.Bool("tcp", false, "TCP mode")
var nsid *bool = flag.Bool("nsid", false, "Ask for the NSID")
var nsid *bool = flag.Bool("nsid", false, "Ask for the NSID")
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: %s [@server] [qtype] [qclass] [name ...]\n", os.Args[0])
flag.PrintDefaults()
@ -38,7 +38,7 @@ Flags:
nameserver = flag.Arg(i)
continue Flags
}
// First class, then type, to make ANY queries possible
// First class, then type, to make ANY queries possible
// And if it looks like type, it is a type
for k, v := range dns.Rr_str {
if v == strings.ToUpper(flag.Arg(i)) {
@ -53,20 +53,20 @@ Flags:
continue Flags
}
}
// If it starts with TYPExxx it is unknown rr
if strings.HasPrefix(flag.Arg(i), "TYPE") {
i, e := strconv.Atoi(string( []byte(flag.Arg(i))[4:]))
if e == nil {
qtype = uint16(i)
continue Flags
}
}
// If it starts with TYPExxx it is unknown rr
if strings.HasPrefix(flag.Arg(i), "TYPE") {
i, e := strconv.Atoi(string([]byte(flag.Arg(i))[4:]))
if e == nil {
qtype = uint16(i)
continue Flags
}
}
// Anything else is a qname
qname = append(qname, flag.Arg(i))
}
r := new(dns.Resolver)
r.FromFile("/etc/resolv.conf")
r.FromFile("/etc/resolv.conf")
r.Timeout = 2
r.Port = *port
r.Tcp = *tcp
@ -93,27 +93,25 @@ Flags:
opt.SetVersion(0)
opt.SetDo()
opt.SetUDPSize(dns.DefaultMsgSize)
if *nsid {
opt.Option = make([]dns.Option, 1)
opt.Option[0].Code = dns.OptionCodeNSID
opt.Option[0].Data = ""
}
if *nsid {
opt.SetNsid("")
}
m.Extra = make([]dns.RR, 1)
m.Extra[0] = opt
}
for _, v := range qname {
m.Question[0] = dns.Question{v, qtype, qclass}
m.SetId()
in, err := r.Query(m)
m.SetId()
in, err := r.Query(m)
if in != nil {
if m.Id != in.Id {
fmt.Printf("Id mismatch\n")
}
if m.Id != in.Id {
fmt.Printf("Id mismatch\n")
}
fmt.Printf("%v\n", in)
} else {
fmt.Printf("%v\n", err.String())
}
fmt.Printf("%v\n", err.String())
}
}
}
/*

2
dns.go
View File

@ -113,7 +113,7 @@ func (h *RR_Header) String() string {
return s
}
// Return the number of labels in a domain name
// Return the number of labels in a domain name.
func LabelCount(a string) (c uint8) {
// walk the string and count the dots
// except when it is escaped

11
edns.go
View File

@ -31,6 +31,14 @@ type Option struct {
* Rdlength uint16 // length of data after the header
*/
// Adding an EDNS0 record to a message is done as follows:
// opt := new(RR_OPT)
// opt.Hdr = dns.RR_Header{Name: "", Rrtype: TypeOPT}
// opt.SetVersion(0) // set version to zero
// opt.SetDo() // set the DO bit
// opt.SetUDPSize(4096) // set the message size
// m.Extra = make([]RR, 1)
// m.Extra[0] = opt // add OPT RR to the message
type RR_OPT struct {
Hdr RR_Header
Option []Option "OPT" // tag is used in Pack and Unpack
@ -101,7 +109,7 @@ func (rr *RR_OPT) Do() bool {
return byte(rr.Hdr.Ttl >> 8) &_DO == _DO
}
// Set the do bit
// Set the DO bit
func (rr *RR_OPT) SetDo() {
b1 := byte(rr.Hdr.Ttl >> 24)
b2 := byte(rr.Hdr.Ttl >> 16)
@ -118,6 +126,7 @@ func (rr *RR_OPT) Nsid() string {
// Set the NSID from a string which is represented as hex characters.
func (rr *RR_OPT) SetNsid(hexnsid string) {
rr.Option = make([]Option, 1) // TODO(mg) check length first?
rr.Option[0].Code = OptionCodeNSID
rr.Option[0].Data = hexnsid
}

View File

@ -341,7 +341,7 @@ func (rr *RR_NAPTR) String() string {
rr.Replacement
}
// RFC 4398
// See RFC 4398.
type RR_CERT struct {
Hdr RR_Header
Type uint16