Support variety of IPv6 addresses on RDNS-on-cache

IPv6 address has multiple representation formats. The following
addresses are the same:

  "2001:db8::102:304"
  "2001:0db8:0000:0000:0000:0000:0102:0304"
  "2001:db8::1.2.3.4"

In original design, the RDNS-on-cache can only match IPv6 address with
format "2001:db8::102:304", but not with the others. It is because all
different representations are converted to a single binary form while
they are stored in cache. And of course, it will be a single format if
the cached IP address is converted back to text form while doing text
comparison. In this commit, the RDNS-on-cache converts query address to
binary form and binary compares with cached entry, rather than text
comparison. Also, add two test cases.

Bug: 131051938
Test: atest resolv_cache_unit_test.cpp#GetHostByAddrFromCache_InvalidArgs
      atest resolv_cache_unit_test.cpp#GetHostByAddrFromCache
Change-Id: I064f4bafca91ad7dbbd9b37ce3c2d05f8d6b954d
5 files changed
tree: 8196640f2ad9ac4a4ac90fc1ebb98c4140c226c0
  1. aidl/
  2. apex/
  3. binder/
  4. include/
  5. tests/
  6. .editorconfig
  7. Android.bp
  8. Dns64Configuration.cpp
  9. Dns64Configuration.h
  10. DnsProxyListener.cpp
  11. DnsProxyListener.h
  12. DnsResolver.cpp
  13. DnsResolver.h
  14. dnsresolver_binder_test.cpp
  15. DnsResolverService.cpp
  16. DnsResolverService.h
  17. DnsStats.cpp
  18. DnsStats.h
  19. DnsStatsTest.cpp
  20. DnsTlsDispatcher.cpp
  21. DnsTlsDispatcher.h
  22. DnsTlsQueryMap.cpp
  23. DnsTlsQueryMap.h
  24. DnsTlsServer.cpp
  25. DnsTlsServer.h
  26. DnsTlsSessionCache.cpp
  27. DnsTlsSessionCache.h
  28. DnsTlsSocket.cpp
  29. DnsTlsSocket.h
  30. DnsTlsSocketFactory.h
  31. DnsTlsTransport.cpp
  32. DnsTlsTransport.h
  33. getaddrinfo.cpp
  34. getaddrinfo.h
  35. gethnamaddr.cpp
  36. gethnamaddr.h
  37. hostent.h
  38. IDnsTlsSocket.h
  39. IDnsTlsSocketFactory.h
  40. IDnsTlsSocketObserver.h
  41. libnetd_resolv.map.txt
  42. LockedQueue.h
  43. NOTICE
  44. OWNERS
  45. PREUPLOAD.cfg
  46. PrivateDnsConfiguration.cpp
  47. PrivateDnsConfiguration.h
  48. README-DoT.md
  49. README.md
  50. res_cache.cpp
  51. res_comp.cpp
  52. res_debug.cpp
  53. res_debug.h
  54. res_init.cpp
  55. res_init.h
  56. res_mkquery.cpp
  57. res_query.cpp
  58. res_send.cpp
  59. res_send.h
  60. res_stats.cpp
  61. resolv_cache.h
  62. resolv_cache_unit_test.cpp
  63. resolv_integration_test.cpp
  64. resolv_private.h
  65. resolv_tls_unit_test.cpp
  66. resolv_unit_test.cpp
  67. ResolverController.cpp
  68. ResolverController.h
  69. ResolverEventReporter.cpp
  70. ResolverEventReporter.h
  71. ResolverStats.h
  72. sethostent.cpp
  73. stats.proto
  74. TEST_MAPPING
README.md

Logging

This code uses LOG(X) for logging. Log levels are VERBOSE,DEBUG,INFO,WARNING and ERROR. The default setting is WARNING and logs relate to WARNING and ERROR will be shown. If you want to enable the DEBUG level logs, using following command. adb shell service call dnsresolver 10 i32 1 VERBOSE 0 DEBUG 1 INFO 2 WARNING 3 ERROR 4 Verbose resolver logs could contain PII -- do NOT enable in production builds.