summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/miekg/dns/msg.go
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2018-04-16 05:37:14 -0700
committerJoram Wilander <jwawilander@gmail.com>2018-04-16 08:37:14 -0400
commit6e2cb00008cbf09e556b00f87603797fcaa47e09 (patch)
tree3c0eb55ff4226a3f024aad373140d1fb860a6404 /vendor/github.com/miekg/dns/msg.go
parentbf24f51c4e1cc6286885460672f7f449e8c6f5ef (diff)
downloadchat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.gz
chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.bz2
chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.zip
Depenancy upgrades and movign to dep. (#8630)
Diffstat (limited to 'vendor/github.com/miekg/dns/msg.go')
-rw-r--r--vendor/github.com/miekg/dns/msg.go67
1 files changed, 45 insertions, 22 deletions
diff --git a/vendor/github.com/miekg/dns/msg.go b/vendor/github.com/miekg/dns/msg.go
index 975dde781..276e6b027 100644
--- a/vendor/github.com/miekg/dns/msg.go
+++ b/vendor/github.com/miekg/dns/msg.go
@@ -595,6 +595,13 @@ func UnpackRR(msg []byte, off int) (rr RR, off1 int, err error) {
if err != nil {
return nil, len(msg), err
}
+
+ return UnpackRRWithHeader(h, msg, off)
+}
+
+// UnpackRRWithHeader unpacks the record type specific payload given an existing
+// RR_Header.
+func UnpackRRWithHeader(h RR_Header, msg []byte, off int) (rr RR, off1 int, err error) {
end := off + int(h.Rdlength)
if fn, known := typeToUnpack[h.Rrtype]; !known {
@@ -926,49 +933,65 @@ func compressedLen(dns *Msg, compress bool) int {
l += r.len()
compressionLenHelper(compression, r.Name)
}
- l += compressionLenSlice(compression, dns.Answer)
- l += compressionLenSlice(compression, dns.Ns)
- l += compressionLenSlice(compression, dns.Extra)
- } else {
- for _, r := range dns.Question {
+ l += compressionLenSlice(l, compression, dns.Answer)
+ l += compressionLenSlice(l, compression, dns.Ns)
+ l += compressionLenSlice(l, compression, dns.Extra)
+
+ return l
+ }
+
+ for _, r := range dns.Question {
+ l += r.len()
+ }
+ for _, r := range dns.Answer {
+ if r != nil {
l += r.len()
}
- for _, r := range dns.Answer {
- if r != nil {
- l += r.len()
- }
- }
- for _, r := range dns.Ns {
- if r != nil {
- l += r.len()
- }
+ }
+ for _, r := range dns.Ns {
+ if r != nil {
+ l += r.len()
}
- for _, r := range dns.Extra {
- if r != nil {
- l += r.len()
- }
+ }
+ for _, r := range dns.Extra {
+ if r != nil {
+ l += r.len()
}
}
+
return l
}
-func compressionLenSlice(c map[string]int, rs []RR) int {
+func compressionLenSlice(len int, c map[string]int, rs []RR) int {
var l int
for _, r := range rs {
if r == nil {
continue
}
- l += r.len()
+ // track this length, and the global length in len, while taking compression into account for both.
+ x := r.len()
+ l += x
+ len += x
+
k, ok := compressionLenSearch(c, r.Header().Name)
if ok {
l += 1 - k
+ len += 1 - k
+ }
+
+ if len < maxCompressionOffset {
+ compressionLenHelper(c, r.Header().Name)
}
- compressionLenHelper(c, r.Header().Name)
+
k, ok = compressionLenSearchType(c, r)
if ok {
l += 1 - k
+ len += 1 - k
+ }
+
+ if len < maxCompressionOffset {
+ compressionLenHelperType(c, r)
}
- compressionLenHelperType(c, r)
}
return l
}