SetString() for a bunch of RR - to be extended
This commit is contained in:
parent
2e4f0cc015
commit
2eecc66477
|
@ -138,3 +138,10 @@ func TestParse(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
func TestSetString(t *testing.T) {
|
||||
a := new(RR_A)
|
||||
a.SetString("miek.nl. IN A 127.0.0.1")
|
||||
println(a.String())
|
||||
}
|
||||
|
|
133
types.go
133
types.go
|
@ -161,6 +161,19 @@ func (rr *RR_CNAME) String() string {
|
|||
return rr.Hdr.String() + rr.Cname
|
||||
}
|
||||
|
||||
func (rr *RR_CNAME) SetString(s string) (*RR_CNAME, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_CNAME); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_CNAME).Hdr
|
||||
rr.Cname = p.(*RR_CNAME).Cname
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_HINFO struct {
|
||||
Hdr RR_Header
|
||||
Cpu string
|
||||
|
@ -175,6 +188,20 @@ func (rr *RR_HINFO) String() string {
|
|||
return rr.Hdr.String() + rr.Cpu + " " + rr.Os
|
||||
}
|
||||
|
||||
func (rr *RR_HINFO) SetString(s string) (*RR_HINFO, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_HINFO); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_HINFO).Hdr
|
||||
rr.Cpu = p.(*RR_HINFO).Cpu
|
||||
rr.Os = p.(*RR_HINFO).Os
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_MB struct {
|
||||
Hdr RR_Header
|
||||
Mb string "domain-name"
|
||||
|
@ -188,6 +215,19 @@ func (rr *RR_MB) String() string {
|
|||
return rr.Hdr.String() + rr.Mb
|
||||
}
|
||||
|
||||
func (rr *RR_MB) SetString(s string) (*RR_MB, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_MB); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_MB).Hdr
|
||||
rr.Mb = p.(*RR_MB).Mb
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_MG struct {
|
||||
Hdr RR_Header
|
||||
Mg string "domain-name"
|
||||
|
@ -242,6 +282,20 @@ func (rr *RR_MX) String() string {
|
|||
return rr.Hdr.String() + strconv.Itoa(int(rr.Pref)) + " " + rr.Mx
|
||||
}
|
||||
|
||||
func (rr *RR_MX) SetString(s string) (*RR_MX, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_MX); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_MX).Hdr
|
||||
rr.Pref = p.(*RR_MX).Pref
|
||||
rr.Mx = p.(*RR_MX).Mx
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_NS struct {
|
||||
Hdr RR_Header
|
||||
Ns string "domain-name"
|
||||
|
@ -255,6 +309,19 @@ func (rr *RR_NS) String() string {
|
|||
return rr.Hdr.String() + rr.Ns
|
||||
}
|
||||
|
||||
func (rr *RR_NS) SetString(s string) (*RR_NS, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_NS); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_NS).Hdr
|
||||
rr.Ns = p.(*RR_NS).Ns
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_PTR struct {
|
||||
Hdr RR_Header
|
||||
Ptr string "domain-name"
|
||||
|
@ -292,6 +359,24 @@ func (rr *RR_SOA) String() string {
|
|||
" " + strconv.Itoa(int(rr.Minttl))
|
||||
}
|
||||
|
||||
func (rr *RR_SOA) SetString(s string) (*RR_SOA, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_SOA); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_SOA).Hdr
|
||||
rr.Ns = p.(*RR_SOA).Ns
|
||||
rr.Mbox = p.(*RR_SOA).Mbox
|
||||
rr.Refresh = p.(*RR_SOA).Refresh
|
||||
rr.Retry = p.(*RR_SOA).Retry
|
||||
rr.Expire = p.(*RR_SOA).Expire
|
||||
rr.Minttl = p.(*RR_SOA).Minttl
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_TXT struct {
|
||||
Hdr RR_Header
|
||||
Txt string "txt"
|
||||
|
@ -305,6 +390,19 @@ func (rr *RR_TXT) String() string {
|
|||
return rr.Hdr.String() + "\"" + rr.Txt + "\""
|
||||
}
|
||||
|
||||
func (rr *RR_TXT) SetString(s string) (*RR_TXT, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_TXT); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_TXT).Hdr
|
||||
rr.Txt = p.(*RR_TXT).Txt
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_SRV struct {
|
||||
Hdr RR_Header
|
||||
Priority uint16
|
||||
|
@ -395,6 +493,19 @@ func (rr *RR_A) String() string {
|
|||
return rr.Hdr.String() + rr.A.String()
|
||||
}
|
||||
|
||||
func (rr *RR_A) SetString(s string) (*RR_A, bool) {
|
||||
p := parse(s)
|
||||
if p == nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_A); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_A).Hdr
|
||||
rr.A = p.(*RR_A).A
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_AAAA struct {
|
||||
Hdr RR_Header
|
||||
AAAA net.IP "AAAA"
|
||||
|
@ -408,6 +519,19 @@ func (rr *RR_AAAA) String() string {
|
|||
return rr.Hdr.String() + rr.AAAA.String()
|
||||
}
|
||||
|
||||
func (rr *RR_AAAA) SetString(s string) (*RR_AAAA, bool) {
|
||||
p := parse(s)
|
||||
if p != nil {
|
||||
return nil, false
|
||||
}
|
||||
if _, ok := p.(*RR_AAAA); !ok {
|
||||
return nil, false
|
||||
}
|
||||
rr.Hdr = p.(*RR_AAAA).Hdr
|
||||
rr.AAAA = p.(*RR_AAAA).AAAA
|
||||
return rr, true
|
||||
}
|
||||
|
||||
type RR_LOC struct {
|
||||
Hdr RR_Header
|
||||
Version uint8
|
||||
|
@ -791,6 +915,15 @@ func tsigTimeToDate(t uint64) string {
|
|||
return ti.Format("20060102030405")
|
||||
}
|
||||
|
||||
// Helper function for parsing from strings
|
||||
func parse(s string) RR {
|
||||
rr, err := Zparse(strings.NewReader(s))
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return rr
|
||||
}
|
||||
|
||||
// Map of constructors for each RR wire type.
|
||||
var rr_mk = map[int]func() RR{
|
||||
TypeCNAME: func() RR { return new(RR_CNAME) },
|
||||
|
|
10
zparse.go
10
zparse.go
|
@ -9,7 +9,6 @@ import (
|
|||
"os"
|
||||
"io"
|
||||
"net"
|
||||
"bufio"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
|
@ -60,7 +59,7 @@ func (to *token) reset() {
|
|||
}
|
||||
|
||||
|
||||
// line 64 "zparse.go"
|
||||
// line 63 "zparse.go"
|
||||
var z_start int = 1
|
||||
var z_first_final int = 102
|
||||
var z_error int = 0
|
||||
|
@ -68,15 +67,16 @@ var z_error int = 0
|
|||
var z_en_main int = 1
|
||||
|
||||
|
||||
// line 63 "zparse.rl"
|
||||
// line 62 "zparse.rl"
|
||||
|
||||
|
||||
// SetString
|
||||
// All the NewReader stuff is expensive...
|
||||
// only works for short io.Readers as we put the whole thing
|
||||
// in a string -- needs to be extended for large files (sliding window).
|
||||
func Zparse(q io.Reader) (rr RR, err os.Error) {
|
||||
r := bufio.NewReader(q)
|
||||
buf := make([]byte, _IOBUF)
|
||||
n, err := r.Read(buf)
|
||||
n, err := q.Read(buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import (
|
|||
"os"
|
||||
"io"
|
||||
"net"
|
||||
"bufio"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
|
@ -62,12 +61,13 @@ func (to *token) reset() {
|
|||
write data;
|
||||
}%%
|
||||
|
||||
// SetString
|
||||
// All the NewReader stuff is expensive...
|
||||
// only works for short io.Readers as we put the whole thing
|
||||
// in a string -- needs to be extended for large files (sliding window).
|
||||
func Zparse(q io.Reader) (rr RR, err os.Error) {
|
||||
r := bufio.NewReader(q)
|
||||
buf := make([]byte, _IOBUF)
|
||||
n, err := r.Read(buf)
|
||||
n, err := q.Read(buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue