Author: rwinston
Date: Sun Apr 27 15:08:53 2008
New Revision: 652024

URL: http://svn.apache.org/viewvc?rev=652024&view=rev
Log:
NET-216

Modified:
    
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/ftp/FTPSClient.java

Modified: 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/ftp/FTPSClient.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/ftp/FTPSClient.java?rev=652024&r1=652023&r2=652024&view=diff
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/ftp/FTPSClient.java
 (original)
+++ 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/ftp/FTPSClient.java
 Sun Apr 27 15:08:53 2008
@@ -95,7 +95,6 @@
     public FTPSClient() throws NoSuchAlgorithmException {
         this.protocol = DEFAULT_PROTOCOL;
         this.isImplicit = false;
-        context = SSLContext.getInstance(protocol);
     }
 
     /**
@@ -107,7 +106,6 @@
     public FTPSClient(boolean isImplicit) throws NoSuchAlgorithmException {
         this.protocol = DEFAULT_PROTOCOL;
         this.isImplicit = isImplicit;
-        context = SSLContext.getInstance(protocol);
     }
 
     /**
@@ -119,7 +117,6 @@
     public FTPSClient(String protocol) throws NoSuchAlgorithmException {
         this.protocol = protocol;
         this.isImplicit = false;
-        context = SSLContext.getInstance(protocol);
     }
 
     /**
@@ -133,7 +130,6 @@
             throws NoSuchAlgorithmException {
         this.protocol = protocol;
         this.isImplicit = isImplicit;
-        context = SSLContext.getInstance(protocol);
     }
 
 
@@ -193,6 +189,28 @@
     }
 
     /**
+     * Performs a lazy init of the SSL context 
+     * @throws IOException 
+     */
+    private void initSslContext() throws IOException {
+        if(context == null) {
+            try  {
+                context = SSLContext.getInstance(protocol);
+    
+                context.init(new KeyManager[] { getKeyManager() } , new 
TrustManager[] { getTrustManager() } , null);
+            } catch (KeyManagementException e) {
+                IOException ioe = new IOException("Could not initialize SSL 
context");
+                ioe.initCause(e);
+                throw ioe;
+            } catch (NoSuchAlgorithmException e) {
+                IOException ioe = new IOException("Could not initialize SSL 
context");
+                ioe.initCause(e);
+                throw ioe;
+            }
+        }
+    }
+    
+    /**
      * SSL/TLS negotiation. Acquires an SSL socket of a control 
      * connection and carries out handshake processing.
      * @throws IOException A handicap breaks out by sever negotiation.
@@ -201,11 +219,7 @@
         // Evacuation not ssl socket.
         planeSocket = _socket_;
         
-        try {
-                       context.init(new KeyManager[] { getKeyManager() } , new 
TrustManager[] { getTrustManager() } , null);
-               } catch (KeyManagementException e) {
-                       e.printStackTrace();
-               }
+        initSslContext();
 
         SSLSocketFactory ssf = context.getSocketFactory();
         String ip = _socket_.getInetAddress().getHostAddress();
@@ -414,7 +428,12 @@
             setServerSocketFactory(null);
         } else {
             setSocketFactory(new FTPSSocketFactory(context));
-            setServerSocketFactory(SSLServerSocketFactory.getDefault());
+
+            initSslContext();
+            
+            SSLServerSocketFactory ssf = context.getServerSocketFactory();
+
+            setServerSocketFactory(ssf);
         }
     }
 


Reply via email to