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