552484 - Add parameter to specify the hostname in addition to the
interface name for CORBAFileServer
Signed-off-by: Matthias Koller <m.koller@peak-solution.de>
diff --git a/src/main/java/org/eclipse/mdm/api/odsadapter/filetransfer/CORBAFileServer.java b/src/main/java/org/eclipse/mdm/api/odsadapter/filetransfer/CORBAFileServer.java
index bb54a03..d92c9b5 100644
--- a/src/main/java/org/eclipse/mdm/api/odsadapter/filetransfer/CORBAFileServer.java
+++ b/src/main/java/org/eclipse/mdm/api/odsadapter/filetransfer/CORBAFileServer.java
@@ -23,6 +23,7 @@
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
@@ -67,6 +68,7 @@
private static final int DEFAULT_BUFFER_SIZE = 100_000;
private static final int SOCKET_TIMEOUT = 5_000;
private static final String INTERFACE_NAME_PROPERTY = "org.eclipse.mdm.api.odsadapter.filetransfer.interfaceName";
+ private static final String HOST_NAME_PROPERTY = "org.eclipse.mdm.api.odsadapter.filetransfer.hostname";
private final CORBAFileServerIF fileServer;
private final AoSession aoSession;
@@ -207,8 +209,8 @@
* socket's accept method is called, the registration is done asynchronously!
*/
fileServer.getForInstanceBySocket(aoSession, fileLink.getRemotePath(), elemId.aid, elemId.iid,
- InetAddress.getLocalHost().getHostAddress(), serverSocket.getLocalPort());
- } catch (CORBAFileServerException | IOException e) {
+ serverSocket.getInetAddress().getHostAddress(), serverSocket.getLocalPort());
+ } catch (CORBAFileServerException e) {
LOGGER.error("Unable to initialize socket stream, awaiting socket timeout.", e);
}
}).start();
@@ -220,6 +222,17 @@
}
private InetAddress getInterfaceAddress() throws SocketException {
+ String hostnameProperty = System.getProperty(HOST_NAME_PROPERTY);
+ if (!StringUtils.isEmpty(hostnameProperty)) {
+ LOGGER.debug("Using host name '" + hostnameProperty + "' for file transfer.");
+ try {
+ return InetAddress.getByName(hostnameProperty);
+ } catch (UnknownHostException e) {
+ LOGGER.warn("Specified host name '" + hostnameProperty + "' cannot be used for file transfer.", e);
+ // continue with lookup by interface name
+ }
+ }
+
String property = System.getProperty(INTERFACE_NAME_PROPERTY);
if (StringUtils.isEmpty(property)) {
LOGGER.debug("Using no specified interface for file transfer, property not set.");
@@ -321,7 +334,7 @@
}).start();
int localPort = serverSocket.getLocalPort();
- String localHostName = serverSocket.getInetAddress().getHostName();
+ String localHostName = serverSocket.getInetAddress().getHostAddress();
try {
return fileServer.saveForInstanceBySocket(aoSession, fileLink.getFileName(), "", elemId.aid, elemId.iid,
localHostName, localPort);