blob: 5aab61ad054bb8cc3697fcb21fc3a48f153b85b8 [file] [log] [blame]
/*
* Copyright (c) 2020 Thomas Wolf <thomas.wolf@paranor.ch>
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.internal.transport.http;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
/**
* An {@link SSLSocketFactory} that delegates to another factory and allows
* configuring the created socket via {@link #configure(SSLSocket)} before it is
* returned.
*/
public abstract class DelegatingSSLSocketFactory extends SSLSocketFactory {
private final SSLSocketFactory delegate;
/**
* Creates a new {@link DelegatingSSLSocketFactory} based on the given
* delegate.
*
* @param delegate
* {@link SSLSocketFactory} to delegate to
*/
public DelegatingSSLSocketFactory(SSLSocketFactory delegate) {
this.delegate = delegate;
}
@Override
public SSLSocket createSocket() throws IOException {
return prepare(delegate.createSocket());
}
@Override
public SSLSocket createSocket(String host, int port) throws IOException {
return prepare(delegate.createSocket(host, port));
}
@Override
public SSLSocket createSocket(String host, int port,
InetAddress localAddress, int localPort) throws IOException {
return prepare(
delegate.createSocket(host, port, localAddress, localPort));
}
@Override
public SSLSocket createSocket(InetAddress host, int port)
throws IOException {
return prepare(delegate.createSocket(host, port));
}
@Override
public SSLSocket createSocket(InetAddress host, int port,
InetAddress localAddress, int localPort) throws IOException {
return prepare(
delegate.createSocket(host, port, localAddress, localPort));
}
@Override
public SSLSocket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException {
return prepare(delegate.createSocket(socket, host, port, autoClose));
}
@Override
public String[] getDefaultCipherSuites() {
return delegate.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return delegate.getSupportedCipherSuites();
}
private SSLSocket prepare(Socket socket) throws IOException {
SSLSocket sslSocket = (SSLSocket) socket;
configure(sslSocket);
return sslSocket;
}
/**
* Configure the newly created socket.
*
* @param socket
* to configure
* @throws IOException
* if the socket cannot be configured
*/
protected abstract void configure(SSLSocket socket) throws IOException;
}