resolv_cache.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (C) 2008 The Android Open Source Project
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * * Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * * Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in
  12. * the documentation and/or other materials provided with the
  13. * distribution.
  14. *
  15. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  16. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  17. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  18. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  19. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  20. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  21. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  22. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  23. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  24. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  25. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26. * SUCH DAMAGE.
  27. */
  28. #pragma once
  29. #include "netd_resolv/resolv.h"
  30. #include <stddef.h>
  31. #include <unordered_map>
  32. #include <vector>
  33. struct __res_state;
  34. constexpr int DNSEVENT_SUBSAMPLING_MAP_DEFAULT_KEY = -1;
  35. /* sets the name server addresses to the provided res_state structure. The
  36. * name servers are retrieved from the cache which is associated
  37. * with the network to which the res_state structure is associated */
  38. void _resolv_populate_res_for_net(struct __res_state* statp);
  39. std::vector<unsigned> resolv_list_caches();
  40. std::vector<std::string> resolv_cache_dump_subsampling_map(unsigned netid);
  41. uint32_t resolv_cache_get_subsampling_denom(unsigned netid, int return_code);
  42. typedef enum {
  43. RESOLV_CACHE_UNSUPPORTED, /* the cache can't handle that kind of queries */
  44. /* or the answer buffer is too small */
  45. RESOLV_CACHE_NOTFOUND, /* the cache doesn't know about this query */
  46. RESOLV_CACHE_FOUND, /* the cache found the answer */
  47. RESOLV_CACHE_SKIP /* Don't do anything on cache */
  48. } ResolvCacheStatus;
  49. ResolvCacheStatus _resolv_cache_lookup(unsigned netid, const void* query, int querylen,
  50. void* answer, int answersize, int* answerlen,
  51. uint32_t flags);
  52. /* add a (query,answer) to the cache, only call if _resolv_cache_lookup
  53. * did return RESOLV_CACHE_NOTFOUND
  54. */
  55. void _resolv_cache_add(unsigned netid, const void* query, int querylen, const void* answer,
  56. int answerlen);
  57. /* Notify the cache a request failed */
  58. void _resolv_cache_query_failed(unsigned netid, const void* query, int querylen, uint32_t flags);
  59. // Sets name servers for a given network.
  60. int resolv_set_nameservers_for_net(unsigned netid, const char** servers, int numservers,
  61. const char* domains, const res_params* params);
  62. // Creates the cache associated with the given network.
  63. int resolv_create_cache_for_net(unsigned netid);
  64. // Deletes the cache associated with the given network.
  65. void resolv_delete_cache_for_net(unsigned netid);