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
|
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 {
|
type RR_HINFO struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Cpu string
|
Cpu string
|
||||||
|
@ -175,6 +188,20 @@ func (rr *RR_HINFO) String() string {
|
||||||
return rr.Hdr.String() + rr.Cpu + " " + rr.Os
|
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 {
|
type RR_MB struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Mb string "domain-name"
|
Mb string "domain-name"
|
||||||
|
@ -188,6 +215,19 @@ func (rr *RR_MB) String() string {
|
||||||
return rr.Hdr.String() + rr.Mb
|
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 {
|
type RR_MG struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Mg string "domain-name"
|
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
|
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 {
|
type RR_NS struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Ns string "domain-name"
|
Ns string "domain-name"
|
||||||
|
@ -255,6 +309,19 @@ func (rr *RR_NS) String() string {
|
||||||
return rr.Hdr.String() + rr.Ns
|
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 {
|
type RR_PTR struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Ptr string "domain-name"
|
Ptr string "domain-name"
|
||||||
|
@ -292,6 +359,24 @@ func (rr *RR_SOA) String() string {
|
||||||
" " + strconv.Itoa(int(rr.Minttl))
|
" " + 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 {
|
type RR_TXT struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Txt string "txt"
|
Txt string "txt"
|
||||||
|
@ -305,6 +390,19 @@ func (rr *RR_TXT) String() string {
|
||||||
return rr.Hdr.String() + "\"" + rr.Txt + "\""
|
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 {
|
type RR_SRV struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Priority uint16
|
Priority uint16
|
||||||
|
@ -395,6 +493,19 @@ func (rr *RR_A) String() string {
|
||||||
return rr.Hdr.String() + rr.A.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 {
|
type RR_AAAA struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
AAAA net.IP "AAAA"
|
AAAA net.IP "AAAA"
|
||||||
|
@ -408,6 +519,19 @@ func (rr *RR_AAAA) String() string {
|
||||||
return rr.Hdr.String() + rr.AAAA.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 {
|
type RR_LOC struct {
|
||||||
Hdr RR_Header
|
Hdr RR_Header
|
||||||
Version uint8
|
Version uint8
|
||||||
|
@ -791,6 +915,15 @@ func tsigTimeToDate(t uint64) string {
|
||||||
return ti.Format("20060102030405")
|
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.
|
// Map of constructors for each RR wire type.
|
||||||
var rr_mk = map[int]func() RR{
|
var rr_mk = map[int]func() RR{
|
||||||
TypeCNAME: func() RR { return new(RR_CNAME) },
|
TypeCNAME: func() RR { return new(RR_CNAME) },
|
||||||
|
|
10
zparse.go
10
zparse.go
|
@ -9,7 +9,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"bufio"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,7 +59,7 @@ func (to *token) reset() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// line 64 "zparse.go"
|
// line 63 "zparse.go"
|
||||||
var z_start int = 1
|
var z_start int = 1
|
||||||
var z_first_final int = 102
|
var z_first_final int = 102
|
||||||
var z_error int = 0
|
var z_error int = 0
|
||||||
|
@ -68,15 +67,16 @@ var z_error int = 0
|
||||||
var z_en_main int = 1
|
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
|
// only works for short io.Readers as we put the whole thing
|
||||||
// in a string -- needs to be extended for large files (sliding window).
|
// in a string -- needs to be extended for large files (sliding window).
|
||||||
func Zparse(q io.Reader) (rr RR, err os.Error) {
|
func Zparse(q io.Reader) (rr RR, err os.Error) {
|
||||||
r := bufio.NewReader(q)
|
|
||||||
buf := make([]byte, _IOBUF)
|
buf := make([]byte, _IOBUF)
|
||||||
n, err := r.Read(buf)
|
n, err := q.Read(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"bufio"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -62,12 +61,13 @@ func (to *token) reset() {
|
||||||
write data;
|
write data;
|
||||||
}%%
|
}%%
|
||||||
|
|
||||||
|
// SetString
|
||||||
|
// All the NewReader stuff is expensive...
|
||||||
// only works for short io.Readers as we put the whole thing
|
// only works for short io.Readers as we put the whole thing
|
||||||
// in a string -- needs to be extended for large files (sliding window).
|
// in a string -- needs to be extended for large files (sliding window).
|
||||||
func Zparse(q io.Reader) (rr RR, err os.Error) {
|
func Zparse(q io.Reader) (rr RR, err os.Error) {
|
||||||
r := bufio.NewReader(q)
|
|
||||||
buf := make([]byte, _IOBUF)
|
buf := make([]byte, _IOBUF)
|
||||||
n, err := r.Read(buf)
|
n, err := q.Read(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue