From f231e17e6a2bfbe9c3ce46c878f77240c437eee5 Mon Sep 17 00:00:00 2001 From: Rajith Muditha Attapattu Date: Thu, 8 Jul 2010 18:18:41 +0000 Subject: QPID-2719 The SSL receiver now logs the error and also reports it up the stack. It also notifies the sender not to wait any longer. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@961860 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/transport/network/security/ssl/SSLReceiver.java | 8 +++++++- .../qpid/transport/network/security/ssl/SSLSender.java | 15 ++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'java/common/src/main') diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java index 082ae9e8ec..e227a51729 100644 --- a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java +++ b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java @@ -188,7 +188,13 @@ public class SSLReceiver implements Receiver } catch(SSLException e) { - throw new TransportException("Error in SSLReceiver",e); + log.error(e, "Error caught in SSLReceiver"); + sender.setErrorFlag(); + synchronized(notificationToken) + { + notificationToken.notifyAll(); + } + exception(new TransportException("Error in SSLReceiver",e)); } } diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java index 24cedcc75a..3c2ad061f3 100644 --- a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java +++ b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java @@ -44,6 +44,7 @@ public class SSLSender implements Sender private final Object engineState = new Object(); private final AtomicBoolean closed = new AtomicBoolean(false); + private final AtomicBoolean error = new AtomicBoolean(false); private static final Logger log = Logger.get(SSLSender.class); @@ -70,6 +71,7 @@ public class SSLSender implements Sender return; } log.debug("Closing SSL connection"); + engine.closeOutbound(); try { @@ -144,9 +146,8 @@ public class SSLSender implements Sender HandshakeStatus handshakeStatus; Status status; - while(appData.hasRemaining()) + while(appData.hasRemaining() && !error.get()) { - int read = 0; try { @@ -154,7 +155,6 @@ public class SSLSender implements Sender read = result.bytesProduced(); status = result.getStatus(); handshakeStatus = result.getHandshakeStatus(); - } catch(SSLException e) { @@ -221,7 +221,7 @@ public class SSLSender implements Sender } if (System.currentTimeMillis()- start >= timeout) - { + { throw new SenderException( "SSL Engine timed out waiting for a response." + "To get more info,run with -Djavax.net.debug=ssl"); @@ -241,7 +241,7 @@ public class SSLSender implements Sender break; //do nothing default: - throw new IllegalStateException("SSLReceiver: Invalid State " + status); + throw new IllegalStateException("SSLSender: Invalid State " + status); } } @@ -259,6 +259,11 @@ public class SSLSender implements Sender { return engineState; } + + public void setErrorFlag() + { + error.set(true); + } public void setIdleTimeout(int i) { -- cgit v1.2.1