32 lines
788 B
Go
32 lines
788 B
Go
// Copyright (c) 2014 The SkyDNS Authors. All rights reserved.
|
|
// Use of this source code is governed by The MIT License (MIT) that can be
|
|
// found in the LICENSE file.
|
|
|
|
package cache
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
// Hit returns a dns message from the cache. If the message's TTL is expired nil
|
|
// is returned and the message is removed from the cache.
|
|
func (c *Cache) Hit(question dns.Question, dnssec, tcp bool, msgid uint16) *dns.Msg {
|
|
key := Key(question, dnssec, tcp)
|
|
m1, exp, hit := c.Search(key)
|
|
if hit {
|
|
// Cache hit! \o/
|
|
if time.Since(exp) < 0 {
|
|
m1.Id = msgid
|
|
m1.Compress = true
|
|
// Even if something ended up with the TC bit *in* the cache, set it to off
|
|
m1.Truncated = false
|
|
return m1
|
|
}
|
|
// Expired! /o\
|
|
c.Remove(key)
|
|
}
|
|
return nil
|
|
}
|