WebCore:
[WebKit-https.git] / WebCore / platform / network / ProtectionSpace.cpp
1 /*
2  * Copyright (C) 2007 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25 #include "config.h"
26 #include "ProtectionSpace.h"
27
28 namespace WebCore {
29
30 // Need to enforce empty, non-null strings due to the pickiness of the String == String operator
31 // combined with the semantics of the String(NSString*) constructor
32 ProtectionSpace::ProtectionSpace()
33     : m_host("")
34     , m_realm("")
35 {
36 }
37  
38 // Need to enforce empty, non-null strings due to the pickiness of the String == String operator
39 // combined with the semantics of the String(NSString*) constructor
40 ProtectionSpace::ProtectionSpace(const String& host, int port, ProtectionSpaceServerType serverType, const String& realm, ProtectionSpaceAuthenticationScheme authenticationScheme)
41     : m_host(host.length() ? host : "")
42     , m_port(port)
43     , m_serverType(serverType)
44     , m_realm(realm.length() ? host : "")
45     , m_authenticationScheme(authenticationScheme)
46 {    
47 }
48     
49 const String& ProtectionSpace::host() const 
50
51     return m_host; 
52 }
53
54 int ProtectionSpace::port() const 
55 {
56     return m_port; 
57 }
58
59 ProtectionSpaceServerType ProtectionSpace::serverType() const 
60 {
61     return m_serverType; 
62 }
63
64 bool ProtectionSpace::isProxy() const
65 {
66     return (m_serverType == ProtectionSpaceProxyHTTP ||
67             m_serverType == ProtectionSpaceProxyHTTPS ||
68             m_serverType == ProtectionSpaceProxyFTP ||
69             m_serverType == ProtectionSpaceProxySOCKS);
70 }
71
72 const String& ProtectionSpace::realm() const 
73
74     return m_realm; 
75 }
76
77 ProtectionSpaceAuthenticationScheme ProtectionSpace::authenticationScheme() const 
78
79     return m_authenticationScheme; 
80 }
81
82 bool ProtectionSpace::receivesCredentialSecurely() const
83 {
84     return (m_serverType == ProtectionSpaceServerHTTPS ||
85             m_serverType == ProtectionSpaceServerFTPS ||
86             m_serverType == ProtectionSpaceProxyHTTPS ||
87             m_authenticationScheme == ProtectionSpaceAuthenticationSchemeHTTPDigest);
88 }
89
90 bool operator==(const ProtectionSpace& a, const ProtectionSpace& b)
91 {
92     if (a.host() != b.host())
93         return false;
94     if (a.port() != b.port())
95         return false;
96     if (a.serverType() != b.serverType())
97         return false;
98     if (a.realm() != b.realm())
99         return false;
100     if (a.authenticationScheme() != b.authenticationScheme())
101         return false;
102     
103     return true;
104 }
105
106 }
107
108