diff options
author | Benoit Foucher <benoit@zeroc.com> | 2008-01-07 10:30:13 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2008-01-07 10:30:13 +0100 |
commit | d9ce265d9766f0d48c6a6c10491be1f782424a2c (patch) | |
tree | 62df7123b09ccbcc617c6024c4b30e1bec45f16b /java/src | |
parent | Fixed IceBox/configuration test failure when run with --protocol=ssl (diff) | |
download | ice-d9ce265d9766f0d48c6a6c10491be1f782424a2c.tar.bz2 ice-d9ce265d9766f0d48c6a6c10491be1f782424a2c.tar.xz ice-d9ce265d9766f0d48c6a6c10491be1f782424a2c.zip |
Fixed bug 2304
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/IceInternal/TcpConnector.java | 28 | ||||
-rw-r--r-- | java/src/IceInternal/TcpTransceiver.java | 19 | ||||
-rw-r--r-- | java/src/IceSSL/ConnectorI.java | 29 | ||||
-rw-r--r-- | java/src/IceSSL/TransceiverI.java | 56 |
4 files changed, 90 insertions, 42 deletions
diff --git a/java/src/IceInternal/TcpConnector.java b/java/src/IceInternal/TcpConnector.java index ab2a2a877e3..e42057940bb 100644 --- a/java/src/IceInternal/TcpConnector.java +++ b/java/src/IceInternal/TcpConnector.java @@ -20,19 +20,31 @@ final class TcpConnector implements Connector, java.lang.Comparable _logger.trace(_traceLevels.networkCat, s); } - java.nio.channels.SocketChannel fd = Network.createTcpSocket(); - Network.setBlock(fd, false); - Network.setTcpBufSize(fd, _instance.initializationData().properties, _logger); - boolean connected = Network.doConnect(fd, _addr, timeout); - if(connected) + try + { + java.nio.channels.SocketChannel fd = Network.createTcpSocket(); + Network.setBlock(fd, false); + Network.setTcpBufSize(fd, _instance.initializationData().properties, _logger); + boolean connected = Network.doConnect(fd, _addr, timeout); + if(connected) + { + if(_traceLevels.network >= 1) + { + String s = "tcp connection established\n" + Network.fdToString(fd); + _logger.trace(_traceLevels.networkCat, s); + } + } + return new TcpTransceiver(_instance, fd, connected); + } + catch(Ice.LocalException ex) { - if(_traceLevels.network >= 1) + if(_traceLevels.network >= 2) { - String s = "tcp connection established\n" + Network.fdToString(fd); + String s = "failed to establish tcp connection to " + toString() + "\n" + ex; _logger.trace(_traceLevels.networkCat, s); } + throw ex; } - return new TcpTransceiver(_instance, fd, connected); } public short diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java index bfa7c3ced27..82e46ec2552 100644 --- a/java/src/IceInternal/TcpTransceiver.java +++ b/java/src/IceInternal/TcpTransceiver.java @@ -28,9 +28,22 @@ final class TcpTransceiver implements Transceiver } else if(_state <= StateConnectPending) { - Network.doFinishConnect(_fd, timeout); - _state = StateConnected; - _desc = Network.fdToString(_fd); + try + { + Network.doFinishConnect(_fd, timeout); + _state = StateConnected; + _desc = Network.fdToString(_fd); + } + catch(Ice.LocalException ex) + { + if(_traceLevels.network >= 2) + { + String s = "failed to establish tcp connection\n" + _desc + "\n" + ex; + _logger.trace(_traceLevels.networkCat, s); + } + throw ex; + } + if(_traceLevels.network >= 1) { String s = "tcp connection established\n" + _desc; diff --git a/java/src/IceSSL/ConnectorI.java b/java/src/IceSSL/ConnectorI.java index e2d25283302..97ed91e9939 100644 --- a/java/src/IceSSL/ConnectorI.java +++ b/java/src/IceSSL/ConnectorI.java @@ -30,19 +30,30 @@ final class ConnectorI implements IceInternal.Connector, java.lang.Comparable _logger.trace(_instance.networkTraceCategory(), s); } - java.nio.channels.SocketChannel fd = IceInternal.Network.createTcpSocket(); - IceInternal.Network.setBlock(fd, false); - IceInternal.Network.setTcpBufSize(fd, _instance.communicator().getProperties(), _logger); - boolean connected = IceInternal.Network.doConnect(fd, _addr, timeout); - try { - javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false); - return new TransceiverI(_instance, engine, fd, _host, connected, false, ""); + java.nio.channels.SocketChannel fd = IceInternal.Network.createTcpSocket(); + IceInternal.Network.setBlock(fd, false); + IceInternal.Network.setTcpBufSize(fd, _instance.communicator().getProperties(), _logger); + boolean connected = IceInternal.Network.doConnect(fd, _addr, timeout); + try + { + javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false); + return new TransceiverI(_instance, engine, fd, _host, connected, false, ""); + } + catch(RuntimeException ex) + { + IceInternal.Network.closeSocketNoThrow(fd); + throw ex; + } } - catch(RuntimeException ex) + catch(Ice.LocalException ex) { - IceInternal.Network.closeSocketNoThrow(fd); + if(_instance.networkTraceLevel() >= 2) + { + String s = "failed to establish ssl connection to " + toString() + "\n" + ex; + _logger.trace(_instance.networkTraceCategory(), s); + } throw ex; } } diff --git a/java/src/IceSSL/TransceiverI.java b/java/src/IceSSL/TransceiverI.java index 97ce62c558c..0d56e6f5a83 100644 --- a/java/src/IceSSL/TransceiverI.java +++ b/java/src/IceSSL/TransceiverI.java @@ -28,36 +28,48 @@ final class TransceiverI implements IceInternal.Transceiver public synchronized IceInternal.SocketStatus initialize(int timeout) { - if(_state == StateNeedConnect && timeout == 0) - { - _state = StateConnectPending; - return IceInternal.SocketStatus.NeedConnect; - } - else if(_state <= StateConnectPending) - { - IceInternal.Network.doFinishConnect(_fd, timeout); - _state = StateConnected; - _desc = IceInternal.Network.fdToString(_fd); - } - assert(_state == StateConnected); - - IceInternal.SocketStatus status; - do + try { - status = handshakeNonBlocking(); - if(timeout == 0) + if(_state == StateNeedConnect && timeout == 0) + { + _state = StateConnectPending; + return IceInternal.SocketStatus.NeedConnect; + } + else if(_state <= StateConnectPending) { - return status; + IceInternal.Network.doFinishConnect(_fd, timeout); + _state = StateConnected; + _desc = IceInternal.Network.fdToString(_fd); } + assert(_state == StateConnected); - if(status != IceInternal.SocketStatus.Finished) + IceInternal.SocketStatus status; + do { - handleSocketStatus(status, timeout); + status = handshakeNonBlocking(); + if(timeout == 0) + { + return status; + } + + if(status != IceInternal.SocketStatus.Finished) + { + handleSocketStatus(status, timeout); + } } + while(status != IceInternal.SocketStatus.Finished); + } + catch(Ice.LocalException ex) + { + if(_instance.networkTraceLevel() >= 2) + { + String s = "failed to establish ssl connection\n" + _desc + "\n" + ex; + _logger.trace(_instance.networkTraceCategory(), s); + } + throw ex; } - while(status != IceInternal.SocketStatus.Finished); - return status; + return IceInternal.SocketStatus.Finished; } // |