This is an automated email from the ASF dual-hosted git repository. amichai pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit fce1744f4e09836bdd2d6a0395b7224b0de7629f Author: Amichai Rothman <amic...@apache.org> AuthorDate: Sat Jun 28 14:04:36 2025 +0300 ARIES-2192 Add TCP Provider bind address configuration --- provider/tcp/Readme.md | 16 +++++++++------- .../aries/rsa/provider/tcp/EndpointPropertiesParser.java | 5 +++++ .../org/apache/aries/rsa/provider/tcp/TcpEndpoint.java | 6 ++++++ .../org/apache/aries/rsa/provider/tcp/TcpProvider.java | 2 +- .../org/apache/aries/rsa/provider/tcp/TcpServer.java | 9 +++++++-- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/provider/tcp/Readme.md b/provider/tcp/Readme.md index b884f003..9adec7c3 100644 --- a/provider/tcp/Readme.md +++ b/provider/tcp/Readme.md @@ -2,13 +2,15 @@ Allows transparent remoting using Java Serialization over TCP. The TCP provider is very light-weight and -is ideal to get a first demo of remote services running. +is ideal to get a simple remote services setup running. ## Endpoint Configuration Properties -| Key | Default | Description | -|--------------------------|-------------|-------------------------------------| -| service.exported.configs | | Must contain "aries.tcp" | -| aries.rsa.port | [free port] | Port to listen on | -| aries.rsa.id | [random id] | Unique id string for endpoint | -| aries.rsa.numThreads | 10 | Number of listener threads to spawn | +| Key | Default | Description | +|--------------------------|--------------------|-------------------------------------| +| service.exported.configs | | Must contain "aries.tcp" | +| aries.rsa.hostname | [autodetect] | Hostname or IP address of service | +| aries.rsa.bindAddress | 0.0.0.0 (wildcard) | Address to listen on | +| aries.rsa.port | [free port] | Port to listen on | +| aries.rsa.id | [random id] | Unique id string for endpoint | +| aries.rsa.numThreads | 10 | Number of listener threads to spawn | diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/EndpointPropertiesParser.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/EndpointPropertiesParser.java index 05e3f114..7f9373be 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/EndpointPropertiesParser.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/EndpointPropertiesParser.java @@ -30,6 +30,7 @@ import org.osgi.service.remoteserviceadmin.EndpointDescription; public class EndpointPropertiesParser { static final String PORT_KEY = "aries.rsa.port"; static final String HOSTNAME_KEY = "aries.rsa.hostname"; + static final String BIND_ADDRESS_KEY = "aries.rsa.bindAddress"; static final String ID_KEY = "aries.rsa.id"; static final String THREADS_KEY = "aries.rsa.numThreads"; static final String TIMEOUT_KEY = "osgi.basic.timeout"; @@ -75,6 +76,10 @@ public class EndpointPropertiesParser { return hostName; } + public String getBindAddress() { + return getString(BIND_ADDRESS_KEY, System.getProperty(BIND_ADDRESS_KEY)); + } + public String getId() { return getString(ID_KEY, uuid); } diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java index 8c4d8cbb..228f5fed 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java @@ -34,6 +34,7 @@ import org.osgi.service.remoteserviceadmin.RemoteConstants; public class TcpEndpoint implements Endpoint { private String hostname; + private String bindAddress; private int port; private int numThreads; private Consumer<TcpEndpoint> closeCallback; @@ -51,6 +52,7 @@ public class TcpEndpoint implements Endpoint { EndpointPropertiesParser parser = new EndpointPropertiesParser(effectiveProperties); port = parser.getPort(); // this may initially be 0 for dynamic port hostname = parser.getHostname(); + bindAddress = parser.getBindAddress(); numThreads = parser.getNumThreads(); updateEndpointDescription(effectiveProperties); } @@ -72,6 +74,10 @@ public class TcpEndpoint implements Endpoint { return hostname; } + public String getBindAddress() { + return bindAddress; + } + public int getPort() { return port; } diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java index 08357ba8..ccfc8e91 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java @@ -101,7 +101,7 @@ public class TcpProvider implements DistributionProvider { int port = endpoint.getPort(); TcpServer server = servers.get(port); if (server == null || port == 0) { - server = new TcpServer(endpoint.getHostname(), port, endpoint.getNumThreads()); + server = new TcpServer(endpoint.getBindAddress(), port, endpoint.getNumThreads()); port = server.getPort(); // get the real port endpoint.setPort(port); servers.put(port, server); diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java index aa62166e..3142f606 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.InvocationTargetException; +import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; @@ -48,10 +49,14 @@ public class TcpServer implements Closeable, Runnable { private volatile boolean running; private ThreadPoolExecutor executor; - public TcpServer(String localip, int port, int numThreads) { + public TcpServer(String bindAddress, int port, int numThreads) { try { - this.serverSocket = new ServerSocket(port); + InetSocketAddress address = bindAddress == null || bindAddress.isEmpty() + ? new InetSocketAddress(port) + : new InetSocketAddress(bindAddress, port); + this.serverSocket = new ServerSocket(); this.serverSocket.setReuseAddress(true); + this.serverSocket.bind(address); } catch (IOException e) { throw new RuntimeException(e); }