summaryrefslogtreecommitdiffstats
path: root/base/util
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2015-07-01 14:41:51 -0400
committerEndi S. Dewata <edewata@redhat.com>2015-07-02 19:21:12 -0400
commitcc8f6468bb9f509d16ed526e42d546aaa2ae9ed3 (patch)
treeff1916b7674577bb30045424b6c97fccc364105c /base/util
parent433e1dba905f9d45f9eefcbf39e5b11ddfbfbc94 (diff)
downloadpki-cc8f6468bb9f509d16ed526e42d546aaa2ae9ed3.tar.gz
pki-cc8f6468bb9f509d16ed526e42d546aaa2ae9ed3.tar.xz
pki-cc8f6468bb9f509d16ed526e42d546aaa2ae9ed3.zip
Fixed fail-over in HttpConnection.
The HttpConnection class has been modified to support fail-over and timeout more consistently. The targets are parsed into a list during initialization. All direct calls to HttpClient.connect() are replaced with a method that will connect to the first available target. All connections are now created with a timeout (which by default is 0). https://fedorahosted.org/pki/ticket/891
Diffstat (limited to 'base/util')
-rw-r--r--base/util/src/com/netscape/cmsutil/http/HttpClient.java40
-rw-r--r--base/util/src/com/netscape/cmsutil/http/JssSSLSocketFactory.java27
-rw-r--r--base/util/src/com/netscape/cmsutil/net/ISocketFactory.java10
3 files changed, 35 insertions, 42 deletions
diff --git a/base/util/src/com/netscape/cmsutil/http/HttpClient.java b/base/util/src/com/netscape/cmsutil/http/HttpClient.java
index 438c70c23..db042a781 100644
--- a/base/util/src/com/netscape/cmsutil/http/HttpClient.java
+++ b/base/util/src/com/netscape/cmsutil/http/HttpClient.java
@@ -59,22 +59,24 @@ public class HttpClient {
mCertApprovalCallback = certApprovalCallback;
}
- public void connect(String host, int port)
- throws IOException {
+ public void connect(String host, int port,
+ int timeout // milliseconds
+ ) throws IOException {
+
if (mFactory != null) {
if (mCertApprovalCallback == null) {
- mSocket = mFactory.makeSocket(host, port);
+ mSocket = mFactory.makeSocket(host, port, timeout);
} else {
- mSocket = mFactory.makeSocket(host, port, mCertApprovalCallback, null);
+ mSocket = mFactory.makeSocket(host, port, mCertApprovalCallback, null, timeout);
}
+
} else {
mSocket = new Socket(host, port);
+ mSocket.setSoTimeout(timeout);
}
if (mSocket == null) {
- IOException e = new IOException("Couldn't make connection");
-
- throw e;
+ throw new IOException("Couldn't make connection");
}
mInputStream = mSocket.getInputStream();
@@ -85,30 +87,10 @@ public class HttpClient {
mConnected = true;
}
- // Inserted by beomsuk
- public void connect(String host, int port, int timeout)
- throws IOException {
- if (mFactory != null) {
- mSocket = mFactory.makeSocket(host, port, timeout);
- } else {
- mSocket = new Socket(host, port);
- }
-
- if (mSocket == null) {
- IOException e = new IOException("Couldn't make connection");
-
- throw e;
- }
-
- mInputStream = mSocket.getInputStream();
- mOutputStream = mSocket.getOutputStream();
- mInputStreamReader = new InputStreamReader(mInputStream, "UTF8");
- mBufferedReader = new BufferedReader(mInputStreamReader);
- mOutputStreamWriter = new OutputStreamWriter(mOutputStream, "UTF8");
- mConnected = true;
+ public void connect(String host, int port) throws IOException {
+ connect(host, port, 0);
}
- // Insert end
public boolean connected() {
return mConnected;
}
diff --git a/base/util/src/com/netscape/cmsutil/http/JssSSLSocketFactory.java b/base/util/src/com/netscape/cmsutil/http/JssSSLSocketFactory.java
index 166479d5a..8c70480e2 100644
--- a/base/util/src/com/netscape/cmsutil/http/JssSSLSocketFactory.java
+++ b/base/util/src/com/netscape/cmsutil/http/JssSSLSocketFactory.java
@@ -48,13 +48,14 @@ public class JssSSLSocketFactory implements ISocketFactory {
public Socket makeSocket(String host, int port)
throws IOException, UnknownHostException {
- return makeSocket(host, port, null, null);
+ return makeSocket(host, port, null, null, 0);
}
public Socket makeSocket(String host, int port,
SSLCertificateApprovalCallback certApprovalCallback,
- SSLClientCertificateSelectionCallback clientCertCallback)
- throws IOException, UnknownHostException {
+ SSLClientCertificateSelectionCallback clientCertCallback,
+ int timeout // milliseconds
+ ) throws IOException, UnknownHostException {
try {
/*
@@ -63,6 +64,7 @@ public class JssSSLSocketFactory implements ISocketFactory {
s = new SSLSocket(host, port, null, 0, certApprovalCallback,
clientCertCallback);
s.setUseClientMode(true);
+ s.setSoTimeout(timeout);
SSLHandshakeCompletedListener listener = null;
@@ -79,27 +81,34 @@ public class JssSSLSocketFactory implements ISocketFactory {
s.setClientCertNickname(mClientAuthCertNickname);
}
s.forceHandshake();
+
} catch (org.mozilla.jss.crypto.ObjectNotFoundException e) {
- throw new IOException(e.toString());
+ throw new IOException(e.toString(), e);
+
} catch (org.mozilla.jss.crypto.TokenException e) {
- throw new IOException(e.toString());
+ throw new IOException(e.toString(), e);
+
} catch (UnknownHostException e) {
throw e;
+
} catch (IOException e) {
throw e;
+
} catch (Exception e) {
- throw new IOException(e.toString());
+ throw new IOException(e.toString(), e);
}
+
return s;
}
- public Socket makeSocket(String host, int port, int timeout)
- throws IOException, UnknownHostException {
+ public Socket makeSocket(String host, int port,
+ int timeout // milliseconds
+ ) throws IOException, UnknownHostException {
Thread t = new ConnectAsync(this, host, port);
t.start();
try {
- t.join(1000 * timeout);
+ t.join(timeout);
} catch (InterruptedException e) {
}
diff --git a/base/util/src/com/netscape/cmsutil/net/ISocketFactory.java b/base/util/src/com/netscape/cmsutil/net/ISocketFactory.java
index 18f6cac88..0dd6963ce 100644
--- a/base/util/src/com/netscape/cmsutil/net/ISocketFactory.java
+++ b/base/util/src/com/netscape/cmsutil/net/ISocketFactory.java
@@ -28,11 +28,13 @@ public interface ISocketFactory {
Socket makeSocket(String host, int port)
throws IOException, UnknownHostException;
- Socket makeSocket(String host, int port, int timeout)
- throws IOException, UnknownHostException;
+ Socket makeSocket(String host, int port,
+ int timeout // milliseconds
+ ) throws IOException, UnknownHostException;
Socket makeSocket(String host, int port,
SSLCertificateApprovalCallback certApprovalCallback,
- SSLClientCertificateSelectionCallback clientCertCallback)
- throws IOException, UnknownHostException;
+ SSLClientCertificateSelectionCallback clientCertCallback,
+ int timeout // milliseconds
+ ) throws IOException, UnknownHostException;
}