summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/TcpTransceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/TcpTransceiver.java')
-rw-r--r--java/src/IceInternal/TcpTransceiver.java163
1 files changed, 67 insertions, 96 deletions
diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java
index ebbdfdfd1de..4d1c5577900 100644
--- a/java/src/IceInternal/TcpTransceiver.java
+++ b/java/src/IceInternal/TcpTransceiver.java
@@ -21,103 +21,84 @@ final class TcpTransceiver implements Transceiver
@Override
public int initialize(Buffer readBuffer, Buffer writeBuffer, Ice.Holder<Boolean> moreData)
{
- try
+ if(_state == StateNeedConnect)
{
- if(_state == StateNeedConnect)
- {
- _state = StateConnectPending;
- return SocketOperation.Connect;
- }
- else if(_state <= StateConnectPending)
+ _state = StateConnectPending;
+ return SocketOperation.Connect;
+ }
+ else if(_state <= StateConnectPending)
+ {
+ Network.doFinishConnect(_fd);
+ _desc = Network.fdToString(_fd, _proxy, _addr);
+
+ if(_proxy != null)
{
- Network.doFinishConnect(_fd);
- _desc = Network.fdToString(_fd, _proxy, _addr);
+ //
+ // Prepare the read & write buffers in advance.
+ //
+ _proxy.beginWriteConnectRequest(_addr, writeBuffer);
+ _proxy.beginReadConnectRequestResponse(readBuffer);
- if(_proxy != null)
+ //
+ // Write the proxy connection message.
+ //
+ if(write(writeBuffer) == SocketOperation.None)
{
//
- // Prepare the read & write buffers in advance.
+ // Write completed without blocking.
//
- _proxy.beginWriteConnectRequest(_addr, writeBuffer);
- _proxy.beginReadConnectRequestResponse(readBuffer);
+ _proxy.endWriteConnectRequest(writeBuffer);
//
- // Write the proxy connection message.
+ // Try to read the response.
//
- if(write(writeBuffer) == SocketOperation.None)
+ if(read(readBuffer, moreData) == SocketOperation.None)
{
//
- // Write completed without blocking.
- //
- _proxy.endWriteConnectRequest(writeBuffer);
-
+ // Read completed without blocking - fall through.
//
- // Try to read the response.
- //
- if(read(readBuffer, moreData) == SocketOperation.None)
- {
- //
- // Read completed without blocking - fall through.
- //
- _proxy.endReadConnectRequestResponse(readBuffer);
- }
- else
- {
- //
- // Return SocketOperationRead to indicate we need to complete the read.
- //
- _state = StateProxyConnectRequestPending; // Wait for proxy response
- return SocketOperation.Read;
- }
+ _proxy.endReadConnectRequestResponse(readBuffer);
}
else
{
//
- // Return SocketOperationWrite to indicate we need to complete the write.
+ // Return SocketOperationRead to indicate we need to complete the read.
//
- _state = StateProxyConnectRequest; // Send proxy connect request
- return SocketOperation.Write;
+ _state = StateProxyConnectRequestPending; // Wait for proxy response
+ return SocketOperation.Read;
}
}
-
- _state = StateConnected;
- }
- else if(_state == StateProxyConnectRequest)
- {
- //
- // Write completed.
- //
- _proxy.endWriteConnectRequest(writeBuffer);
- _state = StateProxyConnectRequestPending; // Wait for proxy response
- return SocketOperation.Read;
- }
- else if(_state == StateProxyConnectRequestPending)
- {
- //
- // Read completed.
- //
- _proxy.endReadConnectRequestResponse(readBuffer);
- _state = StateConnected;
+ else
+ {
+ //
+ // Return SocketOperationWrite to indicate we need to complete the write.
+ //
+ _state = StateProxyConnectRequest; // Send proxy connect request
+ return SocketOperation.Write;
+ }
}
+
+ _state = StateConnected;
}
- catch(Ice.LocalException ex)
+ else if(_state == StateProxyConnectRequest)
{
- if(_instance.traceLevel() >= 2)
- {
- StringBuilder s = new StringBuilder(128);
- s.append("failed to establish " + _instance.protocol() + " connection\n");
- s.append(Network.fdToString(_fd, _proxy, _addr));
- _instance.logger().trace(_instance.traceCategory(), s.toString());
- }
- throw ex;
+ //
+ // Write completed.
+ //
+ _proxy.endWriteConnectRequest(writeBuffer);
+ _state = StateProxyConnectRequestPending; // Wait for proxy response
+ return SocketOperation.Read;
}
-
- assert(_state == StateConnected);
- if(_instance.traceLevel() >= 1)
+ else if(_state == StateProxyConnectRequestPending)
{
- String s = _instance.protocol() + " connection established\n" + _desc;
- _instance.logger().trace(_instance.traceCategory(), s);
+ //
+ // Read completed.
+ //
+ _proxy.endReadConnectRequestResponse(readBuffer);
+ _state = StateConnected;
}
+
+ assert(_state == StateConnected);
return SocketOperation.None;
}
@@ -132,12 +113,6 @@ final class TcpTransceiver implements Transceiver
@Override
public void close()
{
- if(_state == StateConnected && _instance.traceLevel() >= 1)
- {
- String s = "closing " + _instance.protocol() + " connection\n" + toString();
- _instance.logger().trace(_instance.traceCategory(), s);
- }
-
assert(_fd != null);
try
{
@@ -154,6 +129,13 @@ final class TcpTransceiver implements Transceiver
}
@Override
+ public EndpointI bind(EndpointI endp)
+ {
+ assert(false);
+ return null;
+ }
+
+ @Override
public int write(Buffer buf)
{
final int size = buf.b.limit();
@@ -207,13 +189,6 @@ final class TcpTransceiver implements Transceiver
return SocketOperation.Write;
}
- if(_instance.traceLevel() >= 3)
- {
- String s = "sent " + ret + " of " + packetSize + " bytes via " + _instance.protocol() + "\n" +
- toString();
- _instance.logger().trace(_instance.traceCategory(), s);
- }
-
if(packetSize == _maxSendPacketSize)
{
assert(buf.b.position() == buf.b.limit());
@@ -264,16 +239,6 @@ final class TcpTransceiver implements Transceiver
return SocketOperation.Read;
}
- if(ret > 0)
- {
- if(_instance.traceLevel() >= 3)
- {
- String s = "received " + ret + " of " + packetSize + " bytes via " + _instance.protocol() +
- "\n" + toString();
- _instance.logger().trace(_instance.traceCategory(), s);
- }
- }
-
packetSize = buf.b.remaining();
}
catch(java.io.InterruptedIOException ex)
@@ -302,6 +267,12 @@ final class TcpTransceiver implements Transceiver
}
@Override
+ public String toDetailedString()
+ {
+ return toString();
+ }
+
+ @Override
public Ice.ConnectionInfo getInfo()
{
Ice.TCPConnectionInfo info = new Ice.TCPConnectionInfo();
@@ -336,7 +307,7 @@ final class TcpTransceiver implements Transceiver
_proxy = proxy;
_addr = addr;
_state = StateNeedConnect;
- _desc = "";
+ _desc = Network.fdToString(_fd, _proxy, _addr);;
_maxSendPacketSize = 0;
if(System.getProperty("os.name").startsWith("Windows"))