This is an automated email from the ASF dual-hosted git repository. jkf pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ant.git
commit b719dcff3d6cd3e79705dcbcb9357579ae8ff711 Author: jkf <j...@famkruithof.net> AuthorDate: Fri Jul 12 16:24:54 2019 +0200 Bugzilla 63252 FTP prevent No Transfer Timeout during long listings by Eugene Adell --- .../tools/ant/taskdefs/optional/net/FTP.java | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java index ad16f41..33d27ec 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java @@ -146,6 +146,9 @@ public class FTP extends Task implements FTPTaskConfig { private String initialSiteCommand = null; private boolean enableRemoteVerification = true; private int dataTimeout = -1; + private int wakeUpTransferInterval = -1; + private long lastWakeUpTime = 0; + protected static final String[] ACTION_STRS = { //NOSONAR "sending", @@ -547,6 +550,14 @@ public class FTP extends Task implements FTPTaskConfig { } } } + if(wakeUpTransferInterval > 0) { + if(wakeUpTransferIntervalExpired()) { + getProject().log("wakeUpTransferInterval is reached, trigger a data connection " , Project.MSG_DEBUG); + // send a minimalist command to trigger a data connection + ftp.listFiles(file.getName()); + } + } + } ftp.changeToParentDirectory(); } catch (FTPConnectionClosedException ftpcce) { @@ -1711,6 +1722,21 @@ public class FTP extends Task implements FTPTaskConfig { } /** + * Sets the time interval when we should automatically + * call a command triggering a transfer + * The parameter is in seconds + * + * @param wakeUpTransferInterval int + * @since Ant 1.10.6 + */ + public void setWakeUpTransferInterval(int wakeUpTransferInterval) { + if(wakeUpTransferInterval > 0) { + this.wakeUpTransferInterval = wakeUpTransferInterval; + } + } + + + /** * Checks to see that all required parameters are set. * * @throws BuildException if the configuration is not valid. @@ -2438,6 +2464,28 @@ public class FTP extends Task implements FTPTaskConfig { } /** + * checks if the wake up interval is expired + */ + private boolean wakeUpTransferIntervalExpired() { + boolean result = false; + + // on the first call, initialize the keep-alive mechanism + // by storing the current date + if(lastWakeUpTime == 0) { + lastWakeUpTime = (new Date()).getTime(); + } + else { + long currentTime = (new Date()).getTime(); + if(currentTime > (lastWakeUpTime + wakeUpTransferInterval*1000)) { + lastWakeUpTime = currentTime; + result = true; + } + } + + return result; + } + + /** * Runs the task. * * @throws BuildException if the task fails or is not configured