summaryrefslogtreecommitdiff
path: root/src/pkg/net/dnsmsg.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/net/dnsmsg.go')
-rw-r--r--src/pkg/net/dnsmsg.go444
1 files changed, 222 insertions, 222 deletions
diff --git a/src/pkg/net/dnsmsg.go b/src/pkg/net/dnsmsg.go
index 2bcb88206..01bb49078 100644
--- a/src/pkg/net/dnsmsg.go
+++ b/src/pkg/net/dnsmsg.go
@@ -24,9 +24,9 @@
package net
import (
- "fmt";
- "os";
- "reflect";
+ "fmt"
+ "os"
+ "reflect"
)
// Packet formats
@@ -34,77 +34,77 @@ import (
// Wire constants.
const (
// valid _DNS_RR_Header.Rrtype and _DNS_Question.qtype
- _DNS_TypeA = 1;
- _DNS_TypeNS = 2;
- _DNS_TypeMD = 3;
- _DNS_TypeMF = 4;
- _DNS_TypeCNAME = 5;
- _DNS_TypeSOA = 6;
- _DNS_TypeMB = 7;
- _DNS_TypeMG = 8;
- _DNS_TypeMR = 9;
- _DNS_TypeNULL = 10;
- _DNS_TypeWKS = 11;
- _DNS_TypePTR = 12;
- _DNS_TypeHINFO = 13;
- _DNS_TypeMINFO = 14;
- _DNS_TypeMX = 15;
- _DNS_TypeTXT = 16;
+ _DNS_TypeA = 1
+ _DNS_TypeNS = 2
+ _DNS_TypeMD = 3
+ _DNS_TypeMF = 4
+ _DNS_TypeCNAME = 5
+ _DNS_TypeSOA = 6
+ _DNS_TypeMB = 7
+ _DNS_TypeMG = 8
+ _DNS_TypeMR = 9
+ _DNS_TypeNULL = 10
+ _DNS_TypeWKS = 11
+ _DNS_TypePTR = 12
+ _DNS_TypeHINFO = 13
+ _DNS_TypeMINFO = 14
+ _DNS_TypeMX = 15
+ _DNS_TypeTXT = 16
// valid _DNS_Question.qtype only
- _DNS_TypeAXFR = 252;
- _DNS_TypeMAILB = 253;
- _DNS_TypeMAILA = 254;
- _DNS_TypeALL = 255;
+ _DNS_TypeAXFR = 252
+ _DNS_TypeMAILB = 253
+ _DNS_TypeMAILA = 254
+ _DNS_TypeALL = 255
// valid _DNS_Question.qclass
- _DNS_ClassINET = 1;
- _DNS_ClassCSNET = 2;
- _DNS_ClassCHAOS = 3;
- _DNS_ClassHESIOD = 4;
- _DNS_ClassANY = 255;
+ _DNS_ClassINET = 1
+ _DNS_ClassCSNET = 2
+ _DNS_ClassCHAOS = 3
+ _DNS_ClassHESIOD = 4
+ _DNS_ClassANY = 255
// _DNS_Msg.rcode
- _DNS_RcodeSuccess = 0;
- _DNS_RcodeFormatError = 1;
- _DNS_RcodeServerFailure = 2;
- _DNS_RcodeNameError = 3;
- _DNS_RcodeNotImplemented = 4;
- _DNS_RcodeRefused = 5;
+ _DNS_RcodeSuccess = 0
+ _DNS_RcodeFormatError = 1
+ _DNS_RcodeServerFailure = 2
+ _DNS_RcodeNameError = 3
+ _DNS_RcodeNotImplemented = 4
+ _DNS_RcodeRefused = 5
)
// The wire format for the DNS packet header.
type __DNS_Header struct {
- Id uint16;
- Bits uint16;
- Qdcount, Ancount, Nscount, Arcount uint16;
+ Id uint16
+ Bits uint16
+ Qdcount, Ancount, Nscount, Arcount uint16
}
const (
// __DNS_Header.Bits
- _QR = 1 << 15; // query/response (response=1)
- _AA = 1 << 10; // authoritative
- _TC = 1 << 9; // truncated
- _RD = 1 << 8; // recursion desired
- _RA = 1 << 7; // recursion available
+ _QR = 1 << 15 // query/response (response=1)
+ _AA = 1 << 10 // authoritative
+ _TC = 1 << 9 // truncated
+ _RD = 1 << 8 // recursion desired
+ _RA = 1 << 7 // recursion available
)
// DNS queries.
type _DNS_Question struct {
- Name string "domain-name"; // "domain-name" specifies encoding; see packers below
- Qtype uint16;
- Qclass uint16;
+ Name string "domain-name" // "domain-name" specifies encoding; see packers below
+ Qtype uint16
+ Qclass uint16
}
// DNS responses (resource records).
// There are many types of messages,
// but they all share the same header.
type _DNS_RR_Header struct {
- Name string "domain-name";
- Rrtype uint16;
- Class uint16;
- Ttl uint32;
- Rdlength uint16; // length of data after header
+ Name string "domain-name"
+ Rrtype uint16
+ Class uint16
+ Ttl uint32
+ Rdlength uint16 // length of data after header
}
func (h *_DNS_RR_Header) Header() *_DNS_RR_Header {
@@ -112,15 +112,15 @@ func (h *_DNS_RR_Header) Header() *_DNS_RR_Header {
}
type _DNS_RR interface {
- Header() *_DNS_RR_Header;
+ Header() *_DNS_RR_Header
}
// Specific DNS RR formats for each query type.
type _DNS_RR_CNAME struct {
- Hdr _DNS_RR_Header;
- Cname string "domain-name";
+ Hdr _DNS_RR_Header
+ Cname string "domain-name"
}
func (rr *_DNS_RR_CNAME) Header() *_DNS_RR_Header {
@@ -128,9 +128,9 @@ func (rr *_DNS_RR_CNAME) Header() *_DNS_RR_Header {
}
type _DNS_RR_HINFO struct {
- Hdr _DNS_RR_Header;
- Cpu string;
- Os string;
+ Hdr _DNS_RR_Header
+ Cpu string
+ Os string
}
func (rr *_DNS_RR_HINFO) Header() *_DNS_RR_Header {
@@ -138,8 +138,8 @@ func (rr *_DNS_RR_HINFO) Header() *_DNS_RR_Header {
}
type _DNS_RR_MB struct {
- Hdr _DNS_RR_Header;
- Mb string "domain-name";
+ Hdr _DNS_RR_Header
+ Mb string "domain-name"
}
func (rr *_DNS_RR_MB) Header() *_DNS_RR_Header {
@@ -147,8 +147,8 @@ func (rr *_DNS_RR_MB) Header() *_DNS_RR_Header {
}
type _DNS_RR_MG struct {
- Hdr _DNS_RR_Header;
- Mg string "domain-name";
+ Hdr _DNS_RR_Header
+ Mg string "domain-name"
}
func (rr *_DNS_RR_MG) Header() *_DNS_RR_Header {
@@ -156,9 +156,9 @@ func (rr *_DNS_RR_MG) Header() *_DNS_RR_Header {
}
type _DNS_RR_MINFO struct {
- Hdr _DNS_RR_Header;
- Rmail string "domain-name";
- Email string "domain-name";
+ Hdr _DNS_RR_Header
+ Rmail string "domain-name"
+ Email string "domain-name"
}
func (rr *_DNS_RR_MINFO) Header() *_DNS_RR_Header {
@@ -166,8 +166,8 @@ func (rr *_DNS_RR_MINFO) Header() *_DNS_RR_Header {
}
type _DNS_RR_MR struct {
- Hdr _DNS_RR_Header;
- Mr string "domain-name";
+ Hdr _DNS_RR_Header
+ Mr string "domain-name"
}
func (rr *_DNS_RR_MR) Header() *_DNS_RR_Header {
@@ -175,9 +175,9 @@ func (rr *_DNS_RR_MR) Header() *_DNS_RR_Header {
}
type _DNS_RR_MX struct {
- Hdr _DNS_RR_Header;
- Pref uint16;
- Mx string "domain-name";
+ Hdr _DNS_RR_Header
+ Pref uint16
+ Mx string "domain-name"
}
func (rr *_DNS_RR_MX) Header() *_DNS_RR_Header {
@@ -185,8 +185,8 @@ func (rr *_DNS_RR_MX) Header() *_DNS_RR_Header {
}
type _DNS_RR_NS struct {
- Hdr _DNS_RR_Header;
- Ns string "domain-name";
+ Hdr _DNS_RR_Header
+ Ns string "domain-name"
}
func (rr *_DNS_RR_NS) Header() *_DNS_RR_Header {
@@ -194,8 +194,8 @@ func (rr *_DNS_RR_NS) Header() *_DNS_RR_Header {
}
type _DNS_RR_PTR struct {
- Hdr _DNS_RR_Header;
- Ptr string "domain-name";
+ Hdr _DNS_RR_Header
+ Ptr string "domain-name"
}
func (rr *_DNS_RR_PTR) Header() *_DNS_RR_Header {
@@ -203,14 +203,14 @@ func (rr *_DNS_RR_PTR) Header() *_DNS_RR_Header {
}
type _DNS_RR_SOA struct {
- Hdr _DNS_RR_Header;
- Ns string "domain-name";
- Mbox string "domain-name";
- Serial uint32;
- Refresh uint32;
- Retry uint32;
- Expire uint32;
- Minttl uint32;
+ Hdr _DNS_RR_Header
+ Ns string "domain-name"
+ Mbox string "domain-name"
+ Serial uint32
+ Refresh uint32
+ Retry uint32
+ Expire uint32
+ Minttl uint32
}
func (rr *_DNS_RR_SOA) Header() *_DNS_RR_Header {
@@ -218,8 +218,8 @@ func (rr *_DNS_RR_SOA) Header() *_DNS_RR_Header {
}
type _DNS_RR_TXT struct {
- Hdr _DNS_RR_Header;
- Txt string; // not domain name
+ Hdr _DNS_RR_Header
+ Txt string // not domain name
}
func (rr *_DNS_RR_TXT) Header() *_DNS_RR_Header {
@@ -227,11 +227,11 @@ func (rr *_DNS_RR_TXT) Header() *_DNS_RR_Header {
}
type _DNS_RR_A struct {
- Hdr _DNS_RR_Header;
- A uint32 "ipv4";
+ Hdr _DNS_RR_Header
+ A uint32 "ipv4"
}
-func (rr *_DNS_RR_A) Header() *_DNS_RR_Header { return &rr.Hdr }
+func (rr *_DNS_RR_A) Header() *_DNS_RR_Header { return &rr.Hdr }
// Packing and unpacking.
@@ -271,30 +271,30 @@ func packDomainName(s string, msg []byte, off int) (off1 int, ok bool) {
// We trade each dot byte for a length byte.
// There is also a trailing zero.
// Check that we have all the space we need.
- tot := len(s) + 1;
+ tot := len(s) + 1
if off+tot > len(msg) {
return len(msg), false
}
// Emit sequence of counted strings, chopping at dots.
- begin := 0;
+ begin := 0
for i := 0; i < len(s); i++ {
if s[i] == '.' {
- if i-begin >= 1<<6 { // top two bits of length must be clear
+ if i-begin >= 1<<6 { // top two bits of length must be clear
return len(msg), false
}
- msg[off] = byte(i - begin);
- off++;
+ msg[off] = byte(i - begin)
+ off++
for j := begin; j < i; j++ {
- msg[off] = s[j];
- off++;
+ msg[off] = s[j]
+ off++
}
- begin = i + 1;
+ begin = i + 1
}
}
- msg[off] = 0;
- off++;
- return off, true;
+ msg[off] = 0
+ off++
+ return off, true
}
// Unpack a domain name.
@@ -311,15 +311,15 @@ func packDomainName(s string, msg []byte, off int) (off1 int, ok bool) {
// In theory, the pointers are only allowed to jump backward.
// We let them jump anywhere and stop jumping after a while.
func unpackDomainName(msg []byte, off int) (s string, off1 int, ok bool) {
- s = "";
- ptr := 0; // number of pointers followed
+ s = ""
+ ptr := 0 // number of pointers followed
Loop:
for {
if off >= len(msg) {
return "", len(msg), false
}
- c := int(msg[off]);
- off++;
+ c := int(msg[off])
+ off++
switch c & 0xC0 {
case 0x00:
if c == 0x00 {
@@ -330,8 +330,8 @@ Loop:
if off+c > len(msg) {
return "", len(msg), false
}
- s += string(msg[off:off+c]) + ".";
- off += c;
+ s += string(msg[off:off+c]) + "."
+ off += c
case 0xC0:
// pointer to somewhere else in msg.
// remember location after first ptr,
@@ -341,15 +341,15 @@ Loop:
if off >= len(msg) {
return "", len(msg), false
}
- c1 := msg[off];
- off++;
+ c1 := msg[off]
+ off++
if ptr == 0 {
off1 = off
}
if ptr++; ptr > 10 {
return "", len(msg), false
}
- off = (c^0xC0)<<8 | int(c1);
+ off = (c^0xC0)<<8 | int(c1)
default:
// 0x80 and 0x40 are reserved
return "", len(msg), false
@@ -358,7 +358,7 @@ Loop:
if ptr == 0 {
off1 = off
}
- return s, off1, true;
+ return s, off1, true
}
// TODO(rsc): Move into generic library?
@@ -366,41 +366,41 @@ Loop:
// and other (often anonymous) structs.
func packStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int, ok bool) {
for i := 0; i < val.NumField(); i++ {
- f := val.Type().(*reflect.StructType).Field(i);
+ f := val.Type().(*reflect.StructType).Field(i)
switch fv := val.Field(i).(type) {
default:
- fmt.Fprintf(os.Stderr, "net: dns: unknown packing type %v", f.Type);
- return len(msg), false;
+ fmt.Fprintf(os.Stderr, "net: dns: unknown packing type %v", f.Type)
+ return len(msg), false
case *reflect.StructValue:
off, ok = packStructValue(fv, msg, off)
case *reflect.Uint16Value:
- i := fv.Get();
+ i := fv.Get()
if off+2 > len(msg) {
return len(msg), false
}
- msg[off] = byte(i >> 8);
- msg[off+1] = byte(i);
- off += 2;
+ msg[off] = byte(i >> 8)
+ msg[off+1] = byte(i)
+ off += 2
case *reflect.Uint32Value:
- i := fv.Get();
+ i := fv.Get()
if off+4 > len(msg) {
return len(msg), false
}
- msg[off] = byte(i >> 24);
- msg[off+1] = byte(i >> 16);
- msg[off+2] = byte(i >> 8);
- msg[off+4] = byte(i);
- off += 4;
+ msg[off] = byte(i >> 24)
+ msg[off+1] = byte(i >> 16)
+ msg[off+2] = byte(i >> 8)
+ msg[off+4] = byte(i)
+ off += 4
case *reflect.StringValue:
// There are multiple string encodings.
// The tag distinguishes ordinary strings from domain names.
- s := fv.Get();
+ s := fv.Get()
switch f.Tag {
default:
- fmt.Fprintf(os.Stderr, "net: dns: unknown string tag %v", f.Tag);
- return len(msg), false;
+ fmt.Fprintf(os.Stderr, "net: dns: unknown string tag %v", f.Tag)
+ return len(msg), false
case "domain-name":
- off, ok = packDomainName(s, msg, off);
+ off, ok = packDomainName(s, msg, off)
if !ok {
return len(msg), false
}
@@ -409,16 +409,16 @@ func packStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int, o
if len(s) > 255 || off+1+len(s) > len(msg) {
return len(msg), false
}
- msg[off] = byte(len(s));
- off++;
+ msg[off] = byte(len(s))
+ off++
for i := 0; i < len(s); i++ {
msg[off+i] = s[i]
}
- off += len(s);
+ off += len(s)
}
}
}
- return off, true;
+ return off, true
}
func structValue(any interface{}) *reflect.StructValue {
@@ -426,8 +426,8 @@ func structValue(any interface{}) *reflect.StructValue {
}
func packStruct(any interface{}, msg []byte, off int) (off1 int, ok bool) {
- off, ok = packStructValue(structValue(any), msg, off);
- return off, ok;
+ off, ok = packStructValue(structValue(any), msg, off)
+ return off, ok
}
// TODO(rsc): Move into generic library?
@@ -435,35 +435,35 @@ func packStruct(any interface{}, msg []byte, off int) (off1 int, ok bool) {
// Same restrictions as packStructValue.
func unpackStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int, ok bool) {
for i := 0; i < val.NumField(); i++ {
- f := val.Type().(*reflect.StructType).Field(i);
+ f := val.Type().(*reflect.StructType).Field(i)
switch fv := val.Field(i).(type) {
default:
- fmt.Fprintf(os.Stderr, "net: dns: unknown packing type %v", f.Type);
- return len(msg), false;
+ fmt.Fprintf(os.Stderr, "net: dns: unknown packing type %v", f.Type)
+ return len(msg), false
case *reflect.StructValue:
off, ok = unpackStructValue(fv, msg, off)
case *reflect.Uint16Value:
if off+2 > len(msg) {
return len(msg), false
}
- i := uint16(msg[off])<<8 | uint16(msg[off+1]);
- fv.Set(i);
- off += 2;
+ i := uint16(msg[off])<<8 | uint16(msg[off+1])
+ fv.Set(i)
+ off += 2
case *reflect.Uint32Value:
if off+4 > len(msg) {
return len(msg), false
}
- i := uint32(msg[off])<<24 | uint32(msg[off+1])<<16 | uint32(msg[off+2])<<8 | uint32(msg[off+3]);
- fv.Set(i);
- off += 4;
+ i := uint32(msg[off])<<24 | uint32(msg[off+1])<<16 | uint32(msg[off+2])<<8 | uint32(msg[off+3])
+ fv.Set(i)
+ off += 4
case *reflect.StringValue:
- var s string;
+ var s string
switch f.Tag {
default:
- fmt.Fprintf(os.Stderr, "net: dns: unknown string tag %v", f.Tag);
- return len(msg), false;
+ fmt.Fprintf(os.Stderr, "net: dns: unknown string tag %v", f.Tag)
+ return len(msg), false
case "domain-name":
- s, off, ok = unpackDomainName(msg, off);
+ s, off, ok = unpackDomainName(msg, off)
if !ok {
return len(msg), false
}
@@ -471,24 +471,24 @@ func unpackStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int,
if off >= len(msg) || off+1+int(msg[off]) > len(msg) {
return len(msg), false
}
- n := int(msg[off]);
- off++;
- b := make([]byte, n);
+ n := int(msg[off])
+ off++
+ b := make([]byte, n)
for i := 0; i < n; i++ {
b[i] = msg[off+i]
}
- off += n;
- s = string(b);
+ off += n
+ s = string(b)
}
- fv.Set(s);
+ fv.Set(s)
}
}
- return off, true;
+ return off, true
}
func unpackStruct(any interface{}, msg []byte, off int) (off1 int, ok bool) {
- off, ok = unpackStructValue(structValue(any), msg, off);
- return off, ok;
+ off, ok = unpackStructValue(structValue(any), msg, off)
+ return off, ok
}
// Generic struct printer.
@@ -496,72 +496,72 @@ func unpackStruct(any interface{}, msg []byte, off int) (off1 int, ok bool) {
// but does look for an "ipv4" tag on uint32 variables,
// printing them as IP addresses.
func printStructValue(val *reflect.StructValue) string {
- s := "{";
+ s := "{"
for i := 0; i < val.NumField(); i++ {
if i > 0 {
s += ", "
}
- f := val.Type().(*reflect.StructType).Field(i);
+ f := val.Type().(*reflect.StructType).Field(i)
if !f.Anonymous {
s += f.Name + "="
}
- fval := val.Field(i);
+ fval := val.Field(i)
if fv, ok := fval.(*reflect.StructValue); ok {
s += printStructValue(fv)
} else if fv, ok := fval.(*reflect.Uint32Value); ok && f.Tag == "ipv4" {
- i := fv.Get();
- s += IPv4(byte(i>>24), byte(i>>16), byte(i>>8), byte(i)).String();
+ i := fv.Get()
+ s += IPv4(byte(i>>24), byte(i>>16), byte(i>>8), byte(i)).String()
} else {
s += fmt.Sprint(fval.Interface())
}
}
- s += "}";
- return s;
+ s += "}"
+ return s
}
-func printStruct(any interface{}) string { return printStructValue(structValue(any)) }
+func printStruct(any interface{}) string { return printStructValue(structValue(any)) }
// Resource record packer.
func packRR(rr _DNS_RR, msg []byte, off int) (off2 int, ok bool) {
- var off1 int;
+ var off1 int
// pack twice, once to find end of header
// and again to find end of packet.
// a bit inefficient but this doesn't need to be fast.
// off1 is end of header
// off2 is end of rr
- off1, ok = packStruct(rr.Header(), msg, off);
- off2, ok = packStruct(rr, msg, off);
+ off1, ok = packStruct(rr.Header(), msg, off)
+ off2, ok = packStruct(rr, msg, off)
if !ok {
return len(msg), false
}
// pack a third time; redo header with correct data length
- rr.Header().Rdlength = uint16(off2 - off1);
- packStruct(rr.Header(), msg, off);
- return off2, true;
+ rr.Header().Rdlength = uint16(off2 - off1)
+ packStruct(rr.Header(), msg, off)
+ return off2, true
}
// Resource record unpacker.
func unpackRR(msg []byte, off int) (rr _DNS_RR, off1 int, ok bool) {
// unpack just the header, to find the rr type and length
- var h _DNS_RR_Header;
- off0 := off;
+ var h _DNS_RR_Header
+ off0 := off
if off, ok = unpackStruct(&h, msg, off); !ok {
return nil, len(msg), false
}
- end := off + int(h.Rdlength);
+ end := off + int(h.Rdlength)
// make an rr of that type and re-unpack.
// again inefficient but doesn't need to be fast.
- mk, known := rr_mk[int(h.Rrtype)];
+ mk, known := rr_mk[int(h.Rrtype)]
if !known {
return &h, end, true
}
- rr = mk();
- off, ok = unpackStruct(rr, msg, off0);
+ rr = mk()
+ off, ok = unpackStruct(rr, msg, off0)
if off != end {
return &h, end, true
}
- return rr, off, ok;
+ return rr, off, ok
}
// Usable representation of a DNS packet.
@@ -569,31 +569,31 @@ func unpackRR(msg []byte, off int) (rr _DNS_RR, off1 int, ok bool) {
// A manually-unpacked version of (id, bits).
// This is in its own struct for easy printing.
type __DNS_Msg_Top struct {
- id uint16;
- response bool;
- opcode int;
- authoritative bool;
- truncated bool;
- recursion_desired bool;
- recursion_available bool;
- rcode int;
+ id uint16
+ response bool
+ opcode int
+ authoritative bool
+ truncated bool
+ recursion_desired bool
+ recursion_available bool
+ rcode int
}
type _DNS_Msg struct {
- __DNS_Msg_Top;
- question []_DNS_Question;
- answer []_DNS_RR;
- ns []_DNS_RR;
- extra []_DNS_RR;
+ __DNS_Msg_Top
+ question []_DNS_Question
+ answer []_DNS_RR
+ ns []_DNS_RR
+ extra []_DNS_RR
}
func (dns *_DNS_Msg) Pack() (msg []byte, ok bool) {
- var dh __DNS_Header;
+ var dh __DNS_Header
// Convert convenient _DNS_Msg into wire-like __DNS_Header.
- dh.Id = dns.id;
- dh.Bits = uint16(dns.opcode)<<11 | uint16(dns.rcode);
+ dh.Id = dns.id
+ dh.Bits = uint16(dns.opcode)<<11 | uint16(dns.rcode)
if dns.recursion_available {
dh.Bits |= _RA
}
@@ -611,24 +611,24 @@ func (dns *_DNS_Msg) Pack() (msg []byte, ok bool) {
}
// Prepare variable sized arrays.
- question := dns.question;
- answer := dns.answer;
- ns := dns.ns;
- extra := dns.extra;
+ question := dns.question
+ answer := dns.answer
+ ns := dns.ns
+ extra := dns.extra
- dh.Qdcount = uint16(len(question));
- dh.Ancount = uint16(len(answer));
- dh.Nscount = uint16(len(ns));
- dh.Arcount = uint16(len(extra));
+ dh.Qdcount = uint16(len(question))
+ dh.Ancount = uint16(len(answer))
+ dh.Nscount = uint16(len(ns))
+ dh.Arcount = uint16(len(extra))
// Could work harder to calculate message size,
// but this is far more than we need and not
// big enough to hurt the allocator.
- msg = make([]byte, 2000);
+ msg = make([]byte, 2000)
// Pack it in: header and then the pieces.
- off := 0;
- off, ok = packStruct(&dh, msg, off);
+ off := 0
+ off, ok = packStruct(&dh, msg, off)
for i := 0; i < len(question); i++ {
off, ok = packStruct(&question[i], msg, off)
}
@@ -644,31 +644,31 @@ func (dns *_DNS_Msg) Pack() (msg []byte, ok bool) {
if !ok {
return nil, false
}
- return msg[0:off], true;
+ return msg[0:off], true
}
func (dns *_DNS_Msg) Unpack(msg []byte) bool {
// Header.
- var dh __DNS_Header;
- off := 0;
- var ok bool;
+ var dh __DNS_Header
+ off := 0
+ var ok bool
if off, ok = unpackStruct(&dh, msg, off); !ok {
return false
}
- dns.id = dh.Id;
- dns.response = (dh.Bits & _QR) != 0;
- dns.opcode = int(dh.Bits>>11) & 0xF;
- dns.authoritative = (dh.Bits & _AA) != 0;
- dns.truncated = (dh.Bits & _TC) != 0;
- dns.recursion_desired = (dh.Bits & _RD) != 0;
- dns.recursion_available = (dh.Bits & _RA) != 0;
- dns.rcode = int(dh.Bits & 0xF);
+ dns.id = dh.Id
+ dns.response = (dh.Bits & _QR) != 0
+ dns.opcode = int(dh.Bits>>11) & 0xF
+ dns.authoritative = (dh.Bits & _AA) != 0
+ dns.truncated = (dh.Bits & _TC) != 0
+ dns.recursion_desired = (dh.Bits & _RD) != 0
+ dns.recursion_available = (dh.Bits & _RA) != 0
+ dns.rcode = int(dh.Bits & 0xF)
// Arrays.
- dns.question = make([]_DNS_Question, dh.Qdcount);
- dns.answer = make([]_DNS_RR, dh.Ancount);
- dns.ns = make([]_DNS_RR, dh.Nscount);
- dns.extra = make([]_DNS_RR, dh.Arcount);
+ dns.question = make([]_DNS_Question, dh.Qdcount)
+ dns.answer = make([]_DNS_RR, dh.Ancount)
+ dns.ns = make([]_DNS_RR, dh.Nscount)
+ dns.extra = make([]_DNS_RR, dh.Arcount)
for i := 0; i < len(dns.question); i++ {
off, ok = unpackStruct(&dns.question[i], msg, off)
@@ -688,34 +688,34 @@ func (dns *_DNS_Msg) Unpack(msg []byte) bool {
// if off != len(msg) {
// println("extra bytes in dns packet", off, "<", len(msg));
// }
- return true;
+ return true
}
func (dns *_DNS_Msg) String() string {
- s := "DNS: " + printStruct(&dns.__DNS_Msg_Top) + "\n";
+ s := "DNS: " + printStruct(&dns.__DNS_Msg_Top) + "\n"
if len(dns.question) > 0 {
- s += "-- Questions\n";
+ s += "-- Questions\n"
for i := 0; i < len(dns.question); i++ {
s += printStruct(&dns.question[i]) + "\n"
}
}
if len(dns.answer) > 0 {
- s += "-- Answers\n";
+ s += "-- Answers\n"
for i := 0; i < len(dns.answer); i++ {
s += printStruct(dns.answer[i]) + "\n"
}
}
if len(dns.ns) > 0 {
- s += "-- Name servers\n";
+ s += "-- Name servers\n"
for i := 0; i < len(dns.ns); i++ {
s += printStruct(dns.ns[i]) + "\n"
}
}
if len(dns.extra) > 0 {
- s += "-- Extra\n";
+ s += "-- Extra\n"
for i := 0; i < len(dns.extra); i++ {
s += printStruct(dns.extra[i]) + "\n"
}
}
- return s;
+ return s
}