[
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