diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /netwerk/dns/ODoHService.h | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'netwerk/dns/ODoHService.h')
-rw-r--r-- | netwerk/dns/ODoHService.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/netwerk/dns/ODoHService.h b/netwerk/dns/ODoHService.h new file mode 100644 index 0000000000..4e09ebe398 --- /dev/null +++ b/netwerk/dns/ODoHService.h @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef ODoHService_h_ +#define ODoHService_h_ + +#include "DNS.h" +#include "mozilla/Atomics.h" +#include "mozilla/Maybe.h" +#include "mozilla/Mutex.h" +#include "nsString.h" +#include "nsIDNSListener.h" +#include "nsIObserver.h" +#include "nsIStreamLoader.h" +#include "nsITimer.h" +#include "nsWeakReference.h" + +namespace mozilla { +namespace net { + +class ODoH; + +class ODoHService : public nsIDNSListener, + public nsIObserver, + public nsSupportsWeakReference, + public nsITimerCallback, + public nsINamed, + public nsIStreamLoaderObserver { + public: + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIDNSLISTENER + NS_DECL_NSIOBSERVER + NS_DECL_NSITIMERCALLBACK + NS_DECL_NSINAMED + NS_DECL_NSISTREAMLOADEROBSERVER + + ODoHService(); + bool Init(); + bool Enabled() const; + + const Maybe<nsTArray<ObliviousDoHConfig>>& ODoHConfigs(); + void AppendPendingODoHRequest(ODoH* aRequest); + bool RemovePendingODoHRequest(ODoH* aRequest); + void GetRequestURI(nsACString& aResult); + // Send a DNS query to reterive the ODoHConfig. + nsresult UpdateODoHConfig(); + + private: + virtual ~ODoHService(); + nsresult ReadPrefs(const char* aName); + void OnODoHPrefsChange(bool aInit); + void BuildODoHRequestURI(); + void StartTTLTimer(uint32_t aTTL); + void OnODohConfigsURIChanged(); + void ODoHConfigUpdateDone(uint32_t aTTL, Span<const uint8_t> aRawConfig); + nsresult UpdateODoHConfigFromHTTPSRR(); + nsresult UpdateODoHConfigFromURI(); + + mozilla::Mutex mLock; + Atomic<bool, Relaxed> mQueryODoHConfigInProgress; + nsCString mODoHProxyURI MOZ_GUARDED_BY(mLock); + nsCString mODoHTargetHost MOZ_GUARDED_BY(mLock); + nsCString mODoHTargetPath MOZ_GUARDED_BY(mLock); + nsCString mODoHRequestURI MOZ_GUARDED_BY(mLock); + nsCString mODoHConfigsUri MOZ_GUARDED_BY(mLock); + Maybe<nsTArray<ObliviousDoHConfig>> mODoHConfigs MOZ_GUARDED_BY(mLock); + nsTArray<RefPtr<ODoH>> mPendingRequests MOZ_GUARDED_BY(mLock); + // This timer is always touched on main thread to avoid race conditions. + nsCOMPtr<nsITimer> mTTLTimer; + nsCOMPtr<nsIStreamLoader> mLoader MOZ_GUARDED_BY(mLock); +}; + +extern ODoHService* gODoHService; + +} // namespace net +} // namespace mozilla + +#endif |