You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ri...@apache.org on 2007/12/13 12:12:51 UTC

svn commit: r603885 - in /geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc: AsyncHttpClient.java codec/HttpRequestMessage.java

Author: rickmcguire
Date: Thu Dec 13 03:12:43 2007
New Revision: 603885

URL: http://svn.apache.org/viewvc?rev=603885&view=rev
Log:
GERONIMO-3703 should allow custom SSL context for AsyncHttpClient

Patch provided by Sangjin Lee. 


Modified:
    geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/AsyncHttpClient.java
    geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestMessage.java

Modified: geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/AsyncHttpClient.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/AsyncHttpClient.java?rev=603885&r1=603884&r2=603885&view=diff
==============================================================================
--- geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/AsyncHttpClient.java (original)
+++ geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/AsyncHttpClient.java Thu Dec 13 03:12:43 2007
@@ -108,9 +108,6 @@
     /** The HttpIoHandler handler. */
     private final HttpIoHandler handler;
 
-    /** The ssl filter. */
-    private SSLFilter sslFilter;
-    
     /** connection reuse option */
     private volatile boolean reuseConnection = DEFAULT_REUSE_CONNECTION;
     
@@ -577,30 +574,35 @@
                 // add the SSL filter if it's not there already like in a reused
                 // session
                 if (!sess.getFilterChain().contains(SSL_FILTER)) {
-                    if (sslFilter == null) {
+                    try {
+                        SSLContext context = request.getSSLContext();
+                        if (context == null) {
+                            // if the caller did not provide an SSL context
+                            // create a default SSL context
+                            context = createDefaultSSLContext();
+                        }
+                        SSLFilter sslFilter = new SSLFilter(context);
+                        sslFilter.setUseClientMode(true);
+                        sess.getFilterChain().addLast(SSL_FILTER, sslFilter);
+                    } catch (GeneralSecurityException e) {
                         try {
-                            sslFilter = new SSLFilter(createClientSSLContext());
-                            sslFilter.setUseClientMode(true);
-                        } catch (GeneralSecurityException e) {
-                            try {
-                                sess.getHandler().exceptionCaught(sess, e);
-                            } catch (Exception e1) {
-                                //Do nothing...we just reported it
-                            }
+                            sess.getHandler().exceptionCaught(sess, e);
+                        } catch (Exception e1) {
+                            //Do nothing...we just reported it
                         }
                     }
-                    sess.getFilterChain().addLast(SSL_FILTER, sslFilter);
                 }
             }
         }
 
         /**
-         * Creates the client ssl context.
+         * Creates a default SSL context in case it was not provided by the
+         * caller.
          *
          * @return the SSL context
          * @throws GeneralSecurityException the general security exception
          */
-        private SSLContext createClientSSLContext() throws GeneralSecurityException {
+        private SSLContext createDefaultSSLContext() throws GeneralSecurityException {
             SSLContext context = SSLContext.getInstance(sslProtocol);
             context.init(null, TrustManagerFactoryImpl.X509_MANAGERS, null);
             return context;

Modified: geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestMessage.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestMessage.java?rev=603885&r1=603884&r2=603885&view=diff
==============================================================================
--- geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestMessage.java (original)
+++ geronimo/sandbox/AsyncHttpClient/src/main/java/org/apache/ahc/codec/HttpRequestMessage.java Thu Dec 13 03:12:43 2007
@@ -26,6 +26,8 @@
 import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 
+import javax.net.ssl.SSLContext;
+
 import org.apache.ahc.AsyncHttpClientCallback;
 import org.apache.ahc.auth.AuthScope;
 import org.apache.ahc.auth.AuthState;
@@ -146,6 +148,11 @@
      * Auth attempt count
      */
     private int authCount = 0;
+    
+    /**
+     * SSL context for https
+     */
+    private SSLContext sslContext;
 
     /**
      * Instantiates a new http request message.
@@ -208,14 +215,14 @@
      * Returns the response future object associated with the request.
      */
     public ResponseFuture getResponseFuture() {
-    	return responseFuture;
+        return responseFuture;
     }
 
     /**
      * Sets the response future object.
      */
     public void setResponseFuture(ResponseFuture result) {
-    	responseFuture = result;
+        responseFuture = result;
     }
 
     /**
@@ -366,7 +373,7 @@
      *
      */
     public void clearAllParameters() {
-    	parameters.clear();
+        parameters.clear();
     }
 
     /**
@@ -513,5 +520,23 @@
      */
     public void setAuthCount(int authCount) {
         this.authCount = authCount;
+    }
+    
+    /**
+     * Gets the SSL context
+     * 
+     * @return the SSL context
+     */
+    public SSLContext getSSLContext() {
+        return sslContext;
+    }
+    
+    /**
+     * Sets the SSL context
+     * 
+     * @param sslContext the SSL context
+     */
+    public void setSSLContext(SSLContext sslContext) {
+        this.sslContext = sslContext;
     }
 }