diff options
author | Endi S. Dewata <edewata@redhat.com> | 2015-07-01 14:41:51 -0400 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2015-07-02 19:21:12 -0400 |
commit | cc8f6468bb9f509d16ed526e42d546aaa2ae9ed3 (patch) | |
tree | ff1916b7674577bb30045424b6c97fccc364105c /base/util | |
parent | 433e1dba905f9d45f9eefcbf39e5b11ddfbfbc94 (diff) | |
download | pki-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')
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; } |