Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1336)

Unified Diff: net/network_config.h

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/net_utils_unittest.cc ('k') | net/network_config.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/network_config.h
diff --git a/net/network_config.h b/net/network_config.h
deleted file mode 100644
index abb3be6ebfb568949824d5564cbf0a3e354db740..0000000000000000000000000000000000000000
--- a/net/network_config.h
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright 2007-2010 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-
-// TODO(omaha): might need to remove dependency on winhttp.h when implementing
-// support for wininet; see http://b/1119232
-
-#ifndef OMAHA_NET_NETWORK_CONFIG_H__
-#define OMAHA_NET_NETWORK_CONFIG_H__
-
-#include <windows.h>
-#include <winhttp.h>
-#include <atlstr.h>
-#include <map>
-#include <vector>
-#include "base/basictypes.h"
-#include "base/scoped_ptr.h"
-#include "omaha/base/scoped_any.h"
-#include "omaha/base/synchronized.h"
-#include "omaha/net/detector.h"
-#include "omaha/net/http_client.h"
-#include "omaha/net/proxy_auth.h"
-
-namespace ATL {
-
-class CSecurityDesc;
-
-} // namespace ATL
-
-namespace omaha {
-
-class RegKey;
-
-// The cup credentials are persisted across sessions. The sk is encrypted
-// while on the disk so only a user with the same login credentials as
-// the encryptor can decrypt it. The credentials are protected
-// using the system default security, so users can't modify each other's
-// credentials. In case of elevated administrators, the credentials are
-// protected from the non-elevated administrators, so the latter can't
-// read the keys and attack the elevated administrator.
-//
-// Cup credentials can be negotiated using either production keys or
-// test keys. There is a registry value override to specify that test keys
-// be used. For the change to be effective, the old credentials must be cleared.
-struct CupCredentials {
- std::vector<uint8> sk; // shared key (sk)
- CStringA c; // client cookie (c)
-};
-
-// There are three ways by which an application could connect to the Internet:
-// 1. Direct connection.
-// The config for the direction connection must not specify WPAD information
-// nor named proxy information.
-// 2. Named proxy.
-// The config for named proxy only includes proxy and proxy_bypass.
-// 3. Proxy auto detection.
-// The config for proxy auto detection should include either the auto-detect
-// flag or the auto configuration url. Named proxy information is discarded
-// if present.
-struct ProxyConfig {
- ProxyConfig() : auto_detect(false), priority(PROXY_PRIORITY_DEFAULT_NORMAL) {}
-
- // Used to uniquely identify a proxy.
- CString source;
-
- // Specifies the configuration is WPAD.
- bool auto_detect;
-
- // The url of the proxy configuration script, if known.
- CString auto_config_url;
-
- // Named proxy information.
- // The proxy string is usually something as "http=foo:80;https=bar:8080".
- // According to the documentation for WINHTTP_PROXY_INFO, multiple proxies
- // are separated by semicolons or whitespace. The documentation for
- // IBackgroundCopyJob::SetProxySettings says that the list is
- // space-delimited.
- // TODO(omaha): our proxy information is semicolon-separated. This may
- // result in compatibility problems with BITS. Fix this.
- CString proxy;
- CString proxy_bypass;
-
- // Suggested priority of the proxy config. When establishing network
- // connections, it is a good idea to try higher priority proxy first.
- enum Priority {
- PROXY_PRIORITY_DEFAULT_NORMAL = 0,
- PROXY_PRIORITY_DEFAULT_BROWSER = 1,
- PROXY_PRIORITY_LAST_KNOWN_GOOD = 2,
- PROXY_PRIORITY_OVERRIDE = 3,
- } priority;
-};
-
-// Manages the network configurations.
-class NetworkConfig {
- public:
- // Abstracts the Internet session, as provided by winhttp or wininet.
- // A winhttp session should map to one and only one identity. in other words,
- // a winhttp session is used to manage the network traffic of a single
- // authenticated user, or a group of anonymous users.
- struct Session {
- Session() : session_handle(NULL) {}
-
- HINTERNET session_handle;
- };
-
- // Hooks up a proxy detector. The class takes ownership of the detector.
- void Add(ProxyDetectorInterface* detector);
-
- // Clears all detectors and configurations. It does not clear the session.
- // TODO(omaha): rename to avoid the confusion that Clear clears the sessions
- // as well.
- void Clear();
-
- // Detects the network configuration for each of the registered detectors.
- HRESULT Detect();
-
- // Detects the network configuration for the given source.
- HRESULT Detect(const CString& proxy_source, ProxyConfig* config) const;
-
- static HRESULT ConfigFromIdentifier(const CString& id, ProxyConfig* config);
-
- static bool ProxySortPredicate(const ProxyConfig& config1,
- const ProxyConfig& config2) {
- return config1.priority > config2.priority;
- }
-
- // Sort the proxy configs based on their priorities. Proxy with higher
- // priority precedes that with lower priority.
- static void SortProxies(std::vector<ProxyConfig>* configurations);
-
- void AppendLastKnownGoodProxyConfig(
- std::vector<ProxyConfig>* configurations) const;
-
- // Adds static configurations (WPAD & direct) to current detected network
- // configuration list.
- static void AppendStaticProxyConfigs(
- std::vector<ProxyConfig>* configurations);
-
- // Returns the detected configurations.
- std::vector<ProxyConfig> GetConfigurations() const;
-
- // Gets the persisted CUP credentials.
- HRESULT GetCupCredentials(CupCredentials* cup_credentials) const;
-
- // Saves the CUP credentials in persistent storage. If the parameter is null,
- // it clears the credentials.
- HRESULT SetCupCredentials(const CupCredentials* cup_credentials) const;
-
- // Prompts for credentials, or gets cached credentials if they exist.
- bool GetProxyCredentials(bool allow_ui,
- bool force_ui,
- const CString& proxy_settings,
- const ProxyAuthConfig& proxy_auth_config,
- bool is_https,
- CString* username,
- CString* password,
- uint32* auth_scheme);
-
- // Once a auth scheme has been verified against a proxy, this allows a client
- // to record the auth scheme that was used and was successful, so it can be
- // cached for future use within this process.
- HRESULT SetProxyAuthScheme(const CString& proxy_settings,
- bool is_https,
- uint32 auth_scheme);
-
- // Runs the WPAD protocol to compute the proxy information to be used
- // for the given url. The ProxyInfo pointer members must be freed using
- // GlobalFree.
- HRESULT GetProxyForUrl(const CString& url,
- const CString& auto_config_url,
- HttpClient::ProxyInfo* proxy_info);
-
- Session session() const { return session_; }
-
- // Returns the global configuration override if available.
- HRESULT GetConfigurationOverride(ProxyConfig* configuration_override);
-
- // Sets the global configuration override. The function clears the existing
- // configuration if the parameter is NULL.
- void SetConfigurationOverride(const ProxyConfig* configuration_override);
-
- // True if the CUP test keys are being used to negotiate the CUP
- // credentials.
- bool static IsUsingCupTestKeys();
-
- // Returns the prefix of the user agent string.
- static CString GetUserAgent();
-
- // Returns the MID value under UpdateDev.
- static CString GetMID();
-
- // Eliminates the redundant configurations, for example, if multiple
- // direct connection or proxy auto-detect occur.
- static void RemoveDuplicates(std::vector<ProxyConfig>*);
-
- // Saves/loads a proxy source and auto_detect information to the registry
- // so that that proxy can be tried with high priority when establishing
- // network connections later on.
- static HRESULT SaveProxyConfig(const ProxyConfig& config);
- HRESULT LoadProxyConfig(ProxyConfig* config) const;
-
- // Parses a network configuration string. The format of the string is:
- // wpad=[false|true];script=script_url;proxy=host:port
- // Ignores the names and the values it does not understand.
- static ProxyConfig ParseNetConfig(const CString& net_config);
-
- // Serializes configurations for debugging purposes.
- static CString ToString(const std::vector<ProxyConfig>& configurations);
- static CString ToString(const ProxyConfig& configuration);
-
- static int GetAccessType(const ProxyConfig& config);
-
- // Returns s1 + delim + s2. Consider making it an utility function if
- // more usage patterns are found.
- static CString JoinStrings(const TCHAR* s1,
- const TCHAR* s2,
- const TCHAR* delim);
-
- // Uses jsproxy to use a PAC proxy configuration file stored on the local
- // drive, instead of one sourced from WPAD.
- static HRESULT GetProxyForUrlLocal(const CString& url,
- const CString& path_to_pac_file,
- HttpClient::ProxyInfo* proxy_info);
-
- private:
- explicit NetworkConfig(bool is_machine);
- ~NetworkConfig();
-
- HRESULT Initialize();
-
- // Configures the proxy auth credentials options. Called by Initialize().
- void ConfigureProxyAuth();
-
- // Creates the proxy configuration registry key for the calling user
- // identified by the token.
- static HRESULT CreateProxyConfigRegKey(RegKey* key);
-
- // Converts a response string from a PAC script into an WinHTTP proxy
- // descriptor struct.
- static void ConvertPacResponseToProxyInfo(const CStringA& response,
- HttpClient::ProxyInfo* proxy_info);
-
- static const TCHAR* const kUserAgent;
-
- static const TCHAR* const kRegKeyProxy;
- static const TCHAR* const kRegValueSource;
-
- static const TCHAR* const kWPADIdentifier;
- static const TCHAR* const kDirectConnectionIdentifier;
-
- bool is_machine_; // True if the instance is initialized for machine.
-
- std::vector<ProxyConfig> configurations_;
- std::vector<ProxyDetectorInterface*> detectors_;
-
- // Synchronizes access to per-process instance data, which includes
- // the detectors and configurations.
- LLock lock_;
-
- bool is_initialized_;
-
- scoped_ptr<ProxyConfig> configuration_override_;
-
- Session session_;
- scoped_ptr<HttpClient> http_client_;
-
- // Manages the proxy auth credentials. Typically a http client tries to
- // use autologon via Negotiate/NTLM with a proxy server. If that fails, the
- // Http client then calls GetProxyCredentials() on NetworkConfig.
- // GetProxyCredentials() gets credentials by either prompting the user, or
- // cached credentials. Then the http client tries again. Options are set via
- // ConfigureProxyAuth().
- ProxyAuth proxy_auth_;
-
- friend class NetworkConfigManager;
- DISALLOW_EVIL_CONSTRUCTORS(NetworkConfig);
-};
-
-class NetworkConfigManager {
- public:
- static NetworkConfigManager& Instance();
- static void DeleteInstance();
-
- // Directs this singleton class to create machine or user instance.
- static void set_is_machine(bool is_machine);
-
- HRESULT GetUserNetworkConfig(NetworkConfig** network_config);
-
- // Gets the persisted CUP credentials.
- HRESULT GetCupCredentials(CupCredentials* cup_credentials);
-
- // Saves the CUP credentials in persistent storage.
- HRESULT SetCupCredentials(const CupCredentials& cup_credentials);
-
- void ClearCupCredentials();
-
- private:
- explicit NetworkConfigManager();
- ~NetworkConfigManager();
-
- static HRESULT CreateInstance();
-
- void DeleteInstanceInternal();
-
- HRESULT InitializeLock();
- HRESULT InitializeRegistryKey();
-
- HRESULT CreateNetworkConfigInstance(NetworkConfig** network_config_ptr,
- bool is_machine);
- HRESULT LoadCupCredentialsFromRegistry();
- HRESULT SaveCupCredentialsToRegistry();
-
- std::map<CString, NetworkConfig*> user_network_config_map_;
- scoped_ptr<CupCredentials> cup_credentials_;
-
- LLock lock_;
-
- // Synchronizes access to CUP registry.
- GLock global_lock_;
-
- // Registry sub key where network configuration is persisted.
- static const TCHAR* const kNetworkSubkey;
-
- // Registry sub key where CUP configuration is persisted.
- static const TCHAR* const kNetworkCupSubkey;
-
- // The secret key must be encrypted by the caller. This class does not do any
- // encryption.
- static const TCHAR* const kCupClientSecretKey; // CUP sk.
- static const TCHAR* const kCupClientCookie; // CUP c.
-
- static const NetworkConfigManager* const kInvalidInstance;
- static NetworkConfigManager* instance_;
- static LLock instance_lock_;
- static bool is_machine_;
-
- DISALLOW_EVIL_CONSTRUCTORS(NetworkConfigManager);
-};
-
-} // namespace omaha
-
-#endif // OMAHA_NET_NETWORK_CONFIG_H__
-
« no previous file with comments | « net/net_utils_unittest.cc ('k') | net/network_config.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698