dns.go 908 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package dns
  2. import (
  3. "net"
  4. "github.com/v2ray/v2ray-core/app"
  5. )
  6. const (
  7. APP_ID = app.ID(2)
  8. )
  9. // A DnsCache is an internal cache of DNS resolutions.
  10. type DnsCache interface {
  11. Get(domain string) net.IP
  12. Add(domain string, ip net.IP)
  13. }
  14. type dnsCacheWithContext interface {
  15. Get(context app.Context, domain string) net.IP
  16. Add(contaxt app.Context, domain string, ip net.IP)
  17. }
  18. type contextedDnsCache struct {
  19. context app.Context
  20. dnsCache dnsCacheWithContext
  21. }
  22. func (this *contextedDnsCache) Get(domain string) net.IP {
  23. return this.dnsCache.Get(this.context, domain)
  24. }
  25. func (this *contextedDnsCache) Add(domain string, ip net.IP) {
  26. this.dnsCache.Add(this.context, domain, ip)
  27. }
  28. func init() {
  29. app.Register(APP_ID, func(context app.Context, obj interface{}) interface{} {
  30. dcContext := obj.(dnsCacheWithContext)
  31. return &contextedDnsCache{
  32. context: context,
  33. dnsCache: dcContext,
  34. }
  35. })
  36. }