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 2005/03/28 15:36:42 UTC

svn commit: r159234 - in jakarta/httpclient/trunk/http-common/src/java/org/apache/http: HttpClientConnection.java HttpConnection.java HttpServerConnection.java impl/NIOAbstractHttpConnection.java

Author: olegk
Date: Mon Mar 28 05:36:40 2005
New Revision: 159234

URL: http://svn.apache.org/viewcvs?view=rev&rev=159234
Log:
HttpConnection, HttpClientConnection and HttpServerConnection interface refinement; NIO based abstract HttpConnection implementation

Added:
    jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java   (with props)
Modified:
    jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpClientConnection.java
    jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpConnection.java
    jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpServerConnection.java

Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpClientConnection.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpClientConnection.java?view=diff&r1=159233&r2=159234
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpClientConnection.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpClientConnection.java Mon Mar 28 05:36:40 2005
@@ -30,7 +30,9 @@
 package org.apache.http;
 
 import java.io.IOException;
-import java.net.Socket;
+import java.net.InetAddress;
+
+import org.apache.http.params.HttpParams;
 
 /**
  * <p>
@@ -43,10 +45,10 @@
  */
 public interface HttpClientConnection extends HttpConnection {
 
-    void bind(Socket socket) throws IOException;
+    void open(HttpHost host, HttpParams params, InetAddress localAddress) throws IOException;
     
-    HttpRequest receiveRequest() throws HttpException, IOException;
+    void sendRequest(HttpRequest request) throws HttpException, IOException;
 
-    void sendResponse(HttpResponse response) throws HttpException, IOException;
+    HttpResponse receiveResponse() throws HttpException, IOException;
     
 }

Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpConnection.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpConnection.java?view=diff&r1=159233&r2=159234
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpConnection.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpConnection.java Mon Mar 28 05:36:40 2005
@@ -45,5 +45,11 @@
     void close() throws IOException;
     
     boolean isOpen();
-        
+ 
+    void setSocketTimeout(int timeout) throws IOException;
+
+    int getSocketTimeout() throws IOException;
+
+    boolean isStale();
+    
 }

Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpServerConnection.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpServerConnection.java?view=diff&r1=159233&r2=159234
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpServerConnection.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpServerConnection.java Mon Mar 28 05:36:40 2005
@@ -30,6 +30,9 @@
 package org.apache.http;
 
 import java.io.IOException;
+import java.net.Socket;
+
+import org.apache.http.params.HttpParams;
 
 /**
  * <p>
@@ -42,10 +45,10 @@
  */
 public interface HttpServerConnection extends HttpConnection {
 
-    void open(HttpHost host) throws IOException;
+    void bind(Socket socket, HttpParams params) throws IOException;
     
-    void sendRequest(HttpRequest request) throws HttpException, IOException;
+    HttpRequest receiveRequest() throws HttpException, IOException;
 
-    HttpResponse receiveResponse() throws HttpException, IOException;
+    void sendResponse(HttpResponse response) throws HttpException, IOException;
     
 }

Added: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java?view=auto&rev=159234
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java (added)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java Mon Mar 28 05:36:40 2005
@@ -0,0 +1,140 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ *
+ *  Copyright 1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.impl;
+
+import java.io.IOException;
+import java.net.Socket;
+
+import org.apache.http.HttpConnection;
+import org.apache.http.HttpDataReceiver;
+import org.apache.http.HttpDataTransmitter;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+
+/**
+ * <p>
+ * </p>
+ * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @version $Revision$
+ * 
+ * @since 4.0
+ */
+abstract class NIOAbstractHttpConnection implements HttpConnection {
+
+    protected transient Socket socket = null;
+    protected transient HttpDataTransmitter datatransmitter = null;
+    protected transient HttpDataReceiver datareceiver = null;
+    
+    protected NIOAbstractHttpConnection() {
+        super();
+    }
+    
+    protected void assertNotOpen() {
+        if (this.socket != null) {
+            throw new IllegalStateException("Connection is already open");
+        }
+    }
+    
+    protected void assertOpen() {
+        if (this.socket == null) {
+            throw new IllegalStateException("Connection is not open");
+        }
+    }
+    
+    protected void bind(final Socket socket, final HttpParams params) throws IOException {
+        if (socket == null) {
+            throw new IllegalArgumentException("Socket may not be null");
+        }
+        if (params == null) {
+            throw new IllegalArgumentException("HTTP parameters may not be null");
+        }
+        assertNotOpen();
+        HttpConnectionParams connParams = new HttpConnectionParams(params); 
+        this.socket.setTcpNoDelay(connParams.getTcpNoDelay());
+        this.socket.setSoTimeout(connParams.getSoTimeout());
+        
+        int linger = connParams.getLinger();
+        if (linger >= 0) {
+            this.socket.setSoLinger(linger > 0, linger);
+        }
+        
+        int sndBufSize = connParams.getSendBufferSize();
+        if (sndBufSize >= 0) {
+            this.socket.setSendBufferSize(sndBufSize);
+        }        
+        int rcvBufSize = connParams.getReceiveBufferSize();
+        if (rcvBufSize >= 0) {
+            this.socket.setReceiveBufferSize(rcvBufSize);
+        }
+        this.datatransmitter = new NIOSocketHttpDataTransmitter(this.socket); 
+        this.datareceiver = new NIOSocketHttpDataReceiver(this.socket); 
+    }
+
+    public boolean isOpen() {
+        return this.socket != null;
+    }
+    
+    public void close() throws IOException {
+        HttpDataTransmitter tmp1 = this.datatransmitter;
+        if (tmp1 != null) {
+            tmp1.flush();
+        }
+        this.datareceiver = null;
+        this.datatransmitter = null;
+        Socket tmp2 = this.socket;
+        if (tmp2 != null) {
+            tmp2.close();
+        }
+        this.socket = null;
+    }
+    
+    public int getSocketTimeout() throws IOException {
+        assertOpen();
+        return this.socket.getSoTimeout();
+    }
+    
+    
+    public void setSocketTimeout(int timeout) throws IOException {
+        assertOpen();
+        this.socket.setSoTimeout(timeout);
+    }
+    
+    public boolean isStale() {
+        assertOpen();
+        try {
+            this.datareceiver.isDataAvailable(1);
+            return false;
+        } catch (IOException ex) {
+            return true;
+        }
+    }
+    
+}

Propchange: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOAbstractHttpConnection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain