Browse Source

Bugzilla 63252 FTP prevent No Transfer Timeout during long listings by Eugene Adell

master
jkf 5 years ago
parent
commit
b719dcff3d
1 changed files with 48 additions and 0 deletions
  1. +48
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java

+ 48
- 0
src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java View File

@@ -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) {
@@ -1710,6 +1721,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.
*
@@ -2437,6 +2463,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.
*


Loading…
Cancel
Save