forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set sw=2 ts=8 et tw=80 : */
 | |
| /* 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/. */
 | |
| 
 | |
| #include "DNSServiceBase.h"
 | |
| 
 | |
| #include "DNS.h"
 | |
| #include "mozilla/Preferences.h"
 | |
| #include "mozilla/StaticPrefs_network.h"
 | |
| #include "nsIDNSService.h"
 | |
| #include "nsIProtocolProxyService2.h"
 | |
| #include "nsIPrefBranch.h"
 | |
| 
 | |
| namespace mozilla::net {
 | |
| 
 | |
| static const char kPrefProxyType[] = "network.proxy.type";
 | |
| static const char kPrefDisablePrefetch[] = "network.dns.disablePrefetch";
 | |
| static const char kPrefNetworkProxySOCKS[] = "network.proxy.socks";
 | |
| 
 | |
| NS_IMPL_ISUPPORTS(DNSServiceBase, nsIObserver)
 | |
| 
 | |
| void DNSServiceBase::AddPrefObserver(nsIPrefBranch* aPrefs) {
 | |
|   aPrefs->AddObserver(kPrefProxyType, this, false);
 | |
|   aPrefs->AddObserver(kPrefDisablePrefetch, this, false);
 | |
|   // Monitor these to see if there is a change in proxy configuration
 | |
|   aPrefs->AddObserver(kPrefNetworkProxySOCKS, this, false);
 | |
| }
 | |
| 
 | |
| void DNSServiceBase::ReadPrefs(const char* aName) {
 | |
|   if (!aName || !strcmp(aName, kPrefNetworkProxySOCKS)) {
 | |
|     nsAutoCString socks;
 | |
|     if (NS_SUCCEEDED(Preferences::GetCString(kPrefNetworkProxySOCKS, socks))) {
 | |
|       mHasSocksProxy = !socks.IsEmpty();
 | |
|     }
 | |
|   }
 | |
|   if (!aName || !strcmp(aName, kPrefDisablePrefetch) ||
 | |
|       !strcmp(aName, kPrefProxyType)) {
 | |
|     mDisablePrefetch = Preferences::GetBool(kPrefDisablePrefetch, false) ||
 | |
|                        (StaticPrefs::network_proxy_type() ==
 | |
|                         nsIProtocolProxyService::PROXYCONFIG_MANUAL);
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool DNSServiceBase::DNSForbiddenByActiveProxy(const nsACString& aHostname,
 | |
|                                                uint32_t aFlags) {
 | |
|   if (aFlags & nsIDNSService::RESOLVE_IGNORE_SOCKS_DNS) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   // We should avoid doing DNS when a proxy is in use.
 | |
|   if (StaticPrefs::network_proxy_type() ==
 | |
|           nsIProtocolProxyService::PROXYCONFIG_MANUAL &&
 | |
|       mHasSocksProxy && StaticPrefs::network_proxy_socks_remote_dns()) {
 | |
|     // Allow IP lookups through, but nothing else.
 | |
|     if (!HostIsIPLiteral(aHostname)) {
 | |
|       return true;
 | |
|     }
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| }  // namespace mozilla::net
 | 
