diff options
10 files changed, 78 insertions, 12 deletions
diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerManager.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerManager.java index 729193a..590ee60 100644 --- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerManager.java +++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerManager.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2012-2015 Isode Limited. + * Copyright (c) 2012-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. @@ -173,13 +173,13 @@ public class SOCKS5BytestreamServerManager { // Find a port to listen on assert(connectionServer == null); int port; for (port = LISTEN_PORTS_BEGIN; port < LISTEN_PORTS_END; ++port) { logger_.fine("Trying to start server on port " + port + "\n"); - connectionServer = connectionServerFactory.createConnectionServer(new HostAddress("0.0.0.0"), port); + connectionServer = connectionServerFactory.createConnectionServer(new HostAddress("::"), port); ConnectionServer.Error error = connectionServer.tryStart(); if (error == null) { break; } else if (!ConnectionServer.Error.Conflict.equals(error)) { logger_.fine("Error starting server\n"); diff --git a/src/com/isode/stroke/network/Connection.java b/src/com/isode/stroke/network/Connection.java index b0e4799..ad01553 100644 --- a/src/com/isode/stroke/network/Connection.java +++ b/src/com/isode/stroke/network/Connection.java @@ -1,13 +1,13 @@ /* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ /* - * Copyright (c) 2010, Isode Limited, London, England. + * Copyright (c) 2010-2016, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.network; import com.isode.stroke.base.SafeByteArray; import com.isode.stroke.signals.Signal; @@ -30,11 +30,12 @@ public abstract class Connection { public abstract void disconnect(); public abstract void write(SafeByteArray data); public abstract HostAddressPort getLocalAddress(); + public abstract HostAddressPort getRemoteAddress(); public final Signal1<Boolean /*error*/> onConnectFinished = new Signal1<Boolean>(); public final Signal1<Error> onDisconnected = new Signal1<Error>(); public final Signal1<SafeByteArray> onDataRead = new Signal1<SafeByteArray>(); public final Signal onDataWritten = new Signal(); } diff --git a/src/com/isode/stroke/network/DummyConnection.java b/src/com/isode/stroke/network/DummyConnection.java index 51018ef..7cc302b 100644 --- a/src/com/isode/stroke/network/DummyConnection.java +++ b/src/com/isode/stroke/network/DummyConnection.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -55,11 +55,17 @@ public class DummyConnection extends Connection implements EventOwner { } public HostAddressPort getLocalAddress() { return localAddress; } - public Signal1<SafeByteArray> onDataSent = new Signal1<SafeByteArray>(); + @Override + public HostAddressPort getRemoteAddress() { + return remoteAddress; + } - public EventLoop eventLoop; - public HostAddressPort localAddress; + public Signal1<SafeByteArray> onDataSent = new Signal1<SafeByteArray>(); + + public EventLoop eventLoop; + public HostAddressPort localAddress = new HostAddressPort(); + public HostAddressPort remoteAddress = new HostAddressPort(); }
\ No newline at end of file diff --git a/src/com/isode/stroke/network/FakeConnection.java b/src/com/isode/stroke/network/FakeConnection.java index ebcf239..1ce5c7b 100644 --- a/src/com/isode/stroke/network/FakeConnection.java +++ b/src/com/isode/stroke/network/FakeConnection.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010-2014 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -12,12 +12,13 @@ package com.isode.stroke.network; import com.isode.stroke.eventloop.EventOwner; import com.isode.stroke.eventloop.EventLoop; import com.isode.stroke.eventloop.Event; import com.isode.stroke.base.SafeByteArray; + import java.util.Vector; public class FakeConnection extends Connection { public enum State { Initial, @@ -37,12 +38,17 @@ public class FakeConnection extends Connection { assert(false); } public HostAddressPort getLocalAddress() { return new HostAddressPort(); } + + @Override + public HostAddressPort getRemoteAddress() { + return new HostAddressPort(); + } public void setError(final Error e) { error = e; state = State.DisconnectedWithError; if (connectedTo != null) { eventLoop.postEvent(new Event.Callback() { diff --git a/src/com/isode/stroke/network/JavaConnection.java b/src/com/isode/stroke/network/JavaConnection.java index 29e3633..745655f 100644 --- a/src/com/isode/stroke/network/JavaConnection.java +++ b/src/com/isode/stroke/network/JavaConnection.java @@ -1,17 +1,19 @@ /* - * Copyright (c) 2010-2015, Isode Limited, London, England. + * Copyright (c) 2010-2016, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.network; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; +import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.CancelledKeyException; +import java.nio.channels.ClosedChannelException; import java.nio.channels.ClosedSelectorException; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.Arrays; @@ -512,12 +514,37 @@ public class JavaConnection extends Connection implements EventOwner { return null; } return new HostAddressPort(new HostAddress(socket.getLocalAddress()), socket.getLocalPort()); } @Override + public HostAddressPort getRemoteAddress() { + if (socketChannel_ == null) { + return null; + } + SocketAddress remoteAddress; + try { + remoteAddress = socketChannel_.getRemoteAddress(); + } catch (ClosedChannelException e) { + return null; + } catch (IOException e) { + return null; + } + if (!(remoteAddress instanceof InetSocketAddress)) { + // SocketChannel.getRemoteAddress should return a + // InetSocketAddress if it is bound to an IP Socket + // Address so return null if it does not + return null; + } + InetSocketAddress remoteInetAddress = (InetSocketAddress) remoteAddress; + return new HostAddressPort( + new HostAddress(remoteInetAddress.getAddress()), + remoteInetAddress.getPort()); + } + + @Override public String toString() { return "JavaConnection " + (socketChannel_ == null ? "with no socket configured" : "for " + getLocalAddress()) + (disconnecting_ ? " (disconnecting)" : ""); } diff --git a/src/com/isode/stroke/network/ProxiedConnection.java b/src/com/isode/stroke/network/ProxiedConnection.java index 6f4c044..5eac083 100644 --- a/src/com/isode/stroke/network/ProxiedConnection.java +++ b/src/com/isode/stroke/network/ProxiedConnection.java @@ -84,12 +84,17 @@ public abstract class ProxiedConnection extends Connection { connection_.write(data); } public HostAddressPort getLocalAddress() { return connection_.getLocalAddress(); } + + @Override + public HostAddressPort getRemoteAddress() { + return connection_.getRemoteAddress(); + } private void handleConnectFinished(Connection connection) { cancelConnector(); if (connection != null) { connection_ = connection; connection_.onDataRead.connect(new Slot1<SafeByteArray>() { diff --git a/src/com/isode/stroke/network/TLSConnection.java b/src/com/isode/stroke/network/TLSConnection.java index d64f88b..4e7f304 100644 --- a/src/com/isode/stroke/network/TLSConnection.java +++ b/src/com/isode/stroke/network/TLSConnection.java @@ -121,12 +121,17 @@ public class TLSConnection extends Connection { } public HostAddressPort getLocalAddress() { return connection.getLocalAddress(); } + @Override + public HostAddressPort getRemoteAddress() { + return connection.getRemoteAddress(); + } + public TLSContext getContext() { return context; } private void handleRawConnectFinished(boolean error) { if (onConnectFinished != null) { diff --git a/test/com/isode/stroke/component/ComponentConnectorTest.java b/test/com/isode/stroke/component/ComponentConnectorTest.java index 413f325..0a59a7d 100644 --- a/test/com/isode/stroke/component/ComponentConnectorTest.java +++ b/test/com/isode/stroke/component/ComponentConnectorTest.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -65,12 +65,17 @@ public class ComponentConnectorTest { } }); } } public HostAddressPort getLocalAddress() { return new HostAddressPort(); } + + @Override + public HostAddressPort getRemoteAddress() { + return new HostAddressPort(); + } public void disconnect() { assert(false); } public void write(final SafeByteArray data) { assert(false); } public EventLoop eventLoop; diff --git a/test/com/isode/stroke/network/ChainedConnectorTest.java b/test/com/isode/stroke/network/ChainedConnectorTest.java index a2bb98c..e3661d3 100644 --- a/test/com/isode/stroke/network/ChainedConnectorTest.java +++ b/test/com/isode/stroke/network/ChainedConnectorTest.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -60,12 +60,18 @@ public class ChainedConnectorTest { onConnectFinished.emit(!connects); } }); } public HostAddressPort getLocalAddress() { return new HostAddressPort(); } + + @Override + public HostAddressPort getRemoteAddress() { + return new HostAddressPort(); + } + public void disconnect() { assert(false); } public void write(final SafeByteArray data) { assert(false); } public boolean connects; public int id; public EventLoop eventLoop; diff --git a/test/com/isode/stroke/network/ConnectorTest.java b/test/com/isode/stroke/network/ConnectorTest.java index 43e2300..95080af 100644 --- a/test/com/isode/stroke/network/ConnectorTest.java +++ b/test/com/isode/stroke/network/ConnectorTest.java @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010-2014 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. @@ -66,12 +66,17 @@ public class ConnectorTest { } }); } } public HostAddressPort getLocalAddress() { return new HostAddressPort(); } + + @Override + public HostAddressPort getRemoteAddress() { + return new HostAddressPort(); + } public void disconnect() { assert(false); } public void write(final SafeByteArray data) { assert(false); } public EventLoop eventLoop; |
Swift