mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-25 14:55:55 +01:00
[ftpupload] Add configurable passive port (#10127)
* Add configurable passive port * Don't use apache library; Use standard Java * Ran spotless:apply * Update readme Signed-off-by: schinken <schinken@bamberg.ccc.de> Co-authored-by: Hilbrand Bouwkamp <hilbrand@h72.nl>
This commit is contained in:
parent
dc9c2f3fe8
commit
522586156c
@ -18,10 +18,11 @@ Automatic discovery is not supported.
|
|||||||
|
|
||||||
The binding has the following configuration options:
|
The binding has the following configuration options:
|
||||||
|
|
||||||
| Parameter | Name | Description | Required | Default value |
|
| Parameter | Name | Description | Required | Default value |
|
||||||
|-------------|--------------|------------------------------------------------------------------------------------------------------------------------|----------|---------------|
|
|--------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------------|
|
||||||
| port | TCP Port | TCP port of the FTP server | no | 2121 |
|
| port | TCP Port | TCP port of the FTP server | no | 2121 |
|
||||||
| idleTimeout | Idle timeout | The number of seconds before an inactive client is disconnected. If this value is set to 0, the idle time is disabled. | no | 60 |
|
| idleTimeout | Idle timeout | The number of seconds before an inactive client is disconnected. If this value is set to 0, the idle time is disabled. | no | 60 |
|
||||||
|
| passivePorts | Passive Ports | A string of passive ports, can contain a single port (as an integer), multiple ports seperated by commas (e.g. 123,124,125) or ranges of ports, including open ended ranges (e.g. 123-125, 30000-, -1023). Combinations for single ports and ranges is also supported. Empty (default) allows all ports as passive ports. | no | |
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import java.util.Dictionary;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.ftpserver.DataConnectionConfigurationFactory;
|
||||||
import org.apache.ftpserver.FtpServerConfigurationException;
|
import org.apache.ftpserver.FtpServerConfigurationException;
|
||||||
import org.apache.ftpserver.ftplet.FtpException;
|
import org.apache.ftpserver.ftplet.FtpException;
|
||||||
import org.openhab.binding.ftpupload.internal.ftp.FtpServer;
|
import org.openhab.binding.ftpupload.internal.ftp.FtpServer;
|
||||||
@ -90,6 +91,7 @@ public class FtpUploadHandlerFactory extends BaseThingHandlerFactory {
|
|||||||
protected synchronized void modified(ComponentContext componentContext) {
|
protected synchronized void modified(ComponentContext componentContext) {
|
||||||
stopFtpServer();
|
stopFtpServer();
|
||||||
Dictionary<String, Object> properties = componentContext.getProperties();
|
Dictionary<String, Object> properties = componentContext.getProperties();
|
||||||
|
DataConnectionConfigurationFactory dataConnectionConfigurationFactory = new DataConnectionConfigurationFactory();
|
||||||
|
|
||||||
int port = DEFAULT_PORT;
|
int port = DEFAULT_PORT;
|
||||||
int idleTimeout = DEFAULT_IDLE_TIMEOUT;
|
int idleTimeout = DEFAULT_IDLE_TIMEOUT;
|
||||||
@ -116,9 +118,21 @@ public class FtpUploadHandlerFactory extends BaseThingHandlerFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (properties.get("passivePorts") != null) {
|
||||||
|
String strPassivePorts = properties.get("passivePorts").toString();
|
||||||
|
if (!strPassivePorts.isEmpty()) {
|
||||||
|
try {
|
||||||
|
dataConnectionConfigurationFactory.setPassivePorts(strPassivePorts);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
logger.warn("Invalid passive ports '{}' ({})", strPassivePorts, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
logger.debug("Starting FTP server, port={}, idleTimeout={}", port, idleTimeout);
|
logger.debug("Starting FTP server, port={}, idleTimeout={}", port, idleTimeout);
|
||||||
ftpServer.startServer(port, idleTimeout);
|
ftpServer.startServer(port, idleTimeout,
|
||||||
|
dataConnectionConfigurationFactory.createDataConnectionConfiguration());
|
||||||
} catch (FtpException | FtpServerConfigurationException e) {
|
} catch (FtpException | FtpServerConfigurationException e) {
|
||||||
logger.warn("FTP server starting failed, reason: {}", e.getMessage());
|
logger.warn("FTP server starting failed, reason: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.ftpserver.DataConnectionConfiguration;
|
||||||
import org.apache.ftpserver.FtpServerConfigurationException;
|
import org.apache.ftpserver.FtpServerConfigurationException;
|
||||||
import org.apache.ftpserver.FtpServerFactory;
|
import org.apache.ftpserver.FtpServerFactory;
|
||||||
import org.apache.ftpserver.ftplet.DefaultFtplet;
|
import org.apache.ftpserver.ftplet.DefaultFtplet;
|
||||||
@ -48,6 +49,7 @@ public class FtpServer {
|
|||||||
private final Logger logger = LoggerFactory.getLogger(FtpServer.class);
|
private final Logger logger = LoggerFactory.getLogger(FtpServer.class);
|
||||||
|
|
||||||
private int port;
|
private int port;
|
||||||
|
private DataConnectionConfiguration dataConnectionConfiguration;
|
||||||
int idleTimeout;
|
int idleTimeout;
|
||||||
|
|
||||||
private org.apache.ftpserver.FtpServer server;
|
private org.apache.ftpserver.FtpServer server;
|
||||||
@ -61,10 +63,12 @@ public class FtpServer {
|
|||||||
FTPUserManager = new FTPUserManager();
|
FTPUserManager = new FTPUserManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startServer(int port, int idleTimeout) throws FtpException {
|
public void startServer(int port, int idleTimeout, DataConnectionConfiguration dataConnectionConfiguration)
|
||||||
|
throws FtpException {
|
||||||
stopServer();
|
stopServer();
|
||||||
this.port = port;
|
this.port = port;
|
||||||
this.idleTimeout = idleTimeout;
|
this.idleTimeout = idleTimeout;
|
||||||
|
this.dataConnectionConfiguration = dataConnectionConfiguration;
|
||||||
FTPUserManager.setIdleTimeout(idleTimeout);
|
FTPUserManager.setIdleTimeout(idleTimeout);
|
||||||
initServer();
|
initServer();
|
||||||
}
|
}
|
||||||
@ -127,8 +131,10 @@ public class FtpServer {
|
|||||||
private void initServer() throws FtpException {
|
private void initServer() throws FtpException {
|
||||||
FtpServerFactory serverFactory = new FtpServerFactory();
|
FtpServerFactory serverFactory = new FtpServerFactory();
|
||||||
ListenerFactory listenerFactory = new ListenerFactory();
|
ListenerFactory listenerFactory = new ListenerFactory();
|
||||||
|
|
||||||
listenerFactory.setPort(port);
|
listenerFactory.setPort(port);
|
||||||
listenerFactory.setIdleTimeout(idleTimeout);
|
listenerFactory.setIdleTimeout(idleTimeout);
|
||||||
|
listenerFactory.setDataConnectionConfiguration(dataConnectionConfiguration);
|
||||||
|
|
||||||
Listener listener = listenerFactory.createListener();
|
Listener listener = listenerFactory.createListener();
|
||||||
|
|
||||||
|
@ -18,5 +18,15 @@
|
|||||||
time is disabled.</description>
|
time is disabled.</description>
|
||||||
<default>60</default>
|
<default>60</default>
|
||||||
</parameter>
|
</parameter>
|
||||||
|
<parameter name="passivePorts" type="text">
|
||||||
|
<label>Passive Port Range</label>
|
||||||
|
<description>A string of passive ports, can contain a single port (as an integer), multiple ports seperated by
|
||||||
|
commas
|
||||||
|
(e.g. 123,124,125) or ranges of ports, including open ended ranges (e.g. 123-125, 30000-, -1023).
|
||||||
|
Combinations for
|
||||||
|
single ports and ranges is also supported. Empty (default) allows all ports as passive ports.</description>
|
||||||
|
<default></default>
|
||||||
|
<advanced>true</advanced>
|
||||||
|
</parameter>
|
||||||
</config-description>
|
</config-description>
|
||||||
</binding:binding>
|
</binding:binding>
|
||||||
|
Loading…
Reference in New Issue
Block a user