18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AuthenticationCF.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29cad810f21b803229eb11403f9209855525a25d57Steve Block#if USE(CFNETWORK) 30cad810f21b803229eb11403f9209855525a25d57Steve Block 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AuthenticationChallenge.h" 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "AuthenticationClient.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Credential.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ProtectionSpace.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// This header must come before all other CFNetwork headers to work around a CFNetwork bug. It can 3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// be removed entirely once <rdar://problem/9042114> is fixed. 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <CFNetwork/CFURLConnectionPriv.h> 3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <CFNetwork/CFURLAuthChallengePriv.h> 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <CFNetwork/CFURLCredentialPriv.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <CFNetwork/CFURLProtectionSpacePriv.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAuthenticationChallenge::AuthenticationChallenge(const ProtectionSpace& protectionSpace, 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const Credential& proposedCredential, 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned previousFailureCount, 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ResourceResponse& response, 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ResourceError& error) 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : AuthenticationChallengeBase(protectionSpace, 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project proposedCredential, 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project previousFailureCount, 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project response, 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project error) 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAuthenticationChallenge::AuthenticationChallenge(CFURLAuthChallengeRef cfChallenge, 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block AuthenticationClient* authenticationClient) 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : AuthenticationChallengeBase(core(CFURLAuthChallengeGetProtectionSpace(cfChallenge)), 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project core(CFURLAuthChallengeGetProposedCredential(cfChallenge)), 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLAuthChallengeGetPreviousFailureCount(cfChallenge), 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (CFURLResponseRef)CFURLAuthChallengeGetFailureResponse(cfChallenge), 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLAuthChallengeGetError(cfChallenge)) 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , m_authenticationClient(authenticationClient) 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_cfChallenge(cfChallenge) 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool AuthenticationChallenge::platformCompare(const AuthenticationChallenge& a, const AuthenticationChallenge& b) 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (a.authenticationClient() != b.authenticationClient()) 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (a.cfURLAuthChallengeRef() != b.cfURLAuthChallengeRef()) 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCFURLAuthChallengeRef createCF(const AuthenticationChallenge& coreChallenge) 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLProtectionSpaceRef protectionSpace = createCF(coreChallenge.protectionSpace()); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLCredentialRef credential = createCF(coreChallenge.proposedCredential()); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, protectionSpace, credential, 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreChallenge.previousFailureCount(), 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreChallenge.failureResponse().cfURLResponse(), 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreChallenge.error()); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(protectionSpace); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(credential); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCFURLCredentialRef createCF(const Credential& coreCredential) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLCredentialPersistence persistence = kCFURLCredentialPersistenceNone; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (coreCredential.persistence()) { 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CredentialPersistenceNone: 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CredentialPersistenceForSession: 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project persistence = kCFURLCredentialPersistenceForSession; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CredentialPersistencePermanent: 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project persistence = kCFURLCredentialPersistencePermanent; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStringRef user = coreCredential.user().createCFString(); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStringRef password = coreCredential.password().createCFString(); 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLCredentialRef result = CFURLCredentialCreate(0, user, password, 0, persistence); 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(user); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(password); 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCFURLProtectionSpaceRef createCF(const ProtectionSpace& coreSpace) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLProtectionSpaceServerType serverType = kCFURLProtectionSpaceServerHTTP; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (coreSpace.serverType()) { 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceServerHTTP: 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceServerHTTP; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceServerHTTPS: 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceServerHTTPS; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceServerFTP: 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceServerFTP; 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceServerFTPS: 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceServerFTPS; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceProxyHTTP: 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceProxyHTTP; 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceProxyHTTPS: 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceProxyHTTPS; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceProxyFTP: 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceProxyFTP; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceProxySOCKS: 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = kCFURLProtectionSpaceProxySOCKS; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLProtectionSpaceAuthenticationScheme scheme = kCFURLProtectionSpaceAuthenticationSchemeDefault; 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (coreSpace.authenticationScheme()) { 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceAuthenticationSchemeDefault: 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = kCFURLProtectionSpaceAuthenticationSchemeDefault; 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceAuthenticationSchemeHTTPBasic: 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = kCFURLProtectionSpaceAuthenticationSchemeHTTPBasic; 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceAuthenticationSchemeHTTPDigest: 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = kCFURLProtectionSpaceAuthenticationSchemeHTTPDigest; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceAuthenticationSchemeHTMLForm: 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = kCFURLProtectionSpaceAuthenticationSchemeHTMLForm; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceAuthenticationSchemeNTLM: 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = kCFURLProtectionSpaceAuthenticationSchemeNTLM; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ProtectionSpaceAuthenticationSchemeNegotiate: 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = kCFURLProtectionSpaceAuthenticationSchemeNegotiate; 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStringRef host = coreSpace.host().createCFString(); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStringRef realm = coreSpace.realm().createCFString(); 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLProtectionSpaceRef result = CFURLProtectionSpaceCreate(0, host, coreSpace.port(), serverType, realm, scheme); 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(host); 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(realm); 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCredential core(CFURLCredentialRef cfCredential) 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!cfCredential) 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Credential(); 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CredentialPersistence persistence = CredentialPersistenceNone; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (CFURLCredentialGetPersistence(cfCredential)) { 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLCredentialPersistenceNone: 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLCredentialPersistenceForSession: 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project persistence = CredentialPersistenceForSession; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLCredentialPersistencePermanent: 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project persistence = CredentialPersistencePermanent; 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Credential(CFURLCredentialGetUsername(cfCredential), CFURLCredentialCopyPassword(cfCredential), persistence); 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectProtectionSpace core(CFURLProtectionSpaceRef cfSpace) 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ProtectionSpaceServerType serverType = ProtectionSpaceServerHTTP; 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (CFURLProtectionSpaceGetServerType(cfSpace)) { 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceServerHTTP: 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceServerHTTPS: 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceServerHTTPS; 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceServerFTP: 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceServerFTP; 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceServerFTPS: 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceServerFTPS; 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceProxyHTTP: 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceProxyHTTP; 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceProxyHTTPS: 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceProxyHTTPS; 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceProxyFTP: 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceProxyFTP; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceProxySOCKS: 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType = ProtectionSpaceProxySOCKS; 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ProtectionSpaceAuthenticationScheme scheme = ProtectionSpaceAuthenticationSchemeDefault; 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (CFURLProtectionSpaceGetAuthenticationScheme(cfSpace)) { 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceAuthenticationSchemeDefault: 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = ProtectionSpaceAuthenticationSchemeDefault; 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceAuthenticationSchemeHTTPBasic: 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = ProtectionSpaceAuthenticationSchemeHTTPBasic; 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceAuthenticationSchemeHTTPDigest: 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = ProtectionSpaceAuthenticationSchemeHTTPDigest; 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceAuthenticationSchemeHTMLForm: 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = ProtectionSpaceAuthenticationSchemeHTMLForm; 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceAuthenticationSchemeNTLM: 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = ProtectionSpaceAuthenticationSchemeNTLM; 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kCFURLProtectionSpaceAuthenticationSchemeNegotiate: 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme = ProtectionSpaceAuthenticationSchemeNegotiate; 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block scheme = ProtectionSpaceAuthenticationSchemeUnknown; 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ProtectionSpace(CFURLProtectionSpaceGetHost(cfSpace), 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLProtectionSpaceGetPort(cfSpace), 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project serverType, 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLProtectionSpaceGetRealm(cfSpace), 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scheme); 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 274cad810f21b803229eb11403f9209855525a25d57Steve Block 275cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // USE(CFNETWORK) 276