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

Victor N commented on DIRMINA-645:
----------------------------------

Currently I have done a workaround for StartTLS using Reflection:

class PatchedSslFilter extends SslFilter {

        private Method method;
        
                public PatchedSslFilter(SSLContext sslContext) {
                        super(sslContext, true);
                        try {
                                method = 
SslFilter.class.getDeclaredMethod("initiateHandshake", NextFilter.class, 
IoSession.class);
                                method.setAccessible(true);
                        } catch (Exception ex) {
                                throw new RuntimeException(ex);
                        }
                }

                @Override
                public void onPostAdd(IoFilterChain parent, String name,
                                NextFilter nextFilter) throws SSLException {
                        try {
                                method.invoke(this, nextFilter, 
parent.getSession());
                        } catch (Exception ex) {
                                throw new RuntimeException(ex);
                        }
                }
        
    }

I think a better way is to make SSLFilter more flexible and support both cases 
- start in 'session created' and 'onPostAdd'. In fact, there is 'autoStart' 
flag already there.
Also, 'initiateHandshake' method could be protected, not private.
                
> SslFilter should start initiating handshake from sesionCreated() rather than 
> from onPostAdd()
> ---------------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-645
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-645
>             Project: MINA
>          Issue Type: Improvement
>          Components: Filter
>    Affects Versions: 2.0.0-M3
>            Reporter: Dan Mihai Dumitriu
>             Fix For: 2.0.5
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> Here's the situation I needed to get working.  We want to make a secure 
> connection through a SOCKS 5 proxy.  So, one would think that just using the 
> SslFilter and and the ProxyConnector (which adds the ProxyFilter at the 
> bottom of the stack) would just do it.  Unfortunately, it does not work quite 
> right out of the box.  The ProxyFilter only fully initializes itself after 
> the sessionCreated() method is called.  Meanwhile, the SslFilter tries to 
> start the handshake (i.e. calls initiateHandshake()) from the onPostAdd() 
> method, which occurs before the sessionCreated() is called.
> Moving the initiateHandshake() from onPostAdd() to sessionCreated() in 
> SslFilter, as shown below, seems to fix the problem.
>     @Override
>     public void onPostAdd(IoFilterChain parent, String name,
>             NextFilter nextFilter) throws SSLException {
> //        if (autoStart) {
> //            initiateHandshake(nextFilter, parent.getSession());
> //        }
>     }
>     
>     @Override
>       public void sessionCreated(NextFilter nextFilter, IoSession session)
>                       throws Exception {
>       super.sessionCreated(nextFilter, session);
>       
>       if (autoStart) {
>             initiateHandshake(nextFilter, session);
>         }
>       }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to