[ 
https://issues.apache.org/jira/browse/SSHD-734?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Grzegorz Grzybek updated SSHD-734:
----------------------------------
    Description: 
# {{org.apache.sshd.common.session.helpers.AbstractSession#sendKexInit()}} is 
called in {{ClientSessionImpl}} constructor
# {{org.apache.sshd.common.io.IoSession#write}} is called
# async write is done with handler created by 
{{org.apache.sshd.common.io.nio2.Nio2Session#createWriteCycleCompletionHandler()}}
# if e.g., {{sun.nio.ch.UnixAsynchronousSocketChannelImpl#implWrite()}} fails, 
it calls {{org.apache.sshd.common.io.nio2.Nio2CompletionHandler#onFailed()}}
# {{org.apache.sshd.common.io.nio2.Nio2Session#exceptionCaught()}} calls 
{{org.apache.sshd.common.io.IoHandler#exceptionCaught()}}
# 
{{org.apache.sshd.common.session.helpers.AbstractSessionIoHandler#exceptionCaught()}}
 can't find session in {{AbstractSession.getSession(ioSession, true)}}
# it throws {{throw new IllegalStateException("No session available", cause)}} 
instead of something more related to actual problem

The solution to "No session available" is simply to attach session in 
{{ClientSessionImpl}} constructor before starting sshd handshake

There's however more - how to propagate the exception from 
{{ClientSessionImpl}} constructor?

  was:
# {{org.apache.sshd.common.session.helpers.AbstractSession#sendKexInit()}} is 
called in {{ClientSessionImpl}} constructor
# {{org.apache.sshd.common.io.IoSession#write}} is called
# async write is done with handler created by 
{{org.apache.sshd.common.io.nio2.Nio2Session#createWriteCycleCompletionHandler()}}
# if e.g., {{sun.nio.ch.UnixAsynchronousSocketChannelImpl#implWrite()}} fails, 
it calls {{org.apache.sshd.common.io.nio2.Nio2CompletionHandler#onFailed()}}
# {{org.apache.sshd.common.io.nio2.Nio2Session#exceptionCaught()}} calls 
{{org.apache.sshd.common.io.IoHandler#exceptionCaught()}}
# 
{{org.apache.sshd.common.session.helpers.AbstractSessionIoHandler#exceptionCaught()}}
 can't find session in {{AbstractSession.getSession(ioSession, true)}}
# it throws {{throw new IllegalStateException("No session available", cause)}}


> When ClientSessionImpl construction fails, 
> AbstractSessionIoHandler#exceptionCaught may throw NPE
> -------------------------------------------------------------------------------------------------
>
>                 Key: SSHD-734
>                 URL: https://issues.apache.org/jira/browse/SSHD-734
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 1.4.0
>            Reporter: Grzegorz Grzybek
>
> # {{org.apache.sshd.common.session.helpers.AbstractSession#sendKexInit()}} is 
> called in {{ClientSessionImpl}} constructor
> # {{org.apache.sshd.common.io.IoSession#write}} is called
> # async write is done with handler created by 
> {{org.apache.sshd.common.io.nio2.Nio2Session#createWriteCycleCompletionHandler()}}
> # if e.g., {{sun.nio.ch.UnixAsynchronousSocketChannelImpl#implWrite()}} 
> fails, it calls 
> {{org.apache.sshd.common.io.nio2.Nio2CompletionHandler#onFailed()}}
> # {{org.apache.sshd.common.io.nio2.Nio2Session#exceptionCaught()}} calls 
> {{org.apache.sshd.common.io.IoHandler#exceptionCaught()}}
> # 
> {{org.apache.sshd.common.session.helpers.AbstractSessionIoHandler#exceptionCaught()}}
>  can't find session in {{AbstractSession.getSession(ioSession, true)}}
> # it throws {{throw new IllegalStateException("No session available", 
> cause)}} instead of something more related to actual problem
> The solution to "No session available" is simply to attach session in 
> {{ClientSessionImpl}} constructor before starting sshd handshake
> There's however more - how to propagate the exception from 
> {{ClientSessionImpl}} constructor?



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to