summaryrefslogtreecommitdiff
path: root/java/src/IceSSL/TransceiverI.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceSSL/TransceiverI.java')
-rw-r--r--java/src/IceSSL/TransceiverI.java56
1 files changed, 34 insertions, 22 deletions
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;
}
//