1 package org.apache.maven.wagon.shared.http4;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import java.io.IOException;
22 import java.net.InetSocketAddress;
23 import java.net.Socket;
24 import java.net.UnknownHostException;
25
26 import javax.net.ssl.SSLSocket;
27
28 import org.apache.http.conn.ConnectTimeoutException;
29 import org.apache.http.conn.scheme.SchemeLayeredSocketFactory;
30 import org.apache.http.params.HttpParams;
31 import org.codehaus.plexus.util.StringUtils;
32
33
34
35
36 class ConfigurableSSLSocketFactoryDecorator
37 implements SchemeLayeredSocketFactory
38 {
39
40 private final SchemeLayeredSocketFactory sslSocketFactory;
41
42 public ConfigurableSSLSocketFactoryDecorator( SchemeLayeredSocketFactory sslSocketFactory )
43 {
44 super();
45 this.sslSocketFactory = sslSocketFactory;
46 }
47
48 public Socket createSocket( final HttpParams params )
49 throws IOException
50 {
51 return enableSslProtocols( this.sslSocketFactory.createSocket( params ) );
52 }
53
54 public Socket createLayeredSocket( final Socket socket, final String target, int port, final HttpParams params )
55 throws IOException, UnknownHostException
56 {
57 return enableSslProtocols( this.sslSocketFactory.createLayeredSocket( socket, target, port, params ) );
58 }
59
60 public Socket connectSocket( final Socket sock, final InetSocketAddress remoteAddress,
61 final InetSocketAddress localAddress, final HttpParams params )
62 throws IOException, UnknownHostException, ConnectTimeoutException
63 {
64 return this.sslSocketFactory.connectSocket( sock, remoteAddress, localAddress, params );
65 }
66
67 public boolean isSecure( final Socket sock )
68 throws IllegalArgumentException
69 {
70 return this.sslSocketFactory.isSecure( sock );
71 }
72
73 protected Socket enableSslProtocols( Socket socket )
74 {
75 String httpsProtocols = System.getProperty( "https.protocols" );
76 if ( StringUtils.isNotEmpty( httpsProtocols ) )
77 {
78 String[] protocols = StringUtils.split( httpsProtocols, "," );
79 if ( socket instanceof SSLSocket )
80 {
81 ( (SSLSocket) socket ).setEnabledProtocols( protocols );
82 }
83 }
84
85 return socket;
86 }
87
88 }