Author: elecharny
Date: Sun Dec 11 18:29:36 2011
New Revision: 1213038
URL: http://svn.apache.org/viewvc?rev=1213038&view=rev
Log:
Handling the data being received on a secured connection
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java?rev=1213038&r1=1213037&r2=1213038&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
Sun Dec 11 18:29:36 2011
@@ -474,15 +474,41 @@ public class NioSelectorProcessor implem
// limit at the current position & rewind buffer back to start
& push to the chain
readBuffer.flip();
- if (session.isSecured() && !session.isConnectedSecured()) {
- // Process the SSL handshake now
- processHandShake(session, readBuffer);
+ if (session.isSecured()) {
+ if (!session.isConnectedSecured()) {
+ // Process the SSL handshake now
+ processHandShake(session, readBuffer);
+ } else {
+ // Unwrap the incoming data
+ processUnwrap(session, readBuffer);
+ }
} else {
+ // Plain message, not encrypted : go directly to the chain
session.getFilterChain().processMessageReceived(session,
readBuffer);
}
}
}
+ private void processUnwrap(IoSession session, ByteBuffer inBuffer)
throws SSLException {
+ SslHelper sslHelper = session.getAttribute( IoSession.SSL_HELPER );
+
+ if (sslHelper == null) {
+ throw new IllegalStateException();
+ }
+
+ SSLEngine engine = sslHelper.getEngine();
+
+ // Blind guess : once uncompressed, the resulting buffer will be 3
times bigger
+ ByteBuffer appBuffer = ByteBuffer.allocate(inBuffer.limit() * 3 );
+ Status status = sslHelper.processUnwrap(engine, inBuffer,
appBuffer );
+ appBuffer.flip();
+
+ if (status == Status.OK) {
+ // Ok, go through the chain now
+ session.getFilterChain().processMessageReceived(session,
appBuffer);
+ }
+ }
+
private boolean processHandShake(IoSession session, ByteBuffer
inBuffer) throws SSLException {
SslHelper sslHelper = session.getAttribute(IoSession.SSL_HELPER);