[ 
https://issues.apache.org/jira/browse/DIRMINA-842?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13059426#comment-13059426
 ] 

Niklas Gustavsson commented on DIRMINA-842:
-------------------------------------------

Alright, I've analysed this on Android 3.0. With a patch to Vysper to enable 
BKS keystores (or any other type. Will commit to Vysper) I get the same 
behavior. It seems like the SSL implementation in Android will end up in the 
state NOT_HANDSHAKING rather than FINISHED when done. The following patch to 
MINA will fix things:

Index: src/main/java/org/apache/mina/filter/ssl/SslHandler.java
===================================================================
--- src/main/java/org/apache/mina/filter/ssl/SslHandler.java    (revision 
1142628)
+++ src/main/java/org/apache/mina/filter/ssl/SslHandler.java    (working copy)
@@ -509,6 +510,7 @@
         for (;;) {
             switch (handshakeStatus) {
                 case FINISHED:
+                case NOT_HANDSHAKING:
                     if ( LOGGER.isDebugEnabled()) {
                         LOGGER.debug("{} processing the FINISHED state", 
sslFilter.getSessionInfo(session));
                     }

With this patch in place, I can connect to Vysper running on the Android 
emulator. Pretty cool actually :-)

Now, do we want this patch in MINA? I'm not familiar enough with this 
particular code to understand the dangers.

> Crash on Android
> ----------------
>
>                 Key: DIRMINA-842
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-842
>             Project: MINA
>          Issue Type: Bug
>         Environment: android 2.2 (emulator)
>            Reporter: Kaja Hovi
>            Assignee: Niklas Gustavsson
>              Labels: android, ssl
>
> I tried to run VYSPER on android, with just one fix - getting "bks" keystore 
> instead of "jks" (or just KeyStore ks = 
> KeyStore.getInstance(KeyStore.getDefaultType()); to make it work on both 
> platforms) , I used portecle to convert VYSPER default jks certificate into 
> bks format.
> When I run server on android and try to autenticate, I get following 
> exception:
> 06-30 21:36:40.109: ERROR/L4J(342): 1178740 [NioProcessor-2] ERROR 
> org.apache.mina.filter.ssl.SslHandler  - Invalid Handshaking 
> StateNOT_HANDSHAKING while processing the Handshake for session 3
> 06-30 21:36:40.109: WARN/L4J(342): 1178743 [NioProcessor-2] WARN 
> org.apache.vysper.mina.XmppIoHandlerAdapter  - error caught on transportation 
> layer: {}
> 06-30 21:36:40.116: WARN/System.err(342): java.lang.IllegalStateException: 
> Invalid Handshaking StateNOT_HANDSHAKING while processing the Handshake for 
> session 3
> 06-30 21:36:40.116: WARN/System.err(342):     at 
> org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:593)
> 06-30 21:36:40.126: WARN/System.err(342):     at 
> org.apache.mina.filter.ssl.SslHandler.writeNetBuffer(SslHandler.java:632)
> 06-30 21:36:40.137: WARN/System.err(342):     at 
> org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:586)
> 06-30 21:36:40.137: WARN/System.err(342):     at 
> org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:349)
> 06-30 21:36:40.137: WARN/System.err(342):     at 
> org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:476)
> 06-30 21:36:40.137: WARN/System.err(342):     at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
> 06-30 21:36:40.155: WARN/System.err(342):     at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
> 06-30 21:36:40.155: WARN/System.err(342):     at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
> 06-30 21:36:40.155: WARN/System.err(342):     at 
> org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
> 06-30 21:36:40.166: WARN/System.err(342):     at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
> 06-30 21:36:40.166: WARN/System.err(342):     at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426)
> 06-30 21:36:40.166: WARN/System.err(342):     at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:693)
> 06-30 21:36:40.176: WARN/System.err(342):     at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:646)
> 06-30 21:36:40.193: WARN/System.err(342):     at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:635)
> 06-30 21:36:40.196: WARN/System.err(342):     at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:67)
> 06-30 21:36:40.196: WARN/System.err(342):     at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1079)
> 06-30 21:36:40.196: WARN/System.err(342):     at 
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
> 06-30 21:36:40.206: WARN/System.err(342):     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
> 06-30 21:36:40.215: WARN/System.err(342):     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
> 06-30 21:36:40.215: WARN/System.err(342):     at 
> java.lang.Thread.run(Thread.java:1096)
> Any ideas what might cause this and how to fix it?
> Same project works fine in JRE (with both bks and jks).
> I found similar issue here (mina+android):
> http://androiddiscuss.com/1-android-discuss/1022.html
> I hope I am posting in correct place, since it is also about project VYSPER 
> and it seems possibly like android sdk bug, sorry if not.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to