summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2010-07-08 18:18:41 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2010-07-08 18:18:41 +0000
commitf231e17e6a2bfbe9c3ce46c878f77240c437eee5 (patch)
tree399545b341fc2bfaa031afbb34e5848c6ab9cba1
parent124fd2ea104c564c7f72d65d5a6ce697e88f7474 (diff)
downloadqpid-python-f231e17e6a2bfbe9c3ce46c878f77240c437eee5.tar.gz
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
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java8
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java15
2 files changed, 17 insertions, 6 deletions
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<ByteBuffer>
}
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<ByteBuffer>
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<ByteBuffer>
return;
}
log.debug("Closing SSL connection");
+
engine.closeOutbound();
try
{
@@ -144,9 +146,8 @@ public class SSLSender implements Sender<ByteBuffer>
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<ByteBuffer>
read = result.bytesProduced();
status = result.getStatus();
handshakeStatus = result.getHandshakeStatus();
-
}
catch(SSLException e)
{
@@ -221,7 +221,7 @@ public class SSLSender implements Sender<ByteBuffer>
}
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<ByteBuffer>
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<ByteBuffer>
{
return engineState;
}
+
+ public void setErrorFlag()
+ {
+ error.set(true);
+ }
public void setIdleTimeout(int i)
{