You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2008/04/08 23:28:49 UTC

svn commit: r646081 - in /httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http: conn/OperatedClientConnection.java impl/conn/DefaultClientConnection.java impl/conn/DefaultClientConnectionOperator.java

Author: olegk
Date: Tue Apr  8 14:28:48 2008
New Revision: 646081

URL: http://svn.apache.org/viewvc?rev=646081&view=rev
Log:
Simplified OperatedClientConnection interface 

Modified:
    httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/OperatedClientConnection.java
    httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java
    httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java

Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/OperatedClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/OperatedClientConnection.java?rev=646081&r1=646080&r2=646081&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/OperatedClientConnection.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/OperatedClientConnection.java Tue Apr  8 14:28:48 2008
@@ -41,9 +41,8 @@
 
 
 /**
- * A client-side connection that needs to be operated.
- * It relies on outside logic to connect sockets to the appropriate hosts.
- * It can be operated directly by an application, or through an
+ * A client-side connection that relies on outside logic to connect sockets to the 
+ * appropriate hosts. It can be operated directly by an application, or through an
  * {@link ClientConnectionOperator operator}.
  *
  *
@@ -103,15 +102,12 @@
 
 
     /**
-     * Announces opening of this connection.
-     * Opening can be announced only while the connection is closed.
-     * This is an optional step, you can call {@link #open open}
-     * without an announcement.
+     * Signals that this connection is in the process of being open.
      * <br/>
-     * By calling this method, you provide the connection with
-     * the unconnected socket that will be connected in order
-     * to call {@link #open open}. This allows the connection to
-     * close that socket if
+     * By calling this method, you can provide the connection with
+     * the unconnected socket that will be connected before
+     * {@link #openCompleted} is called. This allows 
+     * the connection to close that socket if
      * {@link org.apache.http.HttpConnection#shutdown shutdown}
      * is called before it is open. Closing the unconnected socket
      * will interrupt a thread that is blocked on the connect.
@@ -119,36 +115,32 @@
      * or it returns successfully and then opens this connection
      * which was just shut down.
      * <br/>
-     * <b>Note:</b>
-     * The result of {@link #getSocket getSocket} is defined
-     * only for open connections. You MUST NOT rely on that
-     * method to return the unconnected socket after announcing.
+     * You also must call {@link #openCompleted} in order to complete
+     * the process
      *
      * @param sock      the unconnected socket which is about to
-     *                  be connected in order to call {@link #open open}.
-     *                  <code>null</code> can be passed to undo a
-     *                  previous call.
+     *                  be connected.
+     * @param target    the target host of this connection
+     * @param secure    <code>true</code> if this connection is secure, for
+     *                  example if an <code>SSLSocket</code> is used, or
+     *                  <code>false</code> if it is not secure
      */
-    void announce(Socket sock)
+    void opening(Socket sock, HttpHost target, boolean secure)
+        throws IOException
         ;
 
 
     /**
-     * Opens this connection.
-     * A connection can be openend only while it is closed.
-     * To modify a connection while it is open, use {@link #update update}.
+     * Signals that the connection has been successfully open.
+     * An attempt to call this method on an open connection will cause
+     * an exception.
      *
      * @param sock      the open socket for communicating with the target host
-     * @param target    the target host of this connection
-     * @param secure    <code>true</code> if this connection is secure, for
-     *                  example if an <code>SSLSocket</code> is used, or
-     *                  <code>false</code> if it is not secure
      * @param params    parameters for this connection. The parameters will
      *                  be used when creating dependent objects, for example
      *                  to determine buffer sizes.
      */
-    void open(Socket sock, HttpHost target,
-              boolean secure, HttpParams params)
+    void openCompleted(HttpParams params)
         throws IOException
         ;
 

Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java?rev=646081&r1=646080&r2=646081&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java Tue Apr  8 14:28:48 2008
@@ -71,8 +71,8 @@
     
     private static final Log LOG = LogFactory.getLog(DefaultClientConnection.class);
     
-    /** The unconnected socket between announce and open. */
-    private volatile Socket announcedSocket;
+    /** The unconnected socket */
+    private volatile Socket socket;
 
     /** The target host of this connection. */
     private HttpHost targetHost;
@@ -96,21 +96,28 @@
     }
 
 
-    // non-javadoc, see interface OperatedClientConnection
     @Override
     public final Socket getSocket() {
-        return super.getSocket(); // base class attribute
+        return this.socket;
     }
 
 
-    // non-javadoc, see interface OperatedClientConnection
-    public void announce(Socket sock) {
-
+    public void opening(Socket sock, HttpHost target, boolean secure) {
         assertNotOpen();
-        announcedSocket = sock;
-
-    } // prepare
+        this.socket = sock;
+        this.targetHost = target;
+        this.connSecure = secure;
+    }
 
+    
+    public void openCompleted(HttpParams params) throws IOException {
+        assertNotOpen();
+        if (params == null) {
+            throw new IllegalArgumentException
+                ("Parameters must not be null.");
+        }
+        bind(this.socket, params);
+    }
 
     /**
      * Force-closes this connection.
@@ -124,12 +131,11 @@
     public void shutdown() throws IOException {
         LOG.debug("Connection shut down");
         
-        Socket sock = announcedSocket; // copy volatile attribute
+        super.shutdown();
+        Socket sock = this.socket; // copy volatile attribute
         if (sock != null)
             sock.close();
 
-        super.shutdown();
-
     } // shutdown
 
     
@@ -184,35 +190,6 @@
 
 
     // non-javadoc, see interface OperatedClientConnection
-    public void open(Socket sock, HttpHost target,
-                     boolean secure, HttpParams params)
-        throws IOException {
-
-        assertNotOpen();
-        if (sock == null) {
-            throw new IllegalArgumentException
-                ("Socket must not be null.");
-        }
-        if (target == null) {
-            throw new IllegalArgumentException
-                ("Target host must not be null.");
-        }
-        if (params == null) {
-            throw new IllegalArgumentException
-                ("Parameters must not be null.");
-        }
-
-        bind(sock, params);
-        
-        targetHost = target;
-        connSecure = secure;
-
-        announcedSocket = null;
-
-    } // open
-
-
-    // non-javadoc, see interface OperatedClientConnection
     public void update(Socket sock, HttpHost target,
                        boolean secure, HttpParams params)
         throws IOException {
@@ -227,8 +204,10 @@
                 ("Parameters must not be null.");
         }
 
-        if (sock != null)
+        if (sock != null) {
+            this.socket = sock;
             bind(sock, params);
+        }
         targetHost = target;
         connSecure = secure;
 

Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java?rev=646081&r1=646080&r2=646081&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java Tue Apr  8 14:28:48 2008
@@ -128,7 +128,7 @@
         final SocketFactory sf = schm.getSocketFactory();
 
         Socket sock = sf.createSocket();
-        conn.announce(sock);
+        conn.opening(sock, target, sf.isSecure(sock));
 
         try {
             sock = sf.connectSocket(sock, target.getHostName(),
@@ -138,13 +138,7 @@
             throw new HttpHostConnectException(target, ex);
         }
         prepareSocket(sock, context, params);
-
-        final boolean secure = sf.isSecure(sock);
-
-        conn.open(sock, target, secure, params);
-        //@@@ error handling: unannounce at connection?
-        //@@@ error handling: close the created socket?
-
+        conn.openCompleted(params);
     } // openConnection