Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5448c9e4 authored by Mike Yu's avatar Mike Yu
Browse files

Apply PrivateDnsValidationObserver to DnsTlsDispatcher

Also aligh the life time of DnsTlsDispatcher with
PrivateDnsConfiguration's so that the DnsTlsDispatcher won't miss
any notification.

Bug: 79727473
Test: cd packages/modules/DnsResolver && atest with the flag on/off
Change-Id: Iaf1c809b79373b6846e6535aa6f0c619f430898c
parent a6853e8b
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@

#include "DnsProxyListener.h"
#include "DnsResolverService.h"
#include "DnsTlsDispatcher.h"
#include "PrivateDnsConfiguration.h"
#include "netd_resolv/resolv.h"
#include "res_debug.h"
#include "util.h"
@@ -72,6 +74,14 @@ DnsResolver* DnsResolver::getInstance() {
    return &instance;
}

DnsResolver::DnsResolver() {
    // TODO: make them member variables after fixing the circular dependency:
    //   DnsTlsDispatcher.h -> resolv_private.h -> DnsResolver.h -> DnsTlsDispatcher.h
    auto& dnsTlsDispatcher = DnsTlsDispatcher::getInstance();
    auto& privateDnsConfiguration = PrivateDnsConfiguration::getInstance();
    privateDnsConfiguration.setObserver(&dnsTlsDispatcher);
}

bool DnsResolver::start() {
    if (!verifyCallbacks()) {
        LOG(ERROR) << __func__ << ": Callback verification failed";
+2 −1
Original line number Diff line number Diff line
@@ -40,7 +40,8 @@ class DnsResolver {
    ResolverController resolverCtrl;

  private:
    DnsResolver() {}
    DnsResolver();

    DnsProxyListener mDnsProxyListener;
    DnsQueryLog mQueryLog;
};
+5 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include "DnsTlsServer.h"
#include "DnsTlsTransport.h"
#include "IDnsTlsSocketFactory.h"
#include "PrivateDnsValidationObserver.h"
#include "resolv_private.h"

namespace android {
@@ -35,7 +36,7 @@ namespace net {

// This is a singleton class that manages the collection of active DnsTlsTransports.
// Queries made here are dispatched to an existing or newly constructed DnsTlsTransport.
class DnsTlsDispatcher {
class DnsTlsDispatcher : public PrivateDnsValidationObserver {
  public:
    // Constructor with dependency injection for testing.
    explicit DnsTlsDispatcher(std::unique_ptr<IDnsTlsSocketFactory> factory)
@@ -60,6 +61,9 @@ class DnsTlsDispatcher {
                                    const netdutils::Slice query, const netdutils::Slice ans,
                                    int* _Nonnull resplen, bool* _Nonnull connectTriggered);

    // Implement PrivateDnsValidationObserver.
    void onValidationStateUpdate(const std::string&, Validation, uint32_t) override{};

  private:
    DnsTlsDispatcher();

+2 −1
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ class PrivateDnsConfiguration {
        }
    };

    void setObserver(PrivateDnsValidationObserver* observer);

  private:
    typedef std::map<ServerIdentity, DnsTlsServer> PrivateDnsTracker;
    typedef std::set<DnsTlsServer, AddressComparator> ThreadTracker;
@@ -114,7 +116,6 @@ class PrivateDnsConfiguration {
    // Any pending validation threads will continue running because we have no way to cancel them.
    std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock);

    void setObserver(PrivateDnsValidationObserver* observer);
    void notifyValidationStateUpdate(const std::string& serverIp, Validation validation,
                                     uint32_t netId) const REQUIRES(mPrivateDnsLock);