diff options
author | Jose <jose@zeroc.com> | 2011-05-17 20:34:28 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2011-05-17 20:34:28 +0200 |
commit | 25a954efbc8205cf0465df8c43e50ff32fa535a0 (patch) | |
tree | 9a1819a226076724099392e7a6cba06538a7760f | |
parent | SLES x86 Java fix (diff) | |
download | ice-25a954efbc8205cf0465df8c43e50ff32fa535a0.tar.bz2 ice-25a954efbc8205cf0465df8c43e50ff32fa535a0.tar.xz ice-25a954efbc8205cf0465df8c43e50ff32fa535a0.zip |
5082 - Network tracing shows remote address = <not connected>
-rw-r--r-- | cpp/src/Ice/TcpTransceiver.cpp | 11 | ||||
-rw-r--r-- | cpp/src/Ice/TcpTransceiver.h | 2 | ||||
-rw-r--r-- | cpp/src/IceSSL/TransceiverI.cpp | 12 | ||||
-rw-r--r-- | cpp/src/IceSSL/TransceiverI.h | 2 | ||||
-rw-r--r-- | cs/src/Ice/Network.cs | 21 | ||||
-rw-r--r-- | cs/src/Ice/TcpTransceiver.cs | 9 | ||||
-rw-r--r-- | cs/src/IceSSL/TransceiverI.cs | 9 | ||||
-rw-r--r-- | java/src/IceInternal/Network.java | 2 | ||||
-rw-r--r-- | java/src/IceInternal/TcpAcceptor.java | 2 | ||||
-rw-r--r-- | java/src/IceInternal/TcpConnector.java | 2 | ||||
-rw-r--r-- | java/src/IceInternal/TcpTransceiver.java | 16 | ||||
-rw-r--r-- | java/src/IceSSL/AcceptorI.java | 2 | ||||
-rw-r--r-- | java/src/IceSSL/ConnectorI.java | 2 | ||||
-rw-r--r-- | java/src/IceSSL/TransceiverI.java | 16 |
14 files changed, 83 insertions, 25 deletions
diff --git a/cpp/src/Ice/TcpTransceiver.cpp b/cpp/src/Ice/TcpTransceiver.cpp index cf4055369a5..bbaba2b4df8 100644 --- a/cpp/src/Ice/TcpTransceiver.cpp +++ b/cpp/src/Ice/TcpTransceiver.cpp @@ -68,8 +68,14 @@ IceInternal::TcpTransceiver::initialize() { if(_traceLevels->network >= 2) { + struct sockaddr_storage localAddr; + fdToLocalAddress(_fd, localAddr); + Trace out(_logger, _traceLevels->networkCat); - out << "failed to establish tcp connection\n" << _desc << "\n" << ex; + out << "failed to establish tcp connection\n" + << "local address: " << addrToString(localAddr) << "\n" + << "remote address: " << addrToString(_connectAddr) << "\n" + << ex; } throw; } @@ -539,7 +545,6 @@ IceInternal::TcpTransceiver::connect(const struct sockaddr_storage& addr) _fd = INVALID_SOCKET; throw; } -#else - _connectAddr = addr; #endif + _connectAddr = addr; } diff --git a/cpp/src/Ice/TcpTransceiver.h b/cpp/src/Ice/TcpTransceiver.h index fd10dbdb851..0dafdd333ae 100644 --- a/cpp/src/Ice/TcpTransceiver.h +++ b/cpp/src/Ice/TcpTransceiver.h @@ -69,8 +69,8 @@ private: State _state; std::string _desc; -#ifdef ICE_USE_IOCP struct sockaddr_storage _connectAddr; +#ifdef ICE_USE_IOCP AsyncInfo _read; AsyncInfo _write; int _maxSendPacketSize; diff --git a/cpp/src/IceSSL/TransceiverI.cpp b/cpp/src/IceSSL/TransceiverI.cpp index 79341d3afdd..7265708a17c 100644 --- a/cpp/src/IceSSL/TransceiverI.cpp +++ b/cpp/src/IceSSL/TransceiverI.cpp @@ -242,7 +242,14 @@ IceSSL::TransceiverI::initialize() if(_instance->networkTraceLevel() >= 2) { Trace out(_logger, _instance->networkTraceCategory()); - out << "failed to establish ssl connection\n" << _desc << "\n" << ex; + + struct sockaddr_storage localAddr; + IceInternal::fdToLocalAddress(_fd, localAddr); + + out << "failed to establish ssl connection\n" + << "local address: " << IceInternal::addrToString(localAddr) << "\n" + << "remote address: " << IceInternal::addrToString(_connectAddr) << "\n" + << ex; } throw; } @@ -827,9 +834,8 @@ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const { _desc = IceInternal::fdToString(_fd); } -#else - _connectAddr = addr; #endif + _connectAddr = addr; } IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, SOCKET fd, const string& adapterName) : diff --git a/cpp/src/IceSSL/TransceiverI.h b/cpp/src/IceSSL/TransceiverI.h index d3b96b8062d..f5f30b4a90d 100644 --- a/cpp/src/IceSSL/TransceiverI.h +++ b/cpp/src/IceSSL/TransceiverI.h @@ -87,11 +87,11 @@ private: State _state; std::string _desc; + struct sockaddr_storage _connectAddr; #ifdef ICE_USE_IOCP int _maxSendPacketSize; int _maxReceivePacketSize; BIO* _iocpBio; - struct sockaddr_storage _connectAddr; IceInternal::AsyncInfo _read; IceInternal::AsyncInfo _write; std::vector<char> _writeBuffer; diff --git a/cs/src/Ice/Network.cs b/cs/src/Ice/Network.cs index 0399c38f025..828a49d9a7d 100644 --- a/cs/src/Ice/Network.cs +++ b/cs/src/Ice/Network.cs @@ -493,10 +493,10 @@ namespace IceInternal IPAddress ifaceAddr = IPAddress.Any; if(iface.Length != 0) { - ifaceAddr = Network.getInterfaceAddress(iface); + ifaceAddr = getInterfaceAddress(iface); if(ifaceAddr == IPAddress.Any) { - ifaceAddr = Network.getAddress(iface, 0, Network.EnableIPv4).Address; + ifaceAddr = getAddress(iface, 0, EnableIPv4).Address; } } socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, @@ -1050,6 +1050,23 @@ namespace IceInternal } } + public static string fdLocalAddressToString(Socket socket) + { + System.Text.StringBuilder s = new System.Text.StringBuilder(); + IPEndPoint localEndpoint = getLocalAddress(socket); + if(localEndpoint == null) + { + // This might occur if connect was not called yet, see also comments in doBeginConnectAsync + s.Append("local address = <not bound>"); + } + else + { + s.Append("local address = " + localEndpoint.Address); + s.Append(":" + localEndpoint.Port); + } + return s.ToString(); + } + public static string addressesToString(IPEndPoint localEndpoint, IPEndPoint remoteEndpoint) { diff --git a/cs/src/Ice/TcpTransceiver.cs b/cs/src/Ice/TcpTransceiver.cs index 769c35fa96a..ba2163a3c54 100644 --- a/cs/src/Ice/TcpTransceiver.cs +++ b/cs/src/Ice/TcpTransceiver.cs @@ -38,8 +38,13 @@ namespace IceInternal { if(_traceLevels.network >= 2) { - string s = "failed to establish tcp connection\n" + _desc + "\n" + ex; - _logger.trace(_traceLevels.networkCat, s); + System.Text.StringBuilder s = new System.Text.StringBuilder(); + s.Append("failed to establish tcp connection\n"); + s.Append(Network.fdLocalAddressToString(_fd)); + Debug.Assert(_addr != null); + s.Append("\nremote address = " + _addr.ToString() + "\n"); + s.Append(ex.ToString()); + _logger.trace(_traceLevels.networkCat, s.ToString()); } throw; } diff --git a/cs/src/IceSSL/TransceiverI.cs b/cs/src/IceSSL/TransceiverI.cs index 188e99440e5..ca5fc1e0644 100644 --- a/cs/src/IceSSL/TransceiverI.cs +++ b/cs/src/IceSSL/TransceiverI.cs @@ -59,8 +59,13 @@ namespace IceSSL { if(_instance.networkTraceLevel() >= 2) { - string s = "failed to establish ssl connection\n" + IceInternal.Network.fdToString(_fd) + "\n" + e; - _logger.trace(_instance.networkTraceCategory(), s); + System.Text.StringBuilder s = new System.Text.StringBuilder(); + s.Append("failed to establish ssl connection\n"); + s.Append(IceInternal.Network.fdLocalAddressToString(_fd)); + Debug.Assert(_addr != null); + s.Append("\nremote address = " + _addr.ToString() + "\n"); + s.Append(e.ToString()); + _logger.trace(_instance.networkTraceCategory(), s.ToString()); } throw; } diff --git a/java/src/IceInternal/Network.java b/java/src/IceInternal/Network.java index 2e12900545f..1d5d1c65491 100644 --- a/java/src/IceInternal/Network.java +++ b/java/src/IceInternal/Network.java @@ -1066,7 +1066,7 @@ public final class Network (bytes.length == 4 && protocol == EnableIPv4)); } - private static String + public static String addrToString(java.net.InetAddress addr, int port) { StringBuffer s = new StringBuffer(); diff --git a/java/src/IceInternal/TcpAcceptor.java b/java/src/IceInternal/TcpAcceptor.java index 9c972306982..1833b4c10df 100644 --- a/java/src/IceInternal/TcpAcceptor.java +++ b/java/src/IceInternal/TcpAcceptor.java @@ -66,7 +66,7 @@ class TcpAcceptor implements Acceptor _logger.trace(_traceLevels.networkCat, s); } - return new TcpTransceiver(_instance, fd, true); + return new TcpTransceiver(_instance, fd, true, null); } public String diff --git a/java/src/IceInternal/TcpConnector.java b/java/src/IceInternal/TcpConnector.java index 7d0cccc149f..e0c4139215b 100644 --- a/java/src/IceInternal/TcpConnector.java +++ b/java/src/IceInternal/TcpConnector.java @@ -34,7 +34,7 @@ final class TcpConnector implements Connector _logger.trace(_traceLevels.networkCat, s); } } - return new TcpTransceiver(_instance, fd, connected); + return new TcpTransceiver(_instance, fd, connected, _addr); } catch(Ice.LocalException ex) { diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java index 8c10fea5ea8..3a5e9c7f676 100644 --- a/java/src/IceInternal/TcpTransceiver.java +++ b/java/src/IceInternal/TcpTransceiver.java @@ -38,8 +38,15 @@ final class TcpTransceiver implements Transceiver { if(_traceLevels.network >= 2) { - String s = "failed to establish tcp connection\n" + _desc + "\n" + ex; - _logger.trace(_traceLevels.networkCat, s); + java.net.Socket fd = (java.net.Socket)_fd.socket(); + StringBuilder s = new StringBuilder(128); + s.append("failed to establish tcp connection\n"); + s.append("local address = "); + s.append(Network.addrToString(fd.getLocalAddress(), fd.getLocalPort())); + s.append("\nremote address = "); + assert(_connectAddr != null); + s.append(Network.addrToString(_connectAddr)); + _logger.trace(_traceLevels.networkCat, s.toString()); } throw ex; } @@ -248,9 +255,11 @@ final class TcpTransceiver implements Transceiver // // Only for use by TcpConnector, TcpAcceptor // - TcpTransceiver(Instance instance, java.nio.channels.SocketChannel fd, boolean connected) + TcpTransceiver(Instance instance, java.nio.channels.SocketChannel fd, boolean connected, + java.net.InetSocketAddress connectAddr) { _fd = fd; + _connectAddr = connectAddr; _traceLevels = instance.traceLevels(); _logger = instance.initializationData().logger; _stats = instance.initializationData().stats; @@ -283,6 +292,7 @@ final class TcpTransceiver implements Transceiver } private java.nio.channels.SocketChannel _fd; + private java.net.InetSocketAddress _connectAddr; private TraceLevels _traceLevels; private Ice.Logger _logger; private Ice.Stats _stats; diff --git a/java/src/IceSSL/AcceptorI.java b/java/src/IceSSL/AcceptorI.java index db6cf781002..d2bd3ed4792 100644 --- a/java/src/IceSSL/AcceptorI.java +++ b/java/src/IceSSL/AcceptorI.java @@ -89,7 +89,7 @@ final class AcceptorI implements IceInternal.Acceptor IceInternal.Network.fdToString(fd)); } - return new TransceiverI(_instance, engine, fd, "", true, true, _adapterName); + return new TransceiverI(_instance, engine, fd, "", true, true, _adapterName, null); } public String diff --git a/java/src/IceSSL/ConnectorI.java b/java/src/IceSSL/ConnectorI.java index fe85a2c4e0a..5b50a79e1db 100644 --- a/java/src/IceSSL/ConnectorI.java +++ b/java/src/IceSSL/ConnectorI.java @@ -39,7 +39,7 @@ final class ConnectorI implements IceInternal.Connector try { javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false, _addr); - return new TransceiverI(_instance, engine, fd, _host, connected, false, ""); + return new TransceiverI(_instance, engine, fd, _host, connected, false, "", _addr); } catch(RuntimeException ex) { diff --git a/java/src/IceSSL/TransceiverI.java b/java/src/IceSSL/TransceiverI.java index eec1f3c7d00..f94c90e4876 100644 --- a/java/src/IceSSL/TransceiverI.java +++ b/java/src/IceSSL/TransceiverI.java @@ -50,8 +50,15 @@ final class TransceiverI implements IceInternal.Transceiver { if(_instance.networkTraceLevel() >= 2) { - String s = "failed to establish ssl connection\n" + _desc + "\n" + ex; - _logger.trace(_instance.networkTraceCategory(), s); + java.net.Socket fd = (java.net.Socket)_fd.socket(); + StringBuilder s = new StringBuilder(128); + s.append("failed to establish ssl connection\n"); + s.append("local address = "); + s.append(IceInternal.Network.addrToString(fd.getLocalAddress(), fd.getLocalPort())); + s.append("\nremote address = "); + assert(_connectAddr != null); + s.append(IceInternal.Network.addrToString(_connectAddr)); + _logger.trace(_instance.networkTraceCategory(), s.toString()); } throw ex; } @@ -289,7 +296,8 @@ final class TransceiverI implements IceInternal.Transceiver // Only for use by ConnectorI, AcceptorI. // TransceiverI(Instance instance, javax.net.ssl.SSLEngine engine, java.nio.channels.SocketChannel fd, - String host, boolean connected, boolean incoming, String adapterName) + String host, boolean connected, boolean incoming, String adapterName, + java.net.InetSocketAddress connectAddr) { _instance = instance; _engine = engine; @@ -297,6 +305,7 @@ final class TransceiverI implements IceInternal.Transceiver _host = host; _incoming = incoming; _adapterName = adapterName; + _connectAddr = connectAddr; _state = connected ? StateConnected : StateNeedConnect; _logger = instance.communicator().getLogger(); try @@ -791,6 +800,7 @@ final class TransceiverI implements IceInternal.Transceiver private String _host; private boolean _incoming; private String _adapterName; + private java.net.InetSocketAddress _connectAddr; private int _state; private Ice.Logger _logger; private Ice.Stats _stats; |