Browse Source
Previously all HTTP communication was done with the help of java.net.HttpUrlConnection. In order to make JGit usable in environments where the direct usage of such connections is not allowed but where the environment provides other means to get network connections an abstraction for connections is introduced. The idea is that new implementations of this interface will be introduced which will not use java.net.HttpUrlConnection but use e.g. org.apache.client.http.HttpClient to provide network connections. One example: certain cloud infrastructures don't allow that components in the cloud communicate directly with HttpUrlConnection. Instead they provide services where a component can ask for a connection (given a symbolic name for the destination) and where the infrastructure returns a preconfigured org.apache.http.client.HttpClient. In order to allow JGit to be running in such environments we need the abstraction introduced in this commit. Change-Id: I3b06629f90a118bd284e55bb3f6465fe7d10463d Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>stable-3.3
Christian Halstrick
11 years ago
12 changed files with 741 additions and 55 deletions
@ -0,0 +1,19 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<component id="org.eclipse.jgit" version="2"> |
||||||
|
<resource path="META-INF/MANIFEST.MF"> |
||||||
|
<filter id="923795461"> |
||||||
|
<message_arguments> |
||||||
|
<message_argument value="3.3.0"/> |
||||||
|
<message_argument value="3.2.0"/> |
||||||
|
</message_arguments> |
||||||
|
</filter> |
||||||
|
</resource> |
||||||
|
<resource path="src/org/eclipse/jgit/transport/TransportHttp.java" type="org.eclipse.jgit.transport.TransportHttp"> |
||||||
|
<filter comment="Method is only used by implementers of TransportHttp's API, minor version are allowed to break implementer API according to OSGi semantic versioning (http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf)" id="338792546"> |
||||||
|
<message_arguments> |
||||||
|
<message_argument value="org.eclipse.jgit.transport.TransportHttp"/> |
||||||
|
<message_argument value="httpOpen(String, URL)"/> |
||||||
|
</message_arguments> |
||||||
|
</filter> |
||||||
|
</resource> |
||||||
|
</component> |
@ -0,0 +1,277 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2013 Christian Halstrick <christian.halstrick@sap.com> |
||||||
|
* and other copyright owners as documented in the project's IP log. |
||||||
|
* |
||||||
|
* This program and the accompanying materials are made available |
||||||
|
* under the terms of the Eclipse Distribution License v1.0 which |
||||||
|
* accompanies this distribution, is reproduced below, and is |
||||||
|
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||||
|
* |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or |
||||||
|
* without modification, are permitted provided that the following |
||||||
|
* conditions are met: |
||||||
|
* |
||||||
|
* - Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* |
||||||
|
* - Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following |
||||||
|
* disclaimer in the documentation and/or other materials provided |
||||||
|
* with the distribution. |
||||||
|
* |
||||||
|
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||||
|
* names of its contributors may be used to endorse or promote |
||||||
|
* products derived from this software without specific prior |
||||||
|
* written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||||
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||||
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
*/ |
||||||
|
package org.eclipse.jgit.transport.http; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.ProtocolException; |
||||||
|
import java.net.URL; |
||||||
|
import java.security.KeyManagementException; |
||||||
|
import java.security.NoSuchAlgorithmException; |
||||||
|
import java.security.SecureRandom; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.net.ssl.HostnameVerifier; |
||||||
|
import javax.net.ssl.KeyManager; |
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.net.ssl.TrustManager; |
||||||
|
|
||||||
|
/** |
||||||
|
* The interface of connections used during HTTP communication. This interface
|
||||||
|
* is that subset of the interface exposed by {@link HttpURLConnection} which is |
||||||
|
* used by JGit |
||||||
|
* |
||||||
|
* @since 3.3 |
||||||
|
*/ |
||||||
|
public interface HttpConnection { |
||||||
|
/** |
||||||
|
* @see HttpURLConnection#HTTP_OK |
||||||
|
*/ |
||||||
|
public static final int HTTP_OK = java.net.HttpURLConnection.HTTP_OK; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#HTTP_NOT_FOUND |
||||||
|
*/ |
||||||
|
public static final int HTTP_NOT_FOUND = java.net.HttpURLConnection.HTTP_NOT_FOUND; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#HTTP_UNAUTHORIZED |
||||||
|
*/ |
||||||
|
public static final int HTTP_UNAUTHORIZED = java.net.HttpURLConnection.HTTP_UNAUTHORIZED; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#HTTP_FORBIDDEN |
||||||
|
*/ |
||||||
|
public static final int HTTP_FORBIDDEN = java.net.HttpURLConnection.HTTP_FORBIDDEN; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getResponseCode() |
||||||
|
* @return the HTTP Status-Code, or -1 |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public int getResponseCode() throws IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getURL() |
||||||
|
* @return the URL. |
||||||
|
*/ |
||||||
|
public URL getURL(); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getResponseMessage() |
||||||
|
* @return the HTTP response message, or <code>null</code> |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public String getResponseMessage() throws IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getHeaderFields() |
||||||
|
* @return a Map of header fields |
||||||
|
*/ |
||||||
|
public Map<String, List<String>> getHeaderFields(); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setRequestProperty(String, String) |
||||||
|
* @param key |
||||||
|
* the keyword by which the request is known (e.g., " |
||||||
|
* <code>Accept</code>"). |
||||||
|
* @param value |
||||||
|
* the value associated with it. |
||||||
|
*/ |
||||||
|
public void setRequestProperty(String key, String value); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setRequestMethod(String) |
||||||
|
* @param method |
||||||
|
* the HTTP method |
||||||
|
* @exception ProtocolException |
||||||
|
* if the method cannot be reset or if the requested method |
||||||
|
* isn't valid for HTTP. |
||||||
|
*/ |
||||||
|
public void setRequestMethod(String method) |
||||||
|
throws ProtocolException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setUseCaches(boolean) |
||||||
|
* @param usecaches |
||||||
|
* a <code>boolean</code> indicating whether or not to allow |
||||||
|
* caching |
||||||
|
*/ |
||||||
|
public void setUseCaches(boolean usecaches); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setConnectTimeout(int) |
||||||
|
* @param timeout |
||||||
|
* an <code>int</code> that specifies the connect timeout value |
||||||
|
* in milliseconds |
||||||
|
*/ |
||||||
|
public void setConnectTimeout(int timeout); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setReadTimeout(int) |
||||||
|
* @param timeout |
||||||
|
* an <code>int</code> that specifies the timeout value to be |
||||||
|
* used in milliseconds |
||||||
|
*/ |
||||||
|
public void setReadTimeout(int timeout); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getContentType() |
||||||
|
* @return the content type of the resource that the URL references, or |
||||||
|
* <code>null</code> if not known. |
||||||
|
*/ |
||||||
|
public String getContentType(); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getInputStream() |
||||||
|
* @return an input stream that reads from this open connection. |
||||||
|
* @exception IOException |
||||||
|
* if an I/O error occurs while creating the input stream. |
||||||
|
*/ |
||||||
|
public InputStream getInputStream() throws IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getHeaderField(String) |
||||||
|
* @param name |
||||||
|
* the name of a header field. |
||||||
|
* @return the value of the named header field, or <code>null</code> if |
||||||
|
* there is no such field in the header. |
||||||
|
*/ |
||||||
|
public String getHeaderField(String name); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getContentLength() |
||||||
|
* @return the content length of the resource that this connection's URL |
||||||
|
* references, {@code -1} if the content length is not known, or if |
||||||
|
* the content length is greater than Integer.MAX_VALUE. |
||||||
|
*/ |
||||||
|
public int getContentLength(); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setInstanceFollowRedirects(boolean) |
||||||
|
* @param followRedirects |
||||||
|
* a <code>boolean</code> indicating whether or not to follow |
||||||
|
* HTTP redirects. |
||||||
|
*/ |
||||||
|
public void setInstanceFollowRedirects(boolean followRedirects); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setDoOutput(boolean) |
||||||
|
* @param dooutput the new value. |
||||||
|
*/ |
||||||
|
public void setDoOutput(boolean dooutput); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setFixedLengthStreamingMode(int) |
||||||
|
* @param contentLength |
||||||
|
* The number of bytes which will be written to the OutputStream. |
||||||
|
* |
||||||
|
*/ |
||||||
|
public void setFixedLengthStreamingMode(int contentLength); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getOutputStream() |
||||||
|
* @return an output stream that writes to this connection. |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public OutputStream getOutputStream() throws IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#setChunkedStreamingMode(int) |
||||||
|
* @param chunklen |
||||||
|
* The number of bytes to write in each chunk. If chunklen is |
||||||
|
* less than or equal to zero, a default value will be used. |
||||||
|
*/ |
||||||
|
public void setChunkedStreamingMode(int chunklen); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#getRequestMethod() |
||||||
|
* @return the HTTP request method |
||||||
|
*/ |
||||||
|
public String getRequestMethod(); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#usingProxy() |
||||||
|
* @return a boolean indicating if the connection is using a proxy. |
||||||
|
*/ |
||||||
|
public boolean usingProxy(); |
||||||
|
|
||||||
|
/** |
||||||
|
* @see HttpURLConnection#connect() |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public void connect() throws IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* Configure the connection so that it can be used for https communication. |
||||||
|
* |
||||||
|
* @param km |
||||||
|
* the keymanager managing the key material used to authenticate |
||||||
|
* the local SSLSocket to its peer |
||||||
|
* @param tm |
||||||
|
* the trustmanager responsible for managing the trust material |
||||||
|
* that is used when making trust decisions, and for deciding |
||||||
|
* whether credentials presented by a peer should be accepted. |
||||||
|
* @param random |
||||||
|
* the source of randomness for this generator or null. See |
||||||
|
* {@link SSLContext#init(KeyManager[], TrustManager[], SecureRandom)} |
||||||
|
* @throws NoSuchAlgorithmException |
||||||
|
* @throws KeyManagementException |
||||||
|
*/ |
||||||
|
public void configure(KeyManager[] km, TrustManager[] tm, |
||||||
|
SecureRandom random) throws NoSuchAlgorithmException, |
||||||
|
KeyManagementException; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the {@link HostnameVerifier} used during https communication |
||||||
|
* |
||||||
|
* @param hostnameverifier |
||||||
|
* @throws NoSuchAlgorithmException |
||||||
|
* @throws KeyManagementException |
||||||
|
*/ |
||||||
|
public void setHostnameVerifier(HostnameVerifier hostnameverifier) |
||||||
|
throws NoSuchAlgorithmException, KeyManagementException; |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2013 Christian Halstrick <christian.halstrick@sap.com> |
||||||
|
* and other copyright owners as documented in the project's IP log. |
||||||
|
* |
||||||
|
* This program and the accompanying materials are made available |
||||||
|
* under the terms of the Eclipse Distribution License v1.0 which |
||||||
|
* accompanies this distribution, is reproduced below, and is |
||||||
|
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||||
|
* |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or |
||||||
|
* without modification, are permitted provided that the following |
||||||
|
* conditions are met: |
||||||
|
* |
||||||
|
* - Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* |
||||||
|
* - Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following |
||||||
|
* disclaimer in the documentation and/or other materials provided |
||||||
|
* with the distribution. |
||||||
|
* |
||||||
|
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||||
|
* names of its contributors may be used to endorse or promote |
||||||
|
* products derived from this software without specific prior |
||||||
|
* written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||||
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||||
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
*/ |
||||||
|
package org.eclipse.jgit.transport.http; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.Proxy; |
||||||
|
import java.net.URL; |
||||||
|
|
||||||
|
/** |
||||||
|
* The interface of a factory returning {@link HttpConnection} |
||||||
|
* |
||||||
|
* @since 3.3 |
||||||
|
*/ |
||||||
|
public interface HttpConnectionFactory { |
||||||
|
/** |
||||||
|
* Creates a new connection to a destination defined by a {@link URL} |
||||||
|
* |
||||||
|
* @param url |
||||||
|
* @return a {@link HttpConnection} |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public HttpConnection create(URL url) throws IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* Creates a new connection to a destination defined by a {@link URL} using |
||||||
|
* a proxy |
||||||
|
* |
||||||
|
* @param url |
||||||
|
* @param proxy |
||||||
|
* the proxy to be used |
||||||
|
* @return a {@link HttpConnection} |
||||||
|
* |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public HttpConnection create(URL url, Proxy proxy) |
||||||
|
throws IOException; |
||||||
|
} |
@ -0,0 +1,194 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2013 Christian Halstrick <christian.halstrick@sap.com> |
||||||
|
* and other copyright owners as documented in the project's IP log. |
||||||
|
* |
||||||
|
* This program and the accompanying materials are made available |
||||||
|
* under the terms of the Eclipse Distribution License v1.0 which |
||||||
|
* accompanies this distribution, is reproduced below, and is |
||||||
|
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||||
|
* |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or |
||||||
|
* without modification, are permitted provided that the following |
||||||
|
* conditions are met: |
||||||
|
* |
||||||
|
* - Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* |
||||||
|
* - Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following |
||||||
|
* disclaimer in the documentation and/or other materials provided |
||||||
|
* with the distribution. |
||||||
|
* |
||||||
|
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||||
|
* names of its contributors may be used to endorse or promote |
||||||
|
* products derived from this software without specific prior |
||||||
|
* written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||||
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||||
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
*/ |
||||||
|
package org.eclipse.jgit.transport.http; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.MalformedURLException; |
||||||
|
import java.net.ProtocolException; |
||||||
|
import java.net.Proxy; |
||||||
|
import java.net.URL; |
||||||
|
import java.security.KeyManagementException; |
||||||
|
import java.security.NoSuchAlgorithmException; |
||||||
|
import java.security.SecureRandom; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.net.ssl.HostnameVerifier; |
||||||
|
import javax.net.ssl.HttpsURLConnection; |
||||||
|
import javax.net.ssl.KeyManager; |
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.net.ssl.TrustManager; |
||||||
|
|
||||||
|
/** |
||||||
|
* A {@link HttpConnection} which simply delegates every call to a |
||||||
|
* {@link HttpURLConnection}. This is the default implementation used by JGit |
||||||
|
* |
||||||
|
* @since 3.3 |
||||||
|
*/ |
||||||
|
public class JDKHttpConnection implements HttpConnection { |
||||||
|
HttpURLConnection wrappedUrlConnection; |
||||||
|
|
||||||
|
/** |
||||||
|
* @param url |
||||||
|
* @throws MalformedURLException |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
protected JDKHttpConnection(URL url) |
||||||
|
throws MalformedURLException, |
||||||
|
IOException { |
||||||
|
this.wrappedUrlConnection = (HttpURLConnection) url.openConnection(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param url |
||||||
|
* @param proxy |
||||||
|
* @throws MalformedURLException |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
protected JDKHttpConnection(URL url, Proxy proxy) |
||||||
|
throws MalformedURLException, IOException { |
||||||
|
this.wrappedUrlConnection = (HttpURLConnection) url |
||||||
|
.openConnection(proxy); |
||||||
|
} |
||||||
|
|
||||||
|
public int getResponseCode() throws IOException { |
||||||
|
return wrappedUrlConnection.getResponseCode(); |
||||||
|
} |
||||||
|
|
||||||
|
public URL getURL() { |
||||||
|
return wrappedUrlConnection.getURL(); |
||||||
|
} |
||||||
|
|
||||||
|
public String getResponseMessage() throws IOException { |
||||||
|
return wrappedUrlConnection.getResponseMessage(); |
||||||
|
} |
||||||
|
|
||||||
|
public Map<String, List<String>> getHeaderFields() { |
||||||
|
return wrappedUrlConnection.getHeaderFields(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setRequestProperty(String key, String value) { |
||||||
|
wrappedUrlConnection.setRequestProperty(key, value); |
||||||
|
} |
||||||
|
|
||||||
|
public void setRequestMethod(String method) throws ProtocolException { |
||||||
|
wrappedUrlConnection.setRequestMethod(method); |
||||||
|
} |
||||||
|
|
||||||
|
public void setUseCaches(boolean usecaches) { |
||||||
|
wrappedUrlConnection.setUseCaches(usecaches); |
||||||
|
} |
||||||
|
|
||||||
|
public void setConnectTimeout(int timeout) { |
||||||
|
wrappedUrlConnection.setConnectTimeout(timeout); |
||||||
|
} |
||||||
|
|
||||||
|
public void setReadTimeout(int timeout) { |
||||||
|
wrappedUrlConnection.setReadTimeout(timeout); |
||||||
|
} |
||||||
|
|
||||||
|
public String getContentType() { |
||||||
|
return wrappedUrlConnection.getContentType(); |
||||||
|
} |
||||||
|
|
||||||
|
public InputStream getInputStream() throws IOException { |
||||||
|
return wrappedUrlConnection.getInputStream(); |
||||||
|
} |
||||||
|
|
||||||
|
public String getHeaderField(String name) { |
||||||
|
return wrappedUrlConnection.getHeaderField(name); |
||||||
|
} |
||||||
|
|
||||||
|
public int getContentLength() { |
||||||
|
return wrappedUrlConnection.getContentLength(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setInstanceFollowRedirects(boolean followRedirects) { |
||||||
|
wrappedUrlConnection.setInstanceFollowRedirects(followRedirects); |
||||||
|
} |
||||||
|
|
||||||
|
public void setDoOutput(boolean dooutput) { |
||||||
|
wrappedUrlConnection.setDoOutput(dooutput); |
||||||
|
} |
||||||
|
|
||||||
|
public void setFixedLengthStreamingMode(int contentLength) { |
||||||
|
wrappedUrlConnection.setFixedLengthStreamingMode(contentLength); |
||||||
|
} |
||||||
|
|
||||||
|
public OutputStream getOutputStream() throws IOException { |
||||||
|
return wrappedUrlConnection.getOutputStream(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setChunkedStreamingMode(int chunklen) { |
||||||
|
wrappedUrlConnection.setChunkedStreamingMode(chunklen); |
||||||
|
} |
||||||
|
|
||||||
|
public String getRequestMethod() { |
||||||
|
return wrappedUrlConnection.getRequestMethod(); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean usingProxy() { |
||||||
|
return wrappedUrlConnection.usingProxy(); |
||||||
|
} |
||||||
|
|
||||||
|
public void connect() throws IOException { |
||||||
|
wrappedUrlConnection.connect(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setHostnameVerifier(HostnameVerifier hostnameverifier) { |
||||||
|
((HttpsURLConnection) wrappedUrlConnection) |
||||||
|
.setHostnameVerifier(hostnameverifier); |
||||||
|
} |
||||||
|
|
||||||
|
public void configure(KeyManager[] km, TrustManager[] tm, |
||||||
|
SecureRandom random) throws NoSuchAlgorithmException, |
||||||
|
KeyManagementException { |
||||||
|
SSLContext ctx = SSLContext.getInstance("SSL"); //$NON-NLS-1$
|
||||||
|
ctx.init(km, tm, random); |
||||||
|
((HttpsURLConnection) wrappedUrlConnection).setSSLSocketFactory(ctx |
||||||
|
.getSocketFactory()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2013 Christian Halstrick <christian.halstrick@sap.com> |
||||||
|
* and other copyright owners as documented in the project's IP log. |
||||||
|
* |
||||||
|
* This program and the accompanying materials are made available |
||||||
|
* under the terms of the Eclipse Distribution License v1.0 which |
||||||
|
* accompanies this distribution, is reproduced below, and is |
||||||
|
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||||
|
* |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or |
||||||
|
* without modification, are permitted provided that the following |
||||||
|
* conditions are met: |
||||||
|
* |
||||||
|
* - Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* |
||||||
|
* - Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following |
||||||
|
* disclaimer in the documentation and/or other materials provided |
||||||
|
* with the distribution. |
||||||
|
* |
||||||
|
* - Neither the name of the Eclipse Foundation, Inc. nor the |
||||||
|
* names of its contributors may be used to endorse or promote |
||||||
|
* products derived from this software without specific prior |
||||||
|
* written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||||
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||||
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
*/ |
||||||
|
package org.eclipse.jgit.transport.http; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.Proxy; |
||||||
|
import java.net.URL; |
||||||
|
|
||||||
|
/** |
||||||
|
* A factory returning instances of {@link JDKHttpConnection} |
||||||
|
* |
||||||
|
* @since 3.3 |
||||||
|
*/ |
||||||
|
public class JDKHttpConnectionFactory implements HttpConnectionFactory { |
||||||
|
public HttpConnection create(URL url) throws IOException { |
||||||
|
return new JDKHttpConnection(url); |
||||||
|
} |
||||||
|
|
||||||
|
public HttpConnection create(URL url, Proxy proxy) |
||||||
|
throws IOException { |
||||||
|
return new JDKHttpConnection(url, proxy); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue