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);
         }

Reply via email to