Author: trustin
Date: Sun Jul 29 20:31:32 2007
New Revision: 560851
URL: http://svn.apache.org/viewvc?view=rev&rev=560851
Log:
Fixed StackOverflowError in SSLHandler
Modified:
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java
Modified:
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
URL:
http://svn.apache.org/viewvc/mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java?view=diff&rev=560851&r1=560850&r2=560851
==============================================================================
---
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
(original)
+++
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
Sun Jul 29 20:31:32 2007
@@ -438,7 +438,7 @@
* @param status
* @throws SSLException
*/
- private void checkStatus(NextFilter nextFilter, SSLEngineResult res)
+ private void checkStatus(SSLEngineResult res)
throws SSLException {
SSLEngineResult.Status status = res.getStatus();
@@ -458,12 +458,6 @@
+ " inNetBuffer: " + inNetBuffer + "appBuffer: "
+ appBuffer);
}
-
- if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
- // Renegotiation required.
- SessionLog.debug(session, " Renegotiating...");
- handshake(nextFilter);
- }
}
/**
@@ -619,7 +613,14 @@
// prepare app data to be read
appBuffer.flip();
- checkStatus(nextFilter, res);
+ checkStatus(res);
+
+
+ if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+ // Renegotiation required.
+ SessionLog.debug(session, " Renegotiating...");
+ handshake(nextFilter);
+ }
}
private SSLEngineResult.Status unwrapHandshake(NextFilter nextFilter)
throws SSLException {
@@ -635,6 +636,8 @@
SSLEngineResult res = unwrap0();
initialHandshakeStatus = res.getHandshakeStatus();
+ checkStatus(res);
+
// If handshake finished, no data was produced, and the status is
still ok,
// try to unwrap more
if (initialHandshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
@@ -642,15 +645,26 @@
&& res.getStatus() == SSLEngineResult.Status.OK
&& inNetBuffer.hasRemaining()) {
res = unwrap0();
- }
-
- // prepare to be written again
- inNetBuffer.compact();
+
+ // prepare to be written again
+ inNetBuffer.compact();
+
+ // prepare app data to be read
+ appBuffer.flip();
+
+ if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+ // Renegotiation required.
+ SessionLog.debug(session, " Renegotiating...");
+ handshake(nextFilter);
+ }
+ } else {
+ // prepare to be written again
+ inNetBuffer.compact();
- // prepare app data to be read
- appBuffer.flip();
+ // prepare app data to be read
+ appBuffer.flip();
+ }
- checkStatus(nextFilter, res);
return res.getStatus();
}
Modified:
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
URL:
http://svn.apache.org/viewvc/mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java?view=diff&rev=560851&r1=560850&r2=560851
==============================================================================
---
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
(original)
+++
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
Sun Jul 29 20:31:32 2007
@@ -435,7 +435,7 @@
* @param status
* @throws SSLException
*/
- private void checkStatus(NextFilter nextFilter, SSLEngineResult res)
+ private void checkStatus(SSLEngineResult res)
throws SSLException {
SSLEngineResult.Status status = res.getStatus();
@@ -455,12 +455,6 @@
+ " inNetBuffer: " + inNetBuffer + "appBuffer: "
+ appBuffer);
}
-
- if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
- // Renegotiation required.
- SessionLog.debug(session, " Renegotiating...");
- handshake(nextFilter);
- }
}
/**
@@ -611,7 +605,14 @@
// prepare app data to be read
appBuffer.flip();
- checkStatus(nextFilter, res);
+ checkStatus(res);
+
+
+ if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+ // Renegotiation required.
+ SessionLog.debug(session, " Renegotiating...");
+ handshake(nextFilter);
+ }
}
private SSLEngineResult.Status unwrapHandshake(NextFilter nextFilter)
throws SSLException {
@@ -627,6 +628,8 @@
SSLEngineResult res = unwrap0();
initialHandshakeStatus = res.getHandshakeStatus();
+ checkStatus(res);
+
// If handshake finished, no data was produced, and the status is
still ok,
// try to unwrap more
if (initialHandshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
@@ -634,15 +637,26 @@
&& res.getStatus() == SSLEngineResult.Status.OK
&& inNetBuffer.hasRemaining()) {
res = unwrap0();
- }
-
- // prepare to be written again
- inNetBuffer.compact();
+
+ // prepare to be written again
+ inNetBuffer.compact();
+
+ // prepare app data to be read
+ appBuffer.flip();
+
+ if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+ // Renegotiation required.
+ SessionLog.debug(session, " Renegotiating...");
+ handshake(nextFilter);
+ }
+ } else {
+ // prepare to be written again
+ inNetBuffer.compact();
- // prepare app data to be read
- appBuffer.flip();
+ // prepare app data to be read
+ appBuffer.flip();
+ }
- checkStatus(nextFilter, res);
return res.getStatus();
}
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java?view=diff&rev=560851&r1=560850&r2=560851
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java
(original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java
Sun Jul 29 20:31:32 2007
@@ -441,7 +441,7 @@
* @param status
* @throws SSLException
*/
- private void checkStatus(NextFilter nextFilter, SSLEngineResult res)
+ private void checkStatus(SSLEngineResult res)
throws SSLException {
SSLEngineResult.Status status = res.getStatus();
@@ -461,12 +461,6 @@
+ " inNetBuffer: " + inNetBuffer + "appBuffer: "
+ appBuffer);
}
-
- if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
- // Renegotiation required.
- SessionLog.debug(session, " Renegotiating...");
- handshake(nextFilter);
- }
}
/**
@@ -621,7 +615,14 @@
// prepare app data to be read
appBuffer.flip();
- checkStatus(nextFilter, res);
+ checkStatus(res);
+
+
+ if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+ // Renegotiation required.
+ SessionLog.debug(session, " Renegotiating...");
+ handshake(nextFilter);
+ }
}
private SSLEngineResult.Status unwrapHandshake(NextFilter nextFilter)
throws SSLException {
@@ -637,6 +638,8 @@
SSLEngineResult res = unwrap0();
initialHandshakeStatus = res.getHandshakeStatus();
+ checkStatus(res);
+
// If handshake finished, no data was produced, and the status is
still ok,
// try to unwrap more
if (initialHandshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
@@ -644,15 +647,26 @@
&& res.getStatus() == SSLEngineResult.Status.OK
&& inNetBuffer.hasRemaining()) {
res = unwrap0();
- }
-
- // prepare to be written again
- inNetBuffer.compact();
+
+ // prepare to be written again
+ inNetBuffer.compact();
+
+ // prepare app data to be read
+ appBuffer.flip();
+
+ if (res.getHandshakeStatus() !=
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+ // Renegotiation required.
+ SessionLog.debug(session, " Renegotiating...");
+ handshake(nextFilter);
+ }
+ } else {
+ // prepare to be written again
+ inNetBuffer.compact();
- // prepare app data to be read
- appBuffer.flip();
+ // prepare app data to be read
+ appBuffer.flip();
+ }
- checkStatus(nextFilter, res);
return res.getStatus();
}