diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2014-08-07 12:18:42 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2014-08-07 12:18:42 -0230 |
commit | 232fa424a7339659b6ad2cd02fbfe89420457601 (patch) | |
tree | 978d9e9286c2915b771f8bea019276ab216eecc4 /java/src/IceSSL/ConnectorI.java | |
parent | Windows SSL SChannel implementation & OS X Secure Transport fixes. (diff) | |
download | ice-232fa424a7339659b6ad2cd02fbfe89420457601.tar.bz2 ice-232fa424a7339659b6ad2cd02fbfe89420457601.tar.xz ice-232fa424a7339659b6ad2cd02fbfe89420457601.zip |
ICE-5457 added ability to set source address for connections
Diffstat (limited to 'java/src/IceSSL/ConnectorI.java')
-rw-r--r-- | java/src/IceSSL/ConnectorI.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/java/src/IceSSL/ConnectorI.java b/java/src/IceSSL/ConnectorI.java index a373c8e5084..8dc715bcbd9 100644 --- a/java/src/IceSSL/ConnectorI.java +++ b/java/src/IceSSL/ConnectorI.java @@ -35,7 +35,7 @@ final class ConnectorI implements IceInternal.Connector IceInternal.Network.setBlock(fd, false); IceInternal.Network.setTcpBufSize(fd, _instance.properties(), _instance.logger()); final java.net.InetSocketAddress addr = _proxy != null ? _proxy.getAddress() : _addr; - IceInternal.Network.doConnect(fd, addr); + IceInternal.Network.doConnect(fd, addr, _sourceAddr); try { javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false, _addr); @@ -77,11 +77,12 @@ final class ConnectorI implements IceInternal.Connector // Only for use by EndpointI. // ConnectorI(Instance instance, String host, java.net.InetSocketAddress addr, IceInternal.NetworkProxy proxy, - int timeout, String connectionId) + java.net.InetSocketAddress sourceAddr, int timeout, String connectionId) { _instance = instance; _host = host; _addr = addr; + _sourceAddr = sourceAddr; _proxy = proxy; _timeout = timeout; _connectionId = connectionId; @@ -89,6 +90,10 @@ final class ConnectorI implements IceInternal.Connector _hashCode = 5381; _hashCode = IceInternal.HashUtil.hashAdd(_hashCode , _addr.getAddress().getHostAddress()); _hashCode = IceInternal.HashUtil.hashAdd(_hashCode , _addr.getPort()); + if(_sourceAddr != null) + { + _hashCode = IceInternal.HashUtil.hashAdd(_hashCode , _sourceAddr.getAddress().getHostAddress()); + } _hashCode = IceInternal.HashUtil.hashAdd(_hashCode , _timeout); _hashCode = IceInternal.HashUtil.hashAdd(_hashCode , _connectionId); } @@ -116,6 +121,11 @@ final class ConnectorI implements IceInternal.Connector return false; } + if(IceInternal.Network.compareAddress(_sourceAddr, p._sourceAddr) != 0) + { + return false; + } + return IceInternal.Network.compareAddress(_addr, p._addr) == 0; } @@ -123,6 +133,7 @@ final class ConnectorI implements IceInternal.Connector private String _host; private java.net.InetSocketAddress _addr; private IceInternal.NetworkProxy _proxy; + private java.net.InetSocketAddress _sourceAddr; private int _timeout; private String _connectionId; private int _hashCode; |