From be7b4d58731d3ba06568fdb7b408b06f5f87ea79 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 24 Jan 2013 21:13:37 +0100 Subject: [PATCH 1/3] Start to add support for json marshalling --- marshal.go | 9 +++++++++ types.go | 1 + 2 files changed, 10 insertions(+) create mode 100644 marshal.go diff --git a/marshal.go b/marshal.go new file mode 100644 index 00000000..4fc17893 --- /dev/null +++ b/marshal.go @@ -0,0 +1,9 @@ +package dns + +// UnmarshalJSON(data []byte) (err error) +func (rr *A) MarshalJSON() ([]byte, error) { +// b, _ := json.Marshal(rr.Header()) +b := []byte(`"` + rr.A.String() + `"`) + return b, nil +} + diff --git a/types.go b/types.go index d3408790..181f41c0 100644 --- a/types.go +++ b/types.go @@ -669,6 +669,7 @@ func (rr *AAAA) Len() int { return rr.Hdr.Len() + net.IPv6len } + type LOC struct { Hdr RR_Header Version uint8 From 2a346164195c865bb3cbfa72cf16e25ee1630634 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Fri, 25 Jan 2013 08:38:48 +0100 Subject: [PATCH 2/3] And gone --- marshal.go | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 marshal.go diff --git a/marshal.go b/marshal.go deleted file mode 100644 index 4fc17893..00000000 --- a/marshal.go +++ /dev/null @@ -1,9 +0,0 @@ -package dns - -// UnmarshalJSON(data []byte) (err error) -func (rr *A) MarshalJSON() ([]byte, error) { -// b, _ := json.Marshal(rr.Header()) -b := []byte(`"` + rr.A.String() + `"`) - return b, nil -} - From eb28b618cb4b8a7b8d975a0d19134d8351e5460a Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sun, 27 Jan 2013 14:47:47 +0100 Subject: [PATCH 3/3] Be much more inline with the spec for the edns subnet --- edns.go | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/edns.go b/edns.go index a274a38a..c5d09f3c 100644 --- a/edns.go +++ b/edns.go @@ -248,7 +248,8 @@ func (e *EDNS0_SUBNET) pack() ([]byte, error) { } func (e *EDNS0_SUBNET) unpack(b []byte) { - if len(b) < 8 { + lb := len(b) + if lb < 4 { return } e.Family, _ = unpackUint16(b, 0) @@ -256,15 +257,25 @@ func (e *EDNS0_SUBNET) unpack(b []byte) { e.SourceScope = b[3] switch e.Family { case 1: - if len(b) == 8 { - e.Address = net.IPv4(b[4], b[5], b[6], b[7]) + addr := make([]byte, 4) + for i := 0; i < int(e.SourceNetmask/8); i++ { + if 4+i > len(b) { + break + } + addr[i] = b[4+i] } + e.Address = net.IPv4(addr[0], addr[1], addr[2], addr[3]) case 2: - if len(b) == 20 { - e.Address = net.IP{b[4], b[4+1], b[4+2], b[4+3], b[4+4], - b[4+5], b[4+6], b[4+7], b[4+8], b[4+9], b[4+10], - b[4+11], b[4+12], b[4+13], b[4+14], b[4+15]} + addr := make([]byte, 16) + for i := 0; i < int(e.SourceNetmask/8); i++ { + if 4+i > len(b) { + break + } + addr[i] = b[4+i] } + e.Address = net.IP{addr[0], addr[1], addr[2], addr[3], addr[4], + addr[5], addr[6], addr[7], addr[8], addr[9], addr[10], + addr[11], addr[12], addr[13], addr[14], addr[15]} } return }