You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by am...@apache.org on 2025/06/29 15:39:53 UTC
(aries-rsa) 01/02: ARIES-2192 Add TCP Provider bind address configuration
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 <am...@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);
}