Home » Modeling » EMF » [CDO] SSL Server [ERROR] BufferUnderflowException(BufferUnderflowException at server while connecting)
[CDO] SSL Server [ERROR] BufferUnderflowException [message #973581] |
Tue, 06 November 2012 13:00 |
Bernold Kraft Messages: 11 Registered: October 2012 |
Junior Member |
|
|
Hi there,
I am testing a CDO 4.1 server using a SSL connection. Everything went well with a simple TCP connection based on the example server. Currently the client connection test fails on server side due to an occuring java.nio.BufferUnderflowException.
Some details:
- CDO 4.1.1.v20120911-1146 (Juno SR1 release)
- Win x86_64 machine, Win7, Java7_09
To mention first, the NIO exception lets me think of an native problem within the 64bit enviroment, but I am not sure about that. I'm not very familiar with the Net4j interna. As far as I see, the SSL handshake works, but a read attempt fails afterwards.
What I've done so far:
- a CDO server based on the example master server (org.eclipse.emf.cdo.examples.installer.master) with a acceptor type "ssl"
<acceptor type="ssl" listenAddr="0.0.0.0" port="2036"/>
- created a keystore and truststore according to bug report https://bugs.eclipse.org/bugs/show_bug.cgi?id=333947 and modified the vmargs for launch
-Xms40m
-Xmx1024m
-Ddebug=true
-Dnet4j.config="${project_loc:/org.eclipse.emf.cdo.examples.installer.master}/config"
-Dorg.eclipse.emf.cdo.server.browser.port=7777
-Dosgi.console.enable.builtin=true
-Djavax.net.ssl.trustStore=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/truststore.jks
-Djavax.net.ssl.trustStorePassword=truststore
-Djavax.net.ssl.keyStore=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/keystore.test.jks
-Djavax.net.ssl.keyStorePassword=truststore
-Dorg.eclipse.net4j.tcp.ssl.passphrase=truststore
-Dorg.eclipse.net4j.tcp.ssl.trust=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/truststore.jks
-Dorg.eclipse.net4j.tcp.ssl.key=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/keystore.test.jks
-Dsun.security.ssl.allowUnsafeRenegotiation=true
-Dorg.eclipse.net4j.util.om.trace.disable=false
- enabled tracing
- created a test client connection with
// Enable logging and tracing
OMPlatform.INSTANCE.setDebugging(true);
OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
// Prepare container
IManagedContainer container = ContainerUtil.createContainer();
Net4jUtil.prepareContainer(container); // Register Net4j factories
SSLUtil.prepareContainer(container);
CDONet4jUtil.prepareContainer(container); // Register CDO factories
container.activate();
// Create connector
IConnector connector = SSLUtil.getConnector(container, CDOTests.URL);
// Create configuration
CDONet4jSessionConfiguration configuration = CDONet4jUtil.createNet4jSessionConfiguration();
configuration.setConnector(connector);
configuration.setRepositoryName(CDOTests.REPO);
// Open session
CDOSession session = configuration.openNet4jSession();
session.options().setGeneratedPackageEmulationEnabled(true);
CDOTransaction cdoTransaction = session.openTransaction();
assert null!=cdoTransaction.getResourceNode("testResource"); //$NON-NLS-1$
session.close();
connector.close();
A BufferUnderflowException occurs at:
TCPSelector [debug] Executing server operation REGISTER java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
TCPSelector [debug] Registering java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
TCPSelector [debug.connector] Setting state CONNECTED (was connecting) for SSLServerConnector[127.0.0.1:49.682]
TCPSelector [debug.acceptor] Added connector SSLServerConnector[127.0.0.1:49.682]
TCPSelector [debug] Reading java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
net4j-Thread-1 [debug] Scheduled task: sun.security.ssl.Handshaker$DelegatedTask@35725349
net4j-Thread-1 [debug] Scheduled task: sun.security.ssl.Handshaker$DelegatedTask@72f51247
TCPSelector [debug.lifecycle] Activating SignalProtocol[cdo]
TCPSelector [debug.lifecycle.dump] DUMP CDOServerProtocol@36
Protocol.type = cdo
Protocol.executorService = java.util.concurrent.ThreadPoolExecutor@2aa68b6a[Running, pool size = 2, active threads = 0, queued tasks = 0, completed tasks = 3]
Protocol.bufferProvider = Channel[-32.768, SERVER]
Protocol.infraStructure = null
Protocol.channel = Channel[-32.768, SERVER]
Protocol.userID = null
SignalProtocol.timeout = 10000
SignalProtocol.streamWrapper = null
SignalProtocol.signals =
SignalProtocol.nextCorrelationID = 1
SignalProtocol.failingOver = false
negotiationTimeout = 15000
repositoryProvider = org.eclipse.emf.cdo.spi.server.PluginRepositoryProvider@2b02a8fb
packageURICompressor = StringCompressor[client=false]
TCPSelector [debug.connector] Opening channel with protocol cdo
TCPSelector [debug.lifecycle] Activating Channel[1, SERVER, cdo]
TCPSelector [debug.lifecycle] Activating ReceiveSerializer@37
TCPSelector [debug.lifecycle.dump] DUMP ReceiveSerializer@37
Worker.daemon = false
Worker.activationTimeout = 10000
Worker.deactivationTimeout = 10000
QueueWorker.queue =
QueueWorker.pollMillis = 100
TCPSelector [debug.lifecycle.dump] DUMP Channel@38
userID = null
channelMultiplexer = SSLServerConnector[127.0.0.1:49.682]
id = 1
receiveExecutor = java.util.concurrent.ThreadPoolExecutor@2aa68b6a[Running, pool size = 2, active threads = 0, queued tasks = 0, completed tasks = 3]
receiveHandler = SignalProtocol[cdo]
receiveSerializer = ReceiveSerializer@37
sendQueue =
sentBuffers = 0
receivedBuffers = 0
TCPSelector [debug.channel] Handling buffer: Buffer@39[PUTTING] --> Channel[Control, SERVER]
TCPSelector [debug] Ordering server operation INTEREST READ java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
TCPSelector [debug] Ordering server operation INTEREST WRITE java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
TCPSelector [debug] Executing server operation INTEREST READ java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
TCPSelector [debug] Setting interest (was read)
TCPSelector [debug] Executing server operation INTEREST WRITE java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
TCPSelector [debug] Setting interest WRITE
TCPSelector [debug] Writing java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
TCPSelector [debug] Ordering server operation INTEREST WRITE java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
TCPSelector [debug] Ordering server operation INTEREST READ java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
TCPSelector [debug] Executing server operation INTEREST WRITE java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
TCPSelector [debug] Setting interest (was write)
TCPSelector [debug] Executing server operation INTEREST READ java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
TCPSelector [debug] Setting interest READ
TCPSelector [debug] Reading java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
[ERROR] BufferUnderflowException
net4j-Thread-1 [debug.lifecycle] Deactivating SSLServerConnector[127.0.0.1:49.682]
net4j-Thread-1 [debug.lifecycle] Deactivating Channel[Control, SERVER]
net4j-Thread-1 [debug.lifecycle] Deactivating ReceiveSerializer@33
net4j-Thread-1 [debug.connector] Setting state DISCONNECTED (was connected) for SSLServerConnector[null:0]
net4j-Thread-1 [debug.lifecycle] Deactivating Channel[1, SERVER, cdo]
net4j-Thread-1 [debug.lifecycle] Deactivating ReceiveSerializer@37
net4j-Thread-1 [debug.lifecycle] Deactivating SignalProtocol[cdo]
java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Buffer.java:498)
at java.nio.DirectByteBuffer.getShort(DirectByteBuffer.java:580)
at org.eclipse.net4j.internal.tcp.ssl.SSLBuffer.startGetting(SSLBuffer.java:84)
at org.eclipse.net4j.internal.tcp.TCPConnector.handleRead(TCPConnector.java:220)
at org.eclipse.net4j.internal.tcp.ssl.SSLConnector.handleRead(SSLConnector.java:70)
at org.eclipse.net4j.internal.tcp.TCPSelector.handleSelection(TCPSelector.java:255)
at org.eclipse.net4j.internal.tcp.TCPSelector.run(TCPSelector.java:170)
at java.lang.Thread.run(Thread.java:722)
[ERROR] BufferOverflowException
java.nio.BufferOverflowException
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
at org.eclipse.net4j.internal.tcp.ssl.SSLBuffer.startGetting(SSLBuffer.java:79)
at org.eclipse.net4j.internal.tcp.TCPConnector.handleRead(TCPConnector.java:220)
at org.eclipse.net4j.internal.tcp.ssl.SSLConnector.handleRead(SSLConnector.java:76)
at org.eclipse.net4j.internal.tcp.TCPSelector.handleSelection(TCPSelector.java:255)
at org.eclipse.net4j.internal.tcp.TCPSelector.run(TCPSelector.java:170)
at java.lang.Thread.run(Thread.java:722)
net4j-Thread-1 [debug.acceptor] Removed connector SSLServerConnector[null:0]
Any ideas anyone?
Regards,
Bernold
|
|
|
Re: [CDO] SSL Server [ERROR] BufferUnderflowException [message #973643 is a reply to message #973581] |
Tue, 06 November 2012 13:55 |
|
Hi Bernold,
The SSL connector has been developed by NoMagic and I'm not able to give advice for it. I've cc'ed Saulius from NoMagic
in the hope that he can provide more infos.
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
Am 06.11.2012 14:43, schrieb Bernold Kraft:
> Hi there,
>
> I am testing a CDO 4.1 server using a SSL connection. Everything went well with a simple TCP connection based on the
> example server. Currently the client connection test fails on server side due to an occuring
> java.nio.BufferUnderflowException.
>
> Some details:
> - CDO 4.1.1.v20120911-1146 (Juno SR1 release)
> - Win x86_64 machine, Win7, Java7_09
>
> To mention first, the NIO exception lets me think of an native problem within the 64bit enviroment, but I am not sure
> about that. I'm not very familiar with the Net4j interna. As far as I see, the SSL handshake works, but a read attempt
> fails afterwards.
>
> What I've done so far:
>
> - a CDO server based on the example master server (org.eclipse.emf.cdo.examples.installer.master) with a acceptor type
> "ssl"
> <acceptor type="ssl" listenAddr="0.0.0.0" port="2036"/>
>
> - created a keystore and truststore according to bug report https://bugs.eclipse.org/bugs/show_bug.cgi?id=333947 and
> modified the vmargs for launch
> -Xms40m
> -Xmx1024m
> -Ddebug=true
> -Dnet4j.config="${project_loc:/org.eclipse.emf.cdo.examples.installer.master}/config"
> -Dorg.eclipse.emf.cdo.server.browser.port=7777
> -Dosgi.console.enable.builtin=true
> -Djavax.net.ssl.trustStore=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/truststore.jks
> -Djavax.net.ssl.trustStorePassword=truststore
> -Djavax.net.ssl.keyStore=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/keystore.test.jks
> -Djavax.net.ssl.keyStorePassword=truststore
> -Dorg.eclipse.net4j.tcp.ssl.passphrase=truststore
> -Dorg.eclipse.net4j.tcp.ssl.trust=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/truststore.jks
> -Dorg.eclipse.net4j.tcp.ssl.key=file:///${resource_loc:org.eclipse.emf.cdo.examples.installer.master/ssl}/keystore.test.jks
>
> -Dsun.security.ssl.allowUnsafeRenegotiation=true -Dorg.eclipse.net4j.util.om.trace.disable=false
>
>
> - enabled tracing
>
> - created a test client connection with
>
>
> // Enable logging and tracing
> OMPlatform.INSTANCE.setDebugging(true);
> OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
> OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
>
> // Prepare container
> IManagedContainer container = ContainerUtil.createContainer();
> Net4jUtil.prepareContainer(container); // Register Net4j factories
> SSLUtil.prepareContainer(container);
> CDONet4jUtil.prepareContainer(container); // Register CDO factories
> container.activate();
>
> // Create connector
> IConnector connector = SSLUtil.getConnector(container, CDOTests.URL);
>
> // Create configuration
> CDONet4jSessionConfiguration configuration = CDONet4jUtil.createNet4jSessionConfiguration();
> configuration.setConnector(connector);
> configuration.setRepositoryName(CDOTests.REPO);
> // Open session
> CDOSession session = configuration.openNet4jSession();
> session.options().setGeneratedPackageEmulationEnabled(true);
> CDOTransaction cdoTransaction = session.openTransaction();
> assert null!=cdoTransaction.getResourceNode("testResource"); //$NON-NLS-1$
> session.close();
> connector.close();
>
>
> A BufferUnderflowException occurs at:
>
> TCPSelector [debug] Executing server operation REGISTER java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
> TCPSelector [debug] Registering java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
> TCPSelector [debug.connector] Setting state CONNECTED (was connecting) for SSLServerConnector[127.0.0.1:49.682]
> TCPSelector [debug.acceptor] Added connector SSLServerConnector[127.0.0.1:49.682]
> TCPSelector [debug] Reading java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
> net4j-Thread-1 [debug] Scheduled task: sun.security.ssl.Handshaker$DelegatedTask@35725349
> net4j-Thread-1 [debug] Scheduled task: sun.security.ssl.Handshaker$DelegatedTask@72f51247
> TCPSelector [debug.lifecycle] Activating SignalProtocol[cdo]
> TCPSelector [debug.lifecycle.dump] DUMP CDOServerProtocol@36
> Protocol.type = cdo
> Protocol.executorService = java.util.concurrent.ThreadPoolExecutor@2aa68b6a[Running, pool size = 2, active threads =
> 0, queued tasks = 0, completed tasks = 3]
> Protocol.bufferProvider = Channel[-32.768, SERVER]
> Protocol.infraStructure = null
> Protocol.channel = Channel[-32.768, SERVER]
> Protocol.userID = null
> SignalProtocol.timeout = 10000
> SignalProtocol.streamWrapper = null
> SignalProtocol.signals = SignalProtocol.nextCorrelationID = 1
> SignalProtocol.failingOver = false
> negotiationTimeout = 15000
> repositoryProvider = org.eclipse.emf.cdo.spi.server.PluginRepositoryProvider@2b02a8fb
> packageURICompressor = StringCompressor[client=false]
>
> TCPSelector [debug.connector] Opening channel with protocol cdo
> TCPSelector [debug.lifecycle] Activating Channel[1, SERVER, cdo]
> TCPSelector [debug.lifecycle] Activating ReceiveSerializer@37
> TCPSelector [debug.lifecycle.dump] DUMP ReceiveSerializer@37
> Worker.daemon = false
> Worker.activationTimeout = 10000
> Worker.deactivationTimeout = 10000
> QueueWorker.queue = QueueWorker.pollMillis = 100
>
> TCPSelector [debug.lifecycle.dump] DUMP Channel@38
> userID = null
> channelMultiplexer = SSLServerConnector[127.0.0.1:49.682]
> id = 1
> receiveExecutor = java.util.concurrent.ThreadPoolExecutor@2aa68b6a[Running, pool size = 2, active threads = 0, queued
> tasks = 0, completed tasks = 3]
> receiveHandler = SignalProtocol[cdo]
> receiveSerializer = ReceiveSerializer@37
> sendQueue = sentBuffers = 0
> receivedBuffers = 0
>
> TCPSelector [debug.channel] Handling buffer: Buffer@39[PUTTING] --> Channel[Control, SERVER]
> TCPSelector [debug] Ordering server operation INTEREST READ java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
> TCPSelector [debug] Ordering server operation INTEREST WRITE java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
> TCPSelector [debug] Executing server operation INTEREST READ java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
> TCPSelector [debug] Setting interest (was read)
> TCPSelector [debug] Executing server operation INTEREST WRITE java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
> TCPSelector [debug] Setting interest WRITE
> TCPSelector [debug] Writing java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
> TCPSelector [debug] Ordering server operation INTEREST WRITE java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
> TCPSelector [debug] Ordering server operation INTEREST READ java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
> TCPSelector [debug] Executing server operation INTEREST WRITE java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = false
> TCPSelector [debug] Setting interest (was write)
> TCPSelector [debug] Executing server operation INTEREST READ java.nio.channels.SocketChannel[connected
> local=/127.0.0.1:2036 remote=/127.0.0.1:49682] = true
> TCPSelector [debug] Setting interest READ
> TCPSelector [debug] Reading java.nio.channels.SocketChannel[connected local=/127.0.0.1:2036 remote=/127.0.0.1:49682]
> [ERROR] BufferUnderflowException
> net4j-Thread-1 [debug.lifecycle] Deactivating SSLServerConnector[127.0.0.1:49.682]
> net4j-Thread-1 [debug.lifecycle] Deactivating Channel[Control, SERVER]
> net4j-Thread-1 [debug.lifecycle] Deactivating ReceiveSerializer@33
> net4j-Thread-1 [debug.connector] Setting state DISCONNECTED (was connected) for SSLServerConnector[null:0]
> net4j-Thread-1 [debug.lifecycle] Deactivating Channel[1, SERVER, cdo]
> net4j-Thread-1 [debug.lifecycle] Deactivating ReceiveSerializer@37
> net4j-Thread-1 [debug.lifecycle] Deactivating SignalProtocol[cdo]
> java.nio.BufferUnderflowException
> at java.nio.Buffer.nextGetIndex(Buffer.java:498)
> at java.nio.DirectByteBuffer.getShort(DirectByteBuffer.java:580)
> at org.eclipse.net4j.internal.tcp.ssl.SSLBuffer.startGetting(SSLBuffer.java:84)
> at org.eclipse.net4j.internal.tcp.TCPConnector.handleRead(TCPConnector.java:220)
> at org.eclipse.net4j.internal.tcp.ssl.SSLConnector.handleRead(SSLConnector.java:70)
> at org.eclipse.net4j.internal.tcp.TCPSelector.handleSelection(TCPSelector.java:255)
> at org.eclipse.net4j.internal.tcp.TCPSelector.run(TCPSelector.java:170)
> at java.lang.Thread.run(Thread.java:722)
> [ERROR] BufferOverflowException
> java.nio.BufferOverflowException
> at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
> at org.eclipse.net4j.internal.tcp.ssl.SSLBuffer.startGetting(SSLBuffer.java:79)
> at org.eclipse.net4j.internal.tcp.TCPConnector.handleRead(TCPConnector.java:220)
> at org.eclipse.net4j.internal.tcp.ssl.SSLConnector.handleRead(SSLConnector.java:76)
> at org.eclipse.net4j.internal.tcp.TCPSelector.handleSelection(TCPSelector.java:255)
> at org.eclipse.net4j.internal.tcp.TCPSelector.run(TCPSelector.java:170)
> at java.lang.Thread.run(Thread.java:722)
> net4j-Thread-1 [debug.acceptor] Removed connector SSLServerConnector[null:0]
>
>
> Any ideas anyone?
>
> Regards,
> Bernold
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
| | | | |
Goto Forum:
Current Time: Thu Sep 26 10:25:42 GMT 2024
Powered by FUDForum. Page generated in 0.03889 seconds
|