You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/03/29 08:39:40 UTC
svn commit: r523583 - in /harmony/enhanced/classlib/trunk/modules/luni: ./
src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/
src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/
src/test/impl/org/apache/harmony/tes...
Author: pyang
Date: Wed Mar 28 23:39:39 2007
New Revision: 523583
URL: http://svn.apache.org/viewvc?view=rev&rev=523583
Log:
roll back patch for HARMONY-617( [classlib][luni] HttpURLConnection does not support persistent connections), because it causes regression on JBoss application test and HARMONY-3434 test cases
Removed:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpConfiguration.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpConnection.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpConnectionManager.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/impl/org/apache/harmony/tests/internal/net/www/protocol/http/PersistenceTest.java
Modified:
harmony/enhanced/classlib/trunk/modules/luni/.classpath
harmony/enhanced/classlib/trunk/modules/luni/build.xml
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/.classpath
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/.classpath?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/.classpath (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/.classpath Wed Mar 28 23:39:39 2007
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" output="bin/main" path="src/main/java"/>
- <classpathentry kind="src" output="bin/main" path="src/main/resources"/>
- <classpathentry kind="src" output="bin/test" path="src/test/java"/>
- <classpathentry kind="src" output="bin/test" path="src/test/resources"/>
- <classpathentry kind="src" path="src/test/impl"/>
+ <classpathentry output="bin/main" kind="src" path="src/main/java"/>
+ <classpathentry output="bin/main" kind="src" path="src/main/resources"/>
+ <classpathentry output="bin/test" kind="src" path="src/test/java"/>
+ <classpathentry output="bin/test" kind="src" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="JUNIT_SRC_HOME/junitsrc.zip"/>
+ <classpathentry sourcepath="JUNIT_SRC_HOME/junitsrc.zip" kind="var" path="JUNIT_HOME/junit.jar"/>
<classpathentry kind="output" path="bin/main"/>
</classpath>
Modified: harmony/enhanced/classlib/trunk/modules/luni/build.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/build.xml?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/build.xml (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/build.xml Wed Mar 28 23:39:39 2007
@@ -264,7 +264,6 @@
<javac-elements>
<src>
<pathelement location="${hy.luni.src.test}/java"/>
- <pathelement location="${hy.luni.src.test}/impl"/>
</src>
<include name="**/*.java" />
</javac-elements>
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java Wed Mar 28 23:39:39 2007
@@ -17,6 +17,7 @@
package org.apache.harmony.luni.internal.net.www.protocol.http;
+import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -32,6 +33,8 @@
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.ResponseCache;
+import java.net.Socket;
+import java.net.SocketAddress;
import java.net.SocketPermission;
import java.net.URI;
import java.net.URISyntaxException;
@@ -71,12 +74,12 @@
private int httpVersion = 1; // Assume HTTP/1.1
- protected HttpConnection connection;
-
private InputStream is;
private InputStream uis;
+ protected Socket socket;
+
private OutputStream socketOut;
private OutputStream cacheOut;
@@ -127,12 +130,8 @@
@Override
public void close() throws IOException {
- if(bytesRemaining > 0) {
- bytesRemaining = 0;
- disconnect(true); // Should close the socket if client hasn't read all the data
- } else {
- disconnect(false);
- }
+ bytesRemaining = 0;
+ closeSocket();
/*
* if user has set useCache to true and cache exists, aborts it when
* closing
@@ -154,7 +153,6 @@
@Override
public int read() throws IOException {
if (bytesRemaining <= 0) {
- disconnect(false);
return -1;
}
int result = is.read();
@@ -164,9 +162,6 @@
cacheOut.write(result);
}
bytesRemaining--;
- if (bytesRemaining <= 0) {
- disconnect(false);
- }
return result;
}
@@ -181,7 +176,6 @@
throw new ArrayIndexOutOfBoundsException();
}
if (bytesRemaining <= 0) {
- disconnect(false);
return -1;
}
if (length > bytesRemaining) {
@@ -196,15 +190,11 @@
cacheOut.write(buf, offset, result);
}
}
- if (bytesRemaining <= 0) {
- disconnect(false);
- }
return result;
}
public long skip(int amount) throws IOException {
if (bytesRemaining <= 0) {
- disconnect(false);
return -1;
}
if (amount > bytesRemaining) {
@@ -214,9 +204,6 @@
if (result > 0) {
bytesRemaining -= result;
}
- if (bytesRemaining <= 0) {
- disconnect(false);
- }
return result;
}
}
@@ -232,12 +219,8 @@
@Override
public void close() throws IOException {
- if(!atEnd && available() > 0) {
- disconnect(true);
- } else {
- disconnect(false);
- }
atEnd = true;
+ closeSocket();
// if user has set useCache to true and cache exists, abort
if (useCaches && null != cacheRequest) {
cacheRequest.abort();
@@ -278,7 +261,6 @@
readChunkSize();
}
if (atEnd) {
- disconnect(false);
return -1;
}
bytesRemaining--;
@@ -304,7 +286,6 @@
readChunkSize();
}
if (atEnd) {
- disconnect(false);
return -1;
}
if (length > bytesRemaining) {
@@ -324,7 +305,6 @@
public long skip(int amount) throws IOException {
if (atEnd) {
- disconnect(false);
return -1;
}
if (bytesRemaining <= 0) {
@@ -448,7 +428,6 @@
}
sendCache(closed);
}
- disconnect(false);
}
@Override
@@ -606,13 +585,13 @@
return;
}
// socket to be used for connection
- connection = null;
+ Socket socket = null;
// try to determine: to use the proxy or not
if (proxy != null) {
// try to make the connection to the proxy
// specified in constructor.
// IOException will be thrown in the case of failure
- connection = getHTTPConnection(proxy);
+ socket = getHTTPConnection(proxy);
} else {
// Use system-wide ProxySelect to select proxy list,
// then try to connect via elements in the proxy list.
@@ -625,7 +604,7 @@
continue;
}
try {
- connection = getHTTPConnection(selectedProxy);
+ socket = getHTTPConnection(selectedProxy);
proxy = selectedProxy;
break; // connected
} catch (IOException e) {
@@ -635,38 +614,64 @@
}
}
}
- if (connection == null) {
+ if (socket == null) {
// make direct connection
- connection = getHTTPConnection(null);
+ socket = getHTTPConnection(null);
}
- connection.setSoTimeout(getReadTimeout());
- setUpTransportIO(connection);
+ socket.setSoTimeout(getReadTimeout());
+ setUpTransportIO(socket);
connected = true;
}
/**
- * Returns connected socket to be used for this HTTP connection.
+ * Returns connected socket to be used for this HTTP connection. TODO:
+ * implement persistent connections.
*/
- protected HttpConnection getHTTPConnection(Proxy proxy) throws IOException {
- HttpConnection connection;
+ protected Socket getHTTPConnection(Proxy proxy) throws IOException {
+ Socket socket;
if (proxy == null || proxy.type() == Proxy.Type.DIRECT) {
- this.proxy = null; // not using proxy
- connection = HttpConnectionManager.getDefault().getConnection(uri, getConnectTimeout());
+ this.proxy = null; // not using proxy
+ socket = new Socket();
+ socket.connect(new InetSocketAddress(getHostName(), getHostPort()),
+ getConnectTimeout());
+ } else if (proxy.type() == Proxy.Type.HTTP) {
+ socket = new Socket();
+
+ SocketAddress proxyAddr = proxy.address();
+
+ if (!(proxyAddr instanceof InetSocketAddress)) {
+ throw new IllegalArgumentException(Msg.getString(
+ "K0316", proxyAddr.getClass())); //$NON-NLS-1$
+ }
+
+ InetSocketAddress iProxyAddr = (InetSocketAddress) proxyAddr;
+
+ if( iProxyAddr.getAddress() == null ) {
+ // Resolve proxy, see HARMONY-3113
+ socket.connect(new InetSocketAddress((iProxyAddr.getHostName()),
+ iProxyAddr.getPort()), getConnectTimeout());
+ } else {
+ socket.connect(iProxyAddr, getConnectTimeout());
+ }
} else {
- connection = HttpConnectionManager.getDefault().getConnection(uri, proxy, getConnectTimeout());
+ // using SOCKS proxy
+ socket = new Socket(proxy);
+ socket.connect(new InetSocketAddress(getHostName(), getHostPort()),
+ getConnectTimeout());
}
- return connection;
+ return socket;
}
/**
* Sets up the data streams used to send request[s] and read response[s].
*
- * @param connection
- * HttpConnection to be used
+ * @param socket
+ * socket to be used for connection
*/
- protected void setUpTransportIO(HttpConnection connection) throws IOException {
- socketOut = connection.getOutputStream();
- is = connection.getInputStream();
+ protected void setUpTransportIO(Socket socket) throws IOException {
+ this.socket = socket;
+ socketOut = socket.getOutputStream();
+ is = new BufferedInputStream(socket.getInputStream());
}
// Tries to get head and body from cache, return true if has got this time
@@ -716,17 +721,16 @@
*/
@Override
public void disconnect() {
- disconnect(true);
+ try {
+ closeSocket();
+ } catch (IOException e) {
+ }
}
- private void disconnect(boolean closeSocket) {
- if(closeSocket && connection != null) {
- connection.closeSocketAndStreams();
- } else if (connection != null) {
- HttpConnectionManager.getDefault().returnConnectionToPool(connection);
- connection = null;
+ void closeSocket() throws IOException {
+ if (is != null) {
+ is.close();
}
- connection = null;
}
protected void endRequest() throws IOException {
@@ -1066,7 +1070,7 @@
if (method == HEAD || (responseCode >= 100 && responseCode < 200)
|| responseCode == HTTP_NO_CONTENT
|| responseCode == HTTP_NOT_MODIFIED) {
- disconnect();
+ closeSocket();
uis = new LimitedInputStream(0);
}
putToCache();
@@ -1159,7 +1163,8 @@
// if we are doing output make sure the appropriate headers are sent
if (os != null) {
if (reqHeader.get("Content-Type") == null) { //$NON-NLS-1$
- output.append("Content-Type: application/x-www-form-urlencoded\r\n"); //$NON-NLS-1$
+ output
+ .append("Content-Type: application/x-www-form-urlencoded\r\n"); //$NON-NLS-1$
}
if (os.isCached()) {
if (reqHeader.get("Content-Length") == null) { //$NON-NLS-1$
@@ -1193,7 +1198,8 @@
* if both setFixedLengthStreamingMode and
* content-length are set, use fixedContentLength first
*/
- output.append((fixedContentLength >= 0) ? String
+ output
+ .append((fixedContentLength >= 0) ? String
.valueOf(fixedContentLength)
: reqHeader.get(i));
} else {
@@ -1375,7 +1381,7 @@
// drop everything and reconnect, might not be required for
// HTTP/1.1
endRequest();
- disconnect();
+ closeSocket();
connected = false;
String credentials = getAuthorizationCredentials(challenge);
if (credentials == null) {
@@ -1398,7 +1404,7 @@
// drop everything and reconnect, might not be required for
// HTTP/1.1
endRequest();
- disconnect();
+ closeSocket();
connected = false;
String credentials = getAuthorizationCredentials(challenge);
if (credentials == null) {
@@ -1444,7 +1450,7 @@
hostPort = -1;
}
endRequest();
- disconnect();
+ closeSocket();
connected = false;
continue;
}
@@ -1461,7 +1467,7 @@
* authorization challenge
*
* @param challenge
- * @return authorization credentials
+ * @return
* @throws IOException
*/
private String getAuthorizationCredentials(String challenge)
@@ -1511,4 +1517,4 @@
}
}
}
-}
\ No newline at end of file
+}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java Wed Mar 28 23:39:39 2007
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.harmony.luni.internal.net.www.protocol.https;
import java.io.IOException;
@@ -21,6 +22,7 @@
import java.io.OutputStream;
import java.net.ProtocolException;
import java.net.Proxy;
+import java.net.Socket;
import java.net.URL;
import java.security.Permission;
import java.security.Principal;
@@ -385,7 +387,7 @@
responseMessage, responseCode));
}
// if there are some remaining data in the stream - read it out
- InputStream is = connection.getInputStream();
+ InputStream is = socket.getInputStream();
while (is.available() != 0) {
is.read();
}
@@ -395,8 +397,7 @@
super.connect();
}
if (!makingSSLTunnel) {
- sslSocket = connection.getSecureSocket(getSSLSocketFactory(), getHostnameVerifier());
- setUpTransportIO(connection);
+ setUpTransportIO(wrapConnection(socket));
}
}
@@ -419,5 +420,21 @@
return super.requestString();
}
+ /**
+ * Create the secure socket over the connected socket and verify remote
+ * hostname.
+ */
+ private Socket wrapConnection(Socket socket) throws IOException {
+ String hostname = url.getHost();
+ // create the wrapper over connected socket
+ sslSocket = (SSLSocket) getSSLSocketFactory().createSocket(socket,
+ hostname, url.getPort(), true);
+ sslSocket.setUseClientMode(true);
+ sslSocket.startHandshake();
+ if (!getHostnameVerifier().verify(hostname, sslSocket.getSession())) {
+ throw new IOException(Messages.getString("luni.02", hostname)); //$NON-NLS-1$
+ }
+ return sslSocket;
+ }
}
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java Wed Mar 28 23:39:39 2007
@@ -14,14 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.harmony.luni.tests.internal.net.www.protocol.http;
import java.io.IOException;
-import java.io.InputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
-import java.net.MalformedURLException;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.ProxySelector;
@@ -31,18 +30,17 @@
import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URL;
-import java.security.Permission;
import java.util.ArrayList;
import junit.framework.TestCase;
+
/**
- * Tests for <code>HttpURLConnection</code> class constructors and methods.
+ * Tests for <code>HTTPURLConnection</code> class constructors and methods.
+ *
*/
public class HttpURLConnectionTest extends TestCase {
- private static final boolean DEBUG = false;
-
private final static Object bound = new Object();
static class MockServer extends Thread {
@@ -53,7 +51,7 @@
public MockServer(String name) throws IOException {
super(name);
serverSocket = new ServerSocket(0);
- serverSocket.setSoTimeout(5000);
+ serverSocket.setSoTimeout(1000);
}
public int port() {
@@ -79,128 +77,6 @@
}
}
- static class MockHTTPServer extends MockServer {
- // HTTP response codes
- static final int OK_CODE = 200;
- static final int NOT_FOUND_CODE = 404;
- // how many times persistent connection will be used
- // by server
- int persUses;
- // result code to be sent to client
- int responseCode;
- // response content to be sent to client
- String response = "<html></html>";
- // client's POST message
- String clientPost = "Hello from client!";
-
- public MockHTTPServer(String name, int persUses) throws IOException {
- this(name, persUses, OK_CODE);
- }
-
- public MockHTTPServer(String name, int persUses,
- int responseCode) throws IOException {
- super(name);
- this.persUses = persUses;
- this.responseCode = responseCode;
- }
-
- public int port() {
- return serverSocket.getLocalPort();
- }
-
- @Override
- public void run() {
- try {
- synchronized (bound) {
- started = true;
- bound.notify();
- }
- InputStream is = null;
- Socket client = null;
- try {
- client = serverSocket.accept();
- accepted = true;
- for (int i=0; i<persUses; i++) {
- if (DEBUG) {
- System.out.println("*** Using connection for "
- + (i+1) + " time ***");
- }
- byte[] buff = new byte[1024];
- is = client.getInputStream();
- int num = 0; // number of read bytes
- int bytik; // read byte value
- boolean wasEOL = false;
- // read header (until empty string)
- while (((bytik = is.read()) > 0)) {
- if (bytik == '\r') {
- bytik = is.read();
- }
- if (wasEOL && (bytik == '\n')) {
- break;
- }
- wasEOL = (bytik == '\n');
- buff[num++] = (byte) bytik;
- }
- //int num = is.read(buff);
- String message = new String(buff, 0, num);
- if (DEBUG) {
- System.out.println("---- Server got request: ----\n"
- + message + "-----------------------------");
- }
-
- // Act as Server (not Proxy) side
- if (message.startsWith("POST")) {
- // client connection sent some data
- // if the data was not read with header
- if (DEBUG) {
- System.out.println(
- "---- Server read client's data: ----");
- }
- num = is.read(buff);
- message = new String(buff, 0, num);
- if (DEBUG) {
- System.out.println("'" + message + "'");
- System.out.println(
- "------------------------------------");
- }
- // check the received data
- assertEquals(clientPost, message);
- }
-
- client.getOutputStream().write((
- "HTTP/1.1 " + responseCode + " OK\n"
- + "Content-type: text/html\n"
- + "Content-length: "
- + response.length() + "\n\n"
- + response).getBytes());
-
- if (responseCode != OK_CODE) {
- // wait while test case check closed connection
- // and interrupt this thread
- try {
- while (!isInterrupted()) {
- Thread.sleep(1000);
- }
- } catch (Exception ignore) { }
- }
- }
- } catch (SocketTimeoutException ignore) {
- ignore.printStackTrace();
- } finally {
- if (is != null) {
- is.close();
- }
- if (client != null) {
- client.close();
- }
- serverSocket.close();
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- }
-
static class MockProxyServer extends MockServer {
boolean acceptedAuthorizedRequest;
@@ -213,18 +89,18 @@
public void run() {
try {
Socket socket = serverSocket.accept();
- socket.setSoTimeout(5000);
+ socket.setSoTimeout(1000);
byte[] buff = new byte[1024];
int num = socket.getInputStream().read(buff);
socket.getOutputStream().write((
- "HTTP/1.0 407 Proxy authentication required\n"
- + "Proxy-authenticate: Basic realm=\"remotehost\"\n\n")
+ "HTTP/1.0 407 Proxy authentication required\n"
+ + "Proxy-authenticate: Basic realm=\"remotehost\"\n\n")
.getBytes());
num = socket.getInputStream().read(buff);
if (num == -1) {
// this connection was closed, create new one:
socket = serverSocket.accept();
- socket.setSoTimeout(5000);
+ socket.setSoTimeout(1000);
num = socket.getInputStream().read(buff);
}
String request = new String(buff, 0, num);
@@ -238,15 +114,7 @@
}
}
}
-
- public void setUp() {
- if (DEBUG) {
- System.out.println("\n==============================");
- System.out.println("===== Execution: "+getName());
- System.out.println("==============================");
- }
- }
-
+
/**
* ProxySelector implementation used in the test.
*/
@@ -388,7 +256,7 @@
server.join();
proxy.join();
- assertTrue("Connection does not use proxy",
+ assertTrue("Connection does not use proxy",
connection.usingProxy());
assertTrue("Proxy server was not used", proxy.accepted);
} finally {
@@ -406,17 +274,17 @@
"user", "password".toCharArray());
}
});
-
+
try {
MockProxyServer proxy = new MockProxyServer("ProxyServer");
URL url = new URL("http://remotehost:55555/requested.data");
- HttpURLConnection connection =
+ HttpURLConnection connection =
(HttpURLConnection) url.openConnection(
- new Proxy(Proxy.Type.HTTP,
+ new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("localhost", proxy.port())));
- connection.setConnectTimeout(5000);
- connection.setReadTimeout(5000);
+ connection.setConnectTimeout(1000);
+ connection.setReadTimeout(1000);
proxy.start();
@@ -431,398 +299,5 @@
Authenticator.setDefault(null);
}
}
-
- /**
- * Test that a connection is not closed if the client reads all the data
- * but not closes input stream. read until -1.
- */
- public void testConnectionPersistence() throws Exception {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
-
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
-
- c.setDoInput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
- InputStream is = c.getInputStream();
- byte[] buffer = new byte[128];
- int totalBytes = 0;
- int bytesRead = 0;
- while((bytesRead = is.read(buffer)) > 0){
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer, 0, bytesRead) + "'");
- }
- totalBytes += bytesRead;
- }
-
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- is = c2.getInputStream();
- buffer = new byte[128];
- totalBytes = 0;
- bytesRead = 0;
- while((bytesRead = is.read(buffer)) > 0){
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer, 0, bytesRead) + "'");
- totalBytes += bytesRead;
- }
- }
- }
-
- /**
- * Test that a connection is not closed if the client reads all the data
- * but not closes input stream. read() not receives -1.
- */
- public void testConnectionPersistence2() throws Exception {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
-
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
-
- c.setDoInput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
- InputStream is = c.getInputStream();
- int bytes2Read = httpServer.response.length();
- byte[] buffer = new byte[httpServer.response.length()];
- while((bytes2Read -= is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
-
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- is = c2.getInputStream();
- buffer = new byte[httpServer.response.length()];
- bytes2Read = httpServer.response.length();
- while((bytes2Read -= is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
- }
-
- /**
- * Test that a connection is not closed if it firstly does POST,
- * and then does GET requests.
- */
- public void testConnectionPersistence3() throws Exception {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
-
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
-
- c.setDoInput(true);
- c.setDoOutput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
- c.getOutputStream().write(httpServer.clientPost.getBytes());
-
- InputStream is = c.getInputStream();
- int bytes2Read = httpServer.response.length();
- byte[] buffer = new byte[httpServer.response.length()];
- while((bytes2Read -= is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
-
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- is = c2.getInputStream();
- buffer = new byte[httpServer.response.length()];
- bytes2Read = httpServer.response.length();
- while((bytes2Read -= is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
- }
-
- /**
- * Test that a connection is not closed if it firstly does GET,
- * and then does POST requests.
- */
- public void testConnectionPersistence4() throws Exception {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
-
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
-
- c.setDoInput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
-
- InputStream is = c.getInputStream();
- int bytes2Read = httpServer.response.length();
- byte[] buffer = new byte[httpServer.response.length()];
- while((bytes2Read = is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
-
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c2.setDoOutput(true);
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- c2.getOutputStream().write(httpServer.clientPost.getBytes());
- is = c2.getInputStream();
- buffer = new byte[httpServer.response.length()];
- bytes2Read = httpServer.response.length();
- while((bytes2Read = is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
- }
-
- /**
- * Test that a connection is not closed if it does POST for 2 times.
- */
- public void testConnectionPersistence5() throws Exception {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
-
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
- c.setDoOutput(true);
- c.setDoInput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
- c.getOutputStream().write(httpServer.clientPost.getBytes());
- InputStream is = c.getInputStream();
- int bytes2Read = httpServer.response.length();
- byte[] buffer = new byte[httpServer.response.length()];
- while((bytes2Read = is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
-
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c2.setDoOutput(true);
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- c2.getOutputStream().write(httpServer.clientPost.getBytes());
- is = c2.getInputStream();
- buffer = new byte[httpServer.response.length()];
- bytes2Read = httpServer.response.length();
- while((bytes2Read = is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
- }
-
- /**
- * Test that a connection made through proxy will be reused
- * for connection establishing without proxy.
- */
- public void testProxiedConnectionPersistence() throws Exception {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
-
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://some.host:1234")
- .openConnection(new Proxy(Proxy.Type.HTTP,
- new InetSocketAddress("localhost",
- httpServer.port())));
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
- c.setDoOutput(true);
- c.setDoInput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
- c.getOutputStream().write(httpServer.clientPost.getBytes());
- InputStream is = c.getInputStream();
- int bytes2Read = httpServer.response.length();
- byte[] buffer = new byte[httpServer.response.length()];
- while((bytes2Read = is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
-
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://some.host:1234").openConnection();
- c2.setDoOutput(true);
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- c2.getOutputStream().write(httpServer.clientPost.getBytes());
- is = c2.getInputStream();
- buffer = new byte[httpServer.response.length()];
- bytes2Read = httpServer.response.length();
- while((bytes2Read = is.read(buffer)) > 0) { }
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer) + "'");
- }
- }
-
- public void testSecurityManager() throws MalformedURLException, IOException, InterruptedException {
- try {
- MockHTTPServer httpServer =
- new MockHTTPServer("HTTP Server for persistence checking", 2);
- httpServer.start();
- synchronized(bound) {
- if (!httpServer.started) {
- bound.wait(5000);
- }
- }
- MySecurityManager sm = new MySecurityManager();
- System.setSecurityManager(sm);
-
- // Check that a first connection calls checkConnect
- try {
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- if (DEBUG) {
- System.out.println("Actual connection class: "+c.getClass());
- }
- c.connect();
- fail("Should have thrown a SecurityException upon connection");
-
- } catch (SecurityException e) {
- }
-
- // Now create a connection properly
- System.setSecurityManager(null);
- HttpURLConnection c = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c.setDoInput(true);
- c.setConnectTimeout(5000);
- c.setReadTimeout(5000);
- InputStream is = c.getInputStream();
- byte[] buffer = new byte[128];
- int totalBytes = 0;
- int bytesRead = 0;
- while((bytesRead = is.read(buffer)) > 0){
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer, 0, bytesRead) + "'");
- }
- totalBytes += bytesRead;
- }
-
- // Now check that a second connection also calls checkConnect
- System.setSecurityManager(sm);
- try {
- HttpURLConnection c2 = (HttpURLConnection)
- new URL("http://localhost:"+httpServer.port()).openConnection();
- c2.setDoInput(true);
- c2.setConnectTimeout(5000);
- c2.setReadTimeout(5000);
- is = c2.getInputStream();
- buffer = new byte[128];
- totalBytes = 0;
- bytesRead = 0;
- while((bytesRead = is.read(buffer)) > 0){
- if (DEBUG) {
- System.out.println("Client got response: '"
- + new String(buffer, 0, bytesRead) + "'");
- totalBytes += bytesRead;
- }
- }
- fail("Expected a SecurityException to be thrown");
- } catch (SecurityException e) {
- }
- } finally {
- System.setSecurityManager(null);
- }
- }
-
- private static class MySecurityManager extends SecurityManager {
-
- @Override
- public void checkConnect(String host, int port) {
- throw new SecurityException();
- }
-
- @Override
- public void checkConnect(String host, int port, Object context) {
- throw new SecurityException();
- }
-
- @Override
- public void checkPermission(Permission permission) {
- // allows a new security manager to be set
- }
-
- }
-
+
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java Wed Mar 28 23:39:39 2007
@@ -161,48 +161,6 @@
}
/**
- * Checks if HTTPS connection performs initial SSL handshake with the
- * server working over SSL, sends encrypted HTTP request,
- * and receives expected HTTP response. After that it checks that the
- * established connection is persistent.
- * After HTTPS session if finished
- * test checks connection state parameters established by
- * HttpsURLConnection.
- */
- public void testHttpsPersistentConnection() throws Throwable {
- // set up the properties defining the default values needed by SSL stuff
- setUpStoreProperties();
-
- try {
- // create the SSL server socket acting as a server
- SSLContext ctx = getContext();
- ServerSocket ss = ctx.getServerSocketFactory()
- .createServerSocket(0);
-
- // create the HostnameVerifier to check hostname verification
- TestHostnameVerifier hnv = new TestHostnameVerifier();
- HttpsURLConnection.setDefaultHostnameVerifier(hnv);
-
- // create url connection to be tested
- URL url = new URL("https://localhost:" + ss.getLocalPort());
- HttpsURLConnection connection = (HttpsURLConnection) url
- .openConnection();
-
- // perform the interaction between the peers
- SSLSocket peerSocket = (SSLSocket) doPersistentInteraction(connection, ss);
-
- // check the connection state
- checkConnectionStateParameters(connection, peerSocket);
-
- // should silently exit
- connection.connect();
- } finally {
- // roll the properties back to system values
- tearDownStoreProperties();
- }
- }
-
- /**
* Tests the behaviour of HTTPS connection in case of unavailability
* of requested resource.
*/
@@ -450,43 +408,6 @@
}
/**
- * Tests the behaviour in case of sending the data to the server
- * over persistent connection.
- */
- public void testPersistence_doOutput() throws Throwable {
- // setting up the properties pointing to the key/trust stores
- setUpStoreProperties();
-
- try {
- // create the SSLServerSocket which will be used by server side
- SSLServerSocket ss = (SSLServerSocket) getContext()
- .getServerSocketFactory().createServerSocket(0);
-
- // create the HostnameVerifier to check that Hostname verification
- // is done
- TestHostnameVerifier hnv = new TestHostnameVerifier();
- HttpsURLConnection.setDefaultHostnameVerifier(hnv);
-
- // create HttpsURLConnection to be tested
- URL url = new URL("https://localhost:" + ss.getLocalPort());
- HttpsURLConnection connection = (HttpsURLConnection) url
- .openConnection();
- connection.setDoOutput(true);
-
- // perform the interaction between the peers and check the results
- SSLSocket peerSocket = (SSLSocket)
- doPersistentInteraction(connection, ss);
- checkConnectionStateParameters(connection, peerSocket);
-
- // should silently exit
- connection.connect();
- } finally {
- // roll the properties back to system values
- tearDownStoreProperties();
- }
- }
-
- /**
* Tests HTTPS connection process made through the proxy server.
*/
public void testProxyConnection() throws Throwable {
@@ -523,43 +444,6 @@
/**
* Tests HTTPS connection process made through the proxy server.
- * Checks that persistent connection to the host exists and can
- * be used no in spite of explicit Proxy specifying.
- */
- public void testPersistentProxyConnection() throws Throwable {
- // setting up the properties pointing to the key/trust stores
- setUpStoreProperties();
-
- try {
- // create the SSLServerSocket which will be used by server side
- ServerSocket ss = new ServerSocket(0);
-
- // create the HostnameVerifier to check that Hostname verification
- // is done
- TestHostnameVerifier hnv = new TestHostnameVerifier();
- HttpsURLConnection.setDefaultHostnameVerifier(hnv);
-
- // create HttpsURLConnection to be tested
- URL url = new URL("https://requested.host:55556/requested.data");
- HttpsURLConnection connection = (HttpsURLConnection) url
- .openConnection(new Proxy(Proxy.Type.HTTP,
- new InetSocketAddress("localhost", ss
- .getLocalPort())));
-
- // perform the interaction between the peers and check the results
- SSLSocket peerSocket = (SSLSocket) doPersistentInteraction(connection, ss);
- checkConnectionStateParameters(connection, peerSocket);
-
- // should silently exit
- connection.connect();
- } finally {
- // roll the properties back to system values
- tearDownStoreProperties();
- }
- }
-
- /**
- * Tests HTTPS connection process made through the proxy server.
* Proxy server needs authentication.
*/
public void testProxyAuthConnection() throws Throwable {
@@ -684,7 +568,7 @@
// perform the interaction between the peers and check the results
SSLSocket peerSocket = (SSLSocket) doInteraction(connection, ss,
- OK_CODE);
+ OK_CODE, true);
checkConnectionStateParameters(connection, peerSocket);
} finally {
// roll the properties back to system values
@@ -719,7 +603,8 @@
// perform the interaction between the peers and check the results
try {
- doInteraction(connection, ss, AUTHENTICATION_REQUIRED_CODE);
+ doInteraction(connection, ss, AUTHENTICATION_REQUIRED_CODE,
+ true);
} catch (IOException e) {
// SSL Tunnelling failed
if (DO_LOG) {
@@ -819,10 +704,10 @@
}
/**
- * Returns the file name of the key/trust store. The key store file
+ * Returns the file name of the key/trust store. The key store file
* (named as "key_store." + extension equals to the default KeyStore
* type installed in the system in lower case) is searched in classpath.
- * @throws AssertionFailedError if property was not set
+ * @throws AssertionFailedError if property was not set
* or file does not exist.
*/
private static String getKeyStoreFileName() throws Exception {
@@ -941,7 +826,7 @@
public static Socket doInteraction(
final HttpURLConnection clientConnection,
final ServerSocket serverSocket) throws Throwable {
- return doInteraction(clientConnection, serverSocket, OK_CODE, false, false);
+ return doInteraction(clientConnection, serverSocket, OK_CODE, false);
}
/**
@@ -954,31 +839,7 @@
final ServerSocket serverSocket, final int responseCode)
throws Throwable {
return doInteraction(clientConnection, serverSocket, responseCode,
- false, false);
- }
-
- /**
- * Performs interaction between client's HttpURLConnection and
- * servers side (ServerSocket) over persistent connection.
- */
- public static Socket doPersistentInteraction(
- final HttpURLConnection clientConnection,
- final ServerSocket serverSocket) throws Throwable {
- return doInteraction(clientConnection, serverSocket, OK_CODE,
- false, true);
- }
-
- /**
- * Performs interaction between client's HttpURLConnection and
- * servers side (ServerSocket) over persistent connection.
- * Server will response with specified response code.
- */
- public static Socket doPersistentInteraction(
- final HttpURLConnection clientConnection,
- final ServerSocket serverSocket, final int responseCode)
- throws Throwable {
- return doInteraction(clientConnection, serverSocket, responseCode,
- false, true);
+ false);
}
/**
@@ -991,8 +852,7 @@
public static Socket doInteraction(
final HttpURLConnection clientConnection,
final ServerSocket serverSocket, final int responseCode,
- final boolean doAuthentication,
- final boolean checkPersistence) throws Throwable {
+ final boolean doAuthentication) throws Throwable {
// set up the connection
clientConnection.setDoInput(true);
@@ -1000,7 +860,7 @@
clientConnection.setReadTimeout(TIMEOUT);
ServerWork server = new ServerWork(serverSocket, responseCode,
- doAuthentication, checkPersistence);
+ doAuthentication);
ClientConnectionWork client = new ClientConnectionWork(clientConnection);
@@ -1008,6 +868,8 @@
client.start();
client.join();
+ server.join();
+
if (client.thrown != null) {
if (responseCode != OK_CODE) { // not OK response expected
// it is probably expected exception, keep it as is
@@ -1021,30 +883,6 @@
throw new Exception(client.thrown);
}
}
-
- if (checkPersistence) {
- ClientConnectionWork client2 =
- new ClientConnectionWork((HttpURLConnection)
- clientConnection.getURL().openConnection());
- client2.start();
- client2.join();
- if (client2.thrown != null) {
- if (responseCode != OK_CODE) { // not OK response expected
- // it is probably expected exception, keep it as is
- throw client2.thrown;
- }
- if ((client2.thrown instanceof SocketTimeoutException)
- && (server.thrown != null)) {
- // server's exception is more informative in this case
- throw new Exception(server.thrown);
- } else {
- throw new Exception(client2.thrown);
- }
- }
- }
-
- server.join();
-
if (server.thrown != null) {
throw server.thrown;
}
@@ -1160,9 +998,6 @@
// indicates if the server needs proxy authentication
private boolean needProxyAuthentication;
- // do we check for connection persistence
- private boolean checkPersistence;
-
// response code to be send to the client peer
private int responseCode;
@@ -1172,7 +1007,7 @@
public ServerWork(ServerSocket serverSocket) {
// the server does not require proxy authentication
// and sends OK_CODE (OK) response code
- this(serverSocket, OK_CODE, false, false);
+ this(serverSocket, OK_CODE, false);
}
/**
@@ -1183,11 +1018,10 @@
* indicates if the server needs proxy authentication
*/
public ServerWork(ServerSocket serverSocket, int responseCode,
- boolean needProxyAuthentication, boolean checkPersistence) {
+ boolean needProxyAuthentication) {
this.serverSocket = serverSocket;
this.responseCode = responseCode;
this.needProxyAuthentication = needProxyAuthentication;
- this.checkPersistence = checkPersistence;
// will act as a proxy server if the specified server socket
// is not a secure server socket
if (serverSocket instanceof SSLServerSocket) {
@@ -1239,120 +1073,105 @@
InputStream is = peerSocket.getInputStream();
OutputStream os = peerSocket.getOutputStream();
- // how many times established connection will be used
- int number_of_uses = checkPersistence ? 2 : 1;
- for (int it=0; it<number_of_uses; it++) {
- if (checkPersistence) {
- log("==========================================");
- log("Use established connection for "+(it+1)+" time");
+ num = is.read(buff);
+ String message = new String(buff, 0, num);
+ log("Got request:\n" + message);
+ log("------------------");
+
+ if (!actAsProxy) {
+ // Act as Server (not Proxy) side
+ if (message.startsWith("POST")) {
+ // client connection sent some data
+ log("try to read client data");
+ num = is.read(buff);
+ message = new String(buff, 0, num);
+ log("client's data: '" + message + "'");
+ // check the received data
+ assertEquals(clientsData, message);
}
+ // just send the response
+ os
+ .write(("HTTP/1.1 " + responseCode + "\n" + httpsResponseTail)
+ .getBytes());
+ // and return
+ log("Work is DONE");
+ return;
+ }
+ // Do proxy work
+ if (needProxyAuthentication) {
+ log("Authentication required ...");
+ // send Authentication Request
+ os.write(respAuthenticationRequired.getBytes());
+ // read response
num = is.read(buff);
- String message = new String(buff, 0, num);
- log("Got request:\n" + message);
- log("------------------");
-
- if (!actAsProxy) {
- // Act as Server (not Proxy) side
- if (message.startsWith("POST")) {
- // client connection sent some data
- log("try to read client data");
- num = is.read(buff);
- message = new String(buff, 0, num);
- log("client's data: '" + message + "'");
- // check the received data
- assertEquals(clientsData, message);
- }
- // just send the response
- os.write(("HTTP/1.1 " + responseCode + "\n"
- + httpsResponseTail).getBytes());
- log("Simple NON-Proxy work is DONE");
- continue;
- }
-
- // Do proxy work
- if (needProxyAuthentication) {
- log("Authentication required ...");
- // send Authentication Request
- os.write(respAuthenticationRequired.getBytes());
- // read response
+ if (num == -1) {
+ // this connection was closed,
+ // do clean up and create new one:
+ closeSocket(peerSocket);
+ peerSocket = serverSocket.accept();
+ peerSocket.setSoTimeout(TIMEOUT);
+ log("New client connection ACCEPTED");
+ is = peerSocket.getInputStream();
+ os = peerSocket.getOutputStream();
num = is.read(buff);
- if (num == -1) {
- // this connection was closed,
- // do clean up and create new one:
- closeSocket(peerSocket);
- peerSocket = serverSocket.accept();
- peerSocket.setSoTimeout(TIMEOUT);
- log("New client connection ACCEPTED");
- is = peerSocket.getInputStream();
- os = peerSocket.getOutputStream();
- num = is.read(buff);
- }
- message = new String(buff, 0, num);
- log("Got authenticated request:\n" + message);
- log("------------------");
- // check provided authorization credentials
- assertTrue("Received message does not contain "
- + "authorization credentials", message
- .toLowerCase().indexOf("proxy-authorization:") > 0);
}
+ message = new String(buff, 0, num);
+ log("Got authenticated request:\n" + message);
+ log("------------------");
+ // check provided authorization credentials
+ assertTrue("Received message does not contain "
+ + "authorization credentials", message
+ .toLowerCase().indexOf("proxy-authorization:") > 0);
+ }
- if (peerSocket instanceof SSLSocket) {
- // it will be so if we are have second iteration
- // over persistent connection
- os.write(("HTTP/1.1 " + OK_CODE
- + "\n" + httpsResponseTail).getBytes());
- log("Sent OK RESPONSE over SSL");
- } else {
- // The content of this response will reach proxied
- // HTTPUC but will not reach proxied HTTPSUC
- // In case of HTTP connection it will be the final
- // message, in case of HTTPS connection this message
- // will just indicate that connection with remote
- // host has been done
- // (i.e. SSL tunnel has been established).
- os.write(plainResponse.getBytes());
- log("Sent OK RESPONSE");
- }
+ // The content of this response will reach proxied HTTPUC
+ // but will not reach proxied HTTPSUC
+ // In case of HTTP connection it will be the final message,
+ // in case of HTTPS connection this message will just indicate
+ // that connection with remote host has been done
+ // (i.e. SSL tunnel has been established).
+ os.write(plainResponse.getBytes());
+ log("Sent OK RESPONSE");
+
+ if (message.startsWith("CONNECT")) { // request for SSL tunnel
+ log("Perform SSL Handshake...");
+ // create sslSocket acting as a remote server peer
+ SSLSocket sslSocket = (SSLSocket) getContext()
+ .getSocketFactory().createSocket(peerSocket,
+ "localhost", peerSocket.getPort(), true); // do autoclose
+ sslSocket.setUseClientMode(false);
+ // demand client authentication
+ sslSocket.setNeedClientAuth(true);
+ sslSocket.startHandshake();
+ peerSocket = sslSocket;
+ is = peerSocket.getInputStream();
+ os = peerSocket.getOutputStream();
- if (message.startsWith("CONNECT")) { // request for SSL tunnel
- log("Perform SSL Handshake...");
- // create sslSocket acting as a remote server peer
- SSLSocket sslSocket = (SSLSocket) getContext()
- .getSocketFactory().createSocket(peerSocket,
- "localhost", peerSocket.getPort(), true); // do autoclose
- sslSocket.setUseClientMode(false);
- // demand client authentication
- sslSocket.setNeedClientAuth(true);
- sslSocket.startHandshake();
- peerSocket = sslSocket;
- is = peerSocket.getInputStream();
- os = peerSocket.getOutputStream();
+ // read the HTTP request sent by secure connection
+ // (HTTPS request)
+ num = is.read(buff);
+ message = new String(buff, 0, num);
+ log("[Remote Server] Request from SSL tunnel:\n" + message);
+ log("------------------");
- // read the HTTP request sent by secure connection
- // (HTTPS request)
+ if (message.startsWith("POST")) {
+ // client connection sent some data
+ log("[Remote Server] try to read client data");
num = is.read(buff);
message = new String(buff, 0, num);
- log("[Remote Server] Request from SSL tunnel:\n" + message);
- log("------------------");
-
- if (message.startsWith("POST")) {
- // client connection sent some data
- log("[Remote Server] try to read client data");
- num = is.read(buff);
- message = new String(buff, 0, num);
- log("[Remote Server] client's data: '" + message + "'");
- // check the received data
- assertEquals(clientsData, message);
- }
-
- log("[Remote Server] Sending the response by SSL tunnel..");
- // send the response with specified response code
- os.write(("HTTP/1.1 " + responseCode
- + "\n" + httpsResponseTail).getBytes());
+ log("[Remote Server] client's data: '" + message + "'");
+ // check the received data
+ assertEquals(clientsData, message);
}
- log("Work is DONE");
- };
+
+ log("[Remote Server] Sending the response by SSL tunnel..");
+ // send the response with specified response code
+ os
+ .write(("HTTP/1.1 " + responseCode + "\n" + httpsResponseTail)
+ .getBytes());
+ }
+ log("Work is DONE");
} catch (Throwable e) {
if (DO_LOG) {
e.printStackTrace();
@@ -1403,7 +1222,7 @@
}
// read the content of HTTP(s) response
InputStream is = connection.getInputStream();
- log("Input Stream obtained: "+is.getClass());
+ log("Input Stream obtained");
byte[] buff = new byte[2048];
int num = 0;
int byt = 0;