Hello class acts,

On 6/23/06, class acts <[EMAIL PROTECTED]> wrote:

Well, I've spent countless hours trying to get this to work.  I've
managed to connect a client application with my server using
SSLFilter, there doesn't seem to be any errors with connecting or
sending data from the client to the server.  However, I ran into a
strange problem that I think may have to do with filters.  It seems
that my client application can send messages to the server without any
problem, but as soon as the server sends messages back to the client,
the server locks up (usually on the second message sent). Here is the
stack trace:

Thread [AnonymousIoService-6-4] (Suspended)

        
ProtocolCodecFilter$ProtocolEncoderOutputImpl(SimpleProtocolEncoderOutput).write(ByteBuffer)
line: 32
        MyPacketEncoder.encode(IoSession, Object, ProtocolEncoderOutput)
line: 104
        ProtocolCodecFilter.filterWrite(IoFilter$NextFilter, IoSession,
IoFilter$WriteRequest) line: 226

        
SocketFilterChain(AbstractIoFilterChain).callPreviousFilterWrite(IoFilterChain$Entry,
IoSession, IoFilter$WriteRequest) line: 583
        AbstractIoFilterChain.access$7(AbstractIoFilterChain,
IoFilterChain$Entry, IoSession, IoFilter$WriteRequest) line: 577
        AbstractIoFilterChain$1.filterWrite(IoSession,
IoFilter$WriteRequest) line: 799
        AbstractIoFilterChain$3.filterWrite(IoFilter$NextFilter,
IoSession,
IoFilter$WriteRequest) line: 212

        
SocketFilterChain(AbstractIoFilterChain).callPreviousFilterWrite(IoFilterChain$Entry,
IoSession, IoFilter$WriteRequest) line: 583
        SocketFilterChain(AbstractIoFilterChain).filterWrite(IoSession,
IoFilter$WriteRequest) line: 574
        SocketSessionImpl.write0(IoFilter$WriteRequest) line: 176
        SocketSessionImpl(BaseIoSession).write(Object) line: 136
        MyClient.write(String) line: 68
        MyPacketHandler.sendAccountInfo(MyClient) line: 1081
        MyPacketHandler.processPacket(MyClient, GenuFXPacket) line: 153
        MyIoHandler.messageReceived(IoSession, Object) line: 79
        AbstractIoFilterChain$3.messageReceived(IoFilter$NextFilter,
IoSession, Object) line: 188

        
SocketFilterChain(AbstractIoFilterChain).callNextMessageReceived(IoFilterChain$Entry,
IoSession, Object) line: 501
        AbstractIoFilterChain.access$5(AbstractIoFilterChain,
IoFilterChain$Entry, IoSession, Object) line: 495
        AbstractIoFilterChain$1.messageReceived(IoSession, Object) line:
787
        ProtocolCodecFilter.messageReceived(IoFilter$NextFilter,
IoSession,
Object) line: 187

        
SocketFilterChain(AbstractIoFilterChain).callNextMessageReceived(IoFilterChain$Entry,
IoSession, Object) line: 501
        AbstractIoFilterChain.access$5(AbstractIoFilterChain,
IoFilterChain$Entry, IoSession, Object) line: 495
        AbstractIoFilterChain$1.messageReceived(IoSession, Object) line:
787
        SSLFilter.handleAppDataRead(IoFilter$NextFilter, SSLHandler) line:
623
        SSLFilter.handleSSLData(IoFilter$NextFilter, SSLHandler) line: 601
        SSLFilter.messageReceived(IoFilter$NextFilter, IoSession, Object)
line: 392

        
SocketFilterChain(AbstractIoFilterChain).callNextMessageReceived(IoFilterChain$Entry,
IoSession, Object) line: 501
        AbstractIoFilterChain.access$5(AbstractIoFilterChain,
IoFilterChain$Entry, IoSession, Object) line: 495
        AbstractIoFilterChain$1.messageReceived(IoSession, Object) line:
787
        ThreadPoolFilter.processEvent(IoFilter$NextFilter, IoSession,
ThreadPoolFilter$EventType, Object) line: 718
        ThreadPoolFilter$Worker.processEvents(ThreadPoolFilter$SessionBuffer)
line: 475
        ThreadPoolFilter$Worker.run() line: 429


So it seems that it's getting stuck on the Queue.push(Object) call.
Afaik, there is no thread dead-locking, it's just sitting there.  The
first message always goes out without any problem, but the second call
to IoSession.write() fails.  The exact same code without the SSLFilter
added, works 100% of the time without any problem.


I'm sorry to hear that you've spent a lot of time.  Can I know which version
of MINA you're using exactly first?

Also, to see if the same thing occurs in the example program
EchoServer, I tried to write an EchoClient program that can connect to
it.  I created the bogus.cert just like in the comments in the
BogusSSLContextFactory class, I run the EchoServer but I get this
stack trace in the server when the client connects:

javax.net.ssl.SSLHandshakeException: Initial SSL handshake failed.
        at org.apache.mina.filter.SSLFilter.messageReceived(SSLFilter.java
:421)
        at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived
(AbstractIoFilterChain.java:501)
        at org.apache.mina.common.support.AbstractIoFilterChain.access$5(
AbstractIoFilterChain.java:495)
        at
org.apache.mina.common.support.AbstractIoFilterChain$1.messageReceived(
AbstractIoFilterChain.java:787)
        at org.apache.mina.filter.ThreadPoolFilter.processEvent(
ThreadPoolFilter.java:718)
        at org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents(
ThreadPoolFilter.java:475)
        at org.apache.mina.filter.ThreadPoolFilter$Worker.run(
ThreadPoolFilter.java:429)
Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in common
        at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.SSLEngineImpl.checkTaskThrown(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Unknown Source)
        at javax.net.ssl.SSLEngine.wrap(Unknown Source)
        at org.apache.mina.filter.support.SSLHandler.handshake(
SSLHandler.java:518)
        at org.apache.mina.filter.support.SSLHandler.messageReceived(
SSLHandler.java:291)
        at org.apache.mina.filter.SSLFilter.messageReceived(SSLFilter.java
:389)
        ... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in common
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
        at com.sun.net.ssl.internal.ssl.ServerHandshaker.chooseCipherSuite
(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.ServerHandshaker.clientHello(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.ServerHandshaker.processMessage(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown
Source)
        at com.sun.net.ssl.internal.ssl.Handshaker$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.net.ssl.internal.ssl.Handshaker$DelegatedTask.run(Unknown
Source)
        at org.apache.mina.filter.support.SSLHandler.doTasks(
SSLHandler.java:745)
        at org.apache.mina.filter.support.SSLHandler.handshake(
SSLHandler.java:483)
        ... 8 more


I've attached the client code:

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;

import ssl.BogusSSLContextFactory;

import java.io.*;

public class MinaEchoClient {

        public static void main(String[] arstring) {
                try {
                        SSLContext sc = BogusSSLContextFactory.getInstance(
false );

                        SSLSocket sslsocket = (SSLSocket)
sc.getSocketFactory()
                                        .createSocket("127.0.0.1", 8080);

                        InputStream inputstream = System.in;
                        InputStreamReader inputstreamreader = new
InputStreamReader(
                                        inputstream);
                        BufferedReader bufferedreader = new
BufferedReader(
                                        inputstreamreader);

                        OutputStream outputstream =
sslsocket.getOutputStream();
                        OutputStreamWriter outputstreamwriter = new
OutputStreamWriter(
                                        outputstream);
                        BufferedWriter bufferedwriter = new
BufferedWriter(
                                        outputstreamwriter);

                        String string = null;
                        while ((string = bufferedreader.readLine()) !=
null) {
                                bufferedwriter.write(string + '\n');
                                bufferedwriter.flush();
                        }
                } catch (Exception exception) {
                        exception.printStackTrace();
                }
        }
}


I don't know why, but please take a look at our ConnectorTest.java test case
which is included in examples package.  Is is working fine.

Trustin
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP key fingerprints:
* E167 E6AF E73A CBCE EE41  4A29 544D DE48 FE95 4E7E
* B693 628E 6047 4F8F CFA4  455E 1C62 A7DC 0255 ECA6

Reply via email to