HttpsURLConnectionImpl.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.luni.internal.net.www.protocol.https;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.ProtocolException;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Proxy;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN andorid-removed
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// copied from newer version of harmony
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import java.net.Socket;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Principal;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.Certificate;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLPeerUnverifiedException;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.net.ssl.SSLSocket;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.internal.nls.Messages;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HttpsURLConnection implementation.
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class HttpsURLConnection extends javax.net.ssl.HttpsURLConnection {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Https engine to be wrapped
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final HttpsEngine httpsEngine;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // SSLSocket to be used for connection
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private SSLSocket sslSocket;
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected HttpsURLConnection(URL url, int port) {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(url);
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine = new HttpsEngine(url, port);
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected HttpsURLConnection(URL url, int port, Proxy proxy) {
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(url);
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine = new HttpsEngine(url, port, proxy);
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getCipherSuite() {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (sslSocket == null) {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalStateException(Messages.getString("luni.00")); //$NON-NLS-1$
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return sslSocket.getSession().getCipherSuite();
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Certificate[] getLocalCertificates() {
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (sslSocket == null) {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalStateException(Messages.getString("luni.00")); //$NON-NLS-1$
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return sslSocket.getSession().getLocalCertificates();
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Certificate[] getServerCertificates()
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws SSLPeerUnverifiedException {
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (sslSocket == null) {
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalStateException(Messages.getString("luni.00")); //$NON-NLS-1$
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return sslSocket.getSession().getPeerCertificates();
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (sslSocket == null) {
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalStateException(Messages.getString("luni.00")); //$NON-NLS-1$
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return sslSocket.getSession().getPeerPrincipal();
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Principal getLocalPrincipal() {
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (sslSocket == null) {
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalStateException(Messages.getString("luni.00")); //$NON-NLS-1$
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return sslSocket.getSession().getLocalPrincipal();
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void disconnect() {
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.disconnect();
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public InputStream getErrorStream() {
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getErrorStream();
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getRequestMethod() {
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getRequestMethod();
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getResponseCode() throws IOException {
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getResponseCode();
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getResponseMessage() throws IOException {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getResponseMessage();
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setRequestMethod(String method) throws ProtocolException {
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setRequestMethod(method);
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean usingProxy() {
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.usingProxy();
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean getInstanceFollowRedirects() {
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getInstanceFollowRedirects();
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setInstanceFollowRedirects(boolean followRedirects) {
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setInstanceFollowRedirects(followRedirects);
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void connect() throws IOException {
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.connect();
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean getAllowUserInteraction() {
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getAllowUserInteraction();
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Object getContent() throws IOException {
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getContent();
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @SuppressWarnings("unchecked") // Spec does not generify
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Object getContent(Class[] types) throws IOException {
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getContent(types);
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getContentEncoding() {
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getContentEncoding();
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getContentLength() {
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getContentLength();
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getContentType() {
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getContentType();
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public long getDate() {
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getDate();
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean getDefaultUseCaches() {
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getDefaultUseCaches();
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean getDoInput() {
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getDoInput();
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean getDoOutput() {
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getDoOutput();
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public long getExpiration() {
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getExpiration();
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getHeaderField(int pos) {
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getHeaderField(pos);
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Map<String, List<String>> getHeaderFields() {
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getHeaderFields();
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Map<String, List<String>> getRequestProperties() {
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getRequestProperties();
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void addRequestProperty(String field, String newValue) {
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.addRequestProperty(field, newValue);
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getHeaderField(String key) {
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getHeaderField(key);
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public long getHeaderFieldDate(String field, long defaultValue) {
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getHeaderFieldDate(field, defaultValue);
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getHeaderFieldInt(String field, int defaultValue) {
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getHeaderFieldInt(field, defaultValue);
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getHeaderFieldKey(int posn) {
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getHeaderFieldKey(posn);
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public long getIfModifiedSince() {
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getIfModifiedSince();
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public InputStream getInputStream() throws IOException {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getInputStream();
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public long getLastModified() {
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getLastModified();
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public OutputStream getOutputStream() throws IOException {
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getOutputStream();
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public Permission getPermission() throws IOException {
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getPermission();
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getRequestProperty(String field) {
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getRequestProperty(field);
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public URL getURL() {
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getURL();
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean getUseCaches() {
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getUseCaches();
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setAllowUserInteraction(boolean newValue) {
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setAllowUserInteraction(newValue);
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setDefaultUseCaches(boolean newValue) {
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setDefaultUseCaches(newValue);
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setDoInput(boolean newValue) {
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setDoInput(newValue);
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setDoOutput(boolean newValue) {
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setDoOutput(newValue);
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setIfModifiedSince(long newValue) {
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setIfModifiedSince(newValue);
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setRequestProperty(String field, String newValue) {
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setRequestProperty(field, newValue);
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setUseCaches(boolean newValue) {
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setUseCaches(newValue);
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setConnectTimeout(int timeout) {
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setConnectTimeout(timeout);
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getConnectTimeout() {
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getConnectTimeout();
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setReadTimeout(int timeout) {
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpsEngine.setReadTimeout(timeout);
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getReadTimeout() {
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.getReadTimeout();
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String toString() {
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return httpsEngine.toString();
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * HttpsEngine
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private class HttpsEngine extends HttpURLConnection {
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // In case of using proxy this field indicates
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // if it is a SSL Tunnel establishing stage
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private boolean makingSSLTunnel;
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected HttpsEngine(URL url, int port) {
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(url, port);
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected HttpsEngine(URL url, int port, Proxy proxy) {
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(url, port, proxy);
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void connect() throws IOException {
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (connected) {
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (usingProxy() && !makingSSLTunnel) {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // SSL Tunnel through the proxy was not established yet, do so
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                makingSSLTunnel = true;
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // first - make the connection
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                super.connect();
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // keep request method
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                String save_meth = method;
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // make SSL Tunnel
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                method = "CONNECT"; //$NON-NLS-1$
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    doRequest();
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    endRequest();
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } finally {
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // restore initial request method
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    method = save_meth;
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (!connected) {
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    throw new IOException(Messages.getString("luni.01", //$NON-NLS-1$
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            responseMessage, responseCode));
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // if there are some remaining data in the stream - read it out
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // BEGIN andorid-changed
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // copied from newer version of harmony
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InputStream is = connection.getInputStream();
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // END android-changed
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                while (is.available() != 0) {
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    is.read();
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                makingSSLTunnel = false;
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // no need in SSL tunnel
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                super.connect();
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (!makingSSLTunnel) {
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // BEGIN andorid-changed
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // copied from newer version of harmony
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                sslSocket = connection.getSecureSocket(getSSLSocketFactory(), getHostnameVerifier());
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setUpTransportIO(connection);
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // END android-changed
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected String requestString() {
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (usingProxy()) {
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (makingSSLTunnel) {
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // we are making the SSL Tunneling, return remotehost:port
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    int port = url.getPort();
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    return (port > 0) ? url.getHost() + ":" + port //$NON-NLS-1$
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    : url.getHost();
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // we has made SSL Tunneling, return /requested.data
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                String file = url.getFile();
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (file == null || file.length() == 0) {
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    file = "/"; //$NON-NLS-1$
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return file;
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.requestString();
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-removed
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // /**
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //  * Create the secure socket over the connected socket and verify remote
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //  * hostname.
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //  */
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // private Socket wrapConnection(Socket socket) throws IOException {
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     String hostname = url.getHost();
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     // create the wrapper over connected socket
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     sslSocket = (SSLSocket) getSSLSocketFactory().createSocket(socket,
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //             hostname, url.getPort(), true);
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     sslSocket.setUseClientMode(true);
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     sslSocket.startHandshake();
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     if (!getHostnameVerifier().verify(hostname, sslSocket.getSession())) {
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //         throw new IOException(Messages.getString("luni.02", hostname)); //$NON-NLS-1$
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     }
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //     return sslSocket;
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // }
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-removed
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
453