proxy_server_mac.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/proxy/proxy_server.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <CoreFoundation/CoreFoundation.h> 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string> 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/mac_util.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/sys_string_conversions.h" 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottProxyServer ProxyServer::FromDictionary(Scheme scheme, 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFDictionaryRef dict, 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFStringRef host_key, 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFStringRef port_key) { 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (scheme == SCHEME_INVALID || scheme == SCHEME_DIRECT) { 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // No hostname port to extract; we are done. 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ProxyServer(scheme, HostPortPair()); 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFStringRef host_ref = 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (CFStringRef)mac_util::GetValueFromDictionary(dict, host_key, 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFStringGetTypeID()); 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (!host_ref) { 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott LOG(WARNING) << "Could not find expected key " 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << base::SysCFStringRefToUTF8(host_key) 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << " in the proxy dictionary"; 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return ProxyServer(); // Invalid. 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string host = base::SysCFStringRefToUTF8(host_ref); 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFNumberRef port_ref = 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (CFNumberRef)mac_util::GetValueFromDictionary(dict, port_key, 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFNumberGetTypeID()); 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int port; 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (port_ref) { 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CFNumberGetValue(port_ref, kCFNumberIntType, &port); 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else { 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott port = GetDefaultPortForScheme(scheme); 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ProxyServer(scheme, HostPortPair(host, port)); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 52