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