You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "ArtemGr (JIRA)" <ji...@apache.org> on 2008/12/01 15:10:44 UTC
[jira] Created: (NET-245) FTP: MFMT support
FTP: MFMT support
-----------------
Key: NET-245
URL: https://issues.apache.org/jira/browse/NET-245
Project: Commons Net
Issue Type: Wish
Affects Versions: Nightly Builds, 2.1
Reporter: ArtemGr
A lot of modern FTP servers support time modification via MFMT.
This is especially useful for file synchronization.
http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (NET-245) FTP: MFMT support
Posted by "Shikhar Bhushan (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12697687#action_12697687 ]
Shikhar Bhushan commented on NET-245:
-------------------------------------
This is a patch for adding support for the MFMT command. I tested this against proftpd which supports the feature.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,7 +2402,29 @@
return null;
}
+
+ /**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mdtm(pathname))
+ && getReplyString().contains(timeval));
+ }
+
/**
* Set the internal buffer size.
*
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Closed: (NET-245) FTP: MFMT support
Posted by "Rory Winston (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rory Winston closed NET-245.
----------------------------
Resolution: Fixed
Fix Version/s: 2.1
Patch applied. Thanks Shikhar.
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
> Fix For: 2.1
>
> Attachments: mftp-support.patch
>
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (NET-245) FTP: MFMT support
Posted by "Shikhar Bhushan (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shikhar Bhushan updated NET-245:
--------------------------------
Attachment: (was: mfmt-support.patch)
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
> Attachments: mftp-support.patch
>
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (NET-245) FTP: MFMT support
Posted by "Shikhar Bhushan (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shikhar Bhushan updated NET-245:
--------------------------------
Attachment: mfmt-support.patch
This is a patch for adding support for the MFMT command. I tested this against proftpd which supports the feature.
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
> Attachments: mfmt-support.patch
>
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Issue Comment Edited: (NET-245) FTP: MFMT support
Posted by "Shikhar Bhushan (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12697687#action_12697687 ]
Shikhar Bhushan edited comment on NET-245 at 4/9/09 4:44 PM:
-------------------------------------------------------------
This is a patch for adding support for the MFMT command. I tested this against proftpd which supports the feature.
{code:borderStyle=solid}
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,7 +2402,29 @@
return null;
}
+
+ /**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mdtm(pathname))
+ && getReplyString().contains(timeval));
+ }
+
/**
* Set the internal buffer size.
*
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
{code}
was (Author: shikhar):
This is a patch for adding support for the MFMT command. I tested this against proftpd which supports the feature.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,7 +2402,29 @@
return null;
}
+
+ /**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mdtm(pathname))
+ && getReplyString().contains(timeval));
+ }
+
/**
* Set the internal buffer size.
*
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (NET-245) FTP: MFMT support
Posted by "Shikhar Bhushan (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shikhar Bhushan updated NET-245:
--------------------------------
Attachment: mftp-support.patch
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
> Attachments: mftp-support.patch
>
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (NET-245) FTP: MFMT support
Posted by "Shikhar Bhushan (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/NET-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shikhar Bhushan updated NET-245:
--------------------------------
Comment: was deleted
(was: This is a patch for adding support for the MFMT command. I tested this against proftpd which supports the feature.
{code:borderStyle=solid}
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,7 +2402,29 @@
return null;
}
+
+ /**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mdtm(pathname))
+ && getReplyString().contains(timeval));
+ }
+
/**
* Set the internal buffer size.
*
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
Index: FTPClient.java
===================================================================
--- FTPClient.java (revision 763793)
+++ FTPClient.java (working copy)
@@ -2402,8 +2402,30 @@
return null;
}
-
+
/**
+ * Issue the FTP MFMT command (not supported by all servers) which sets the last
+ * modified time of a file.
+ *
+ * The timestamp should be in the form <code>YYYYMMDDhhmmss</code>. It should also
+ * be in GMT, but not all servers honour this.
+ *
+ * An FTP server would indicate its support of this feature by including "MFMT"
+ * in its response to the FEAT command, which may be retrieved by FTPClient.features()
+ *
+ * @param pathname The file path for which last modified time is to be changed.
+ * @param timeval The timestamp to set to, in <code>YYYYMMDDhhmmss</code> format.
+ * @return true if successfully set, false if not
+ * @throws IOException if an I/O error occurs.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ */
+ public boolean setModificationTime(String pathname, String timeval) throws IOException {
+ return (FTPReply.isPositiveCompletion(mfmt(pathname, timeval))
+ && getReplyString().contains(timeval));
+ }
+
+
+ /**
* Set the internal buffer size.
*
* @param bufSize The size of the buffer
Index: FTPCommand.java
===================================================================
--- FTPCommand.java (revision 763793)
+++ FTPCommand.java (working copy)
@@ -70,6 +70,7 @@
public static final int MDTM = 33;
/** @since 2.1 */
public static final int FEAT = 34;
+ public static final int MFMT = 35;
public static final int USERNAME = USER;
public static final int PASSWORD = PASS;
@@ -105,9 +106,10 @@
//public static final int HELP = HELP;
//public static final int NOOP = NOOP;
/** @since 2.0 */
- public static final int MOD_TIME = MDTM;
+ public static final int GET_MOD_TIME = MDTM;
/** @since 2.1 */
public static final int FEATURES = FEAT;
+ public static final int SET_MOD_TIME = MFMT;
// Cannot be instantiated
private FTPCommand()
@@ -117,7 +119,7 @@
"USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT", "PORT",
"PASV", "TYPE", "STRU", "MODE", "RETR", "STOR", "STOU", "APPE", "ALLO",
"REST", "RNFR", "RNTO", "ABOR", "DELE", "RMD", "MKD", "PWD", "LIST",
- "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT"
+ "NLST", "SITE", "SYST", "STAT", "HELP", "NOOP", "MDTM", "FEAT", "MFMT"
};
/**
Index: FTP.java
===================================================================
--- FTP.java (revision 763793)
+++ FTP.java (working copy)
@@ -1162,7 +1162,30 @@
{
return sendCommand(FTPCommand.MDTM, file);
}
-
+
+
+ /**
+ * A convenience method to send the FTP MFMT command to the server,
+ * receive the reply, and return the reply code.
+ * <p>
+ * @param pathname The pathname for which mtime is to be changed
+ * @param timeval Timestamp in <code>YYYYMMDDhhmmss</code> format
+ * @return The reply code received from the server.
+ * @exception FTPConnectionClosedException
+ * If the FTP server prematurely closes the connection as a result
+ * of the client being idle or some other reason causing the server
+ * to send FTP reply code 421. This exception may be caught either
+ * as an IOException or independently as itself.
+ * @exception IOException If an I/O error occurs while either sending the
+ * command or receiving the server reply.
+ * @see <a href="http://tools.ietf.org/html/draft-somers-ftp-mfxx-04">http://tools.ietf.org/html/draft-somers-ftp-mfxx-04</a>
+ **/
+ public int mfmt(String pathname, String timeval) throws IOException
+ {
+ return sendCommand(FTPCommand.MFMT, timeval + " " + pathname);
+ }
+
+
/***
* A convenience method to send the FTP RNFR command to the server,
* receive the reply, and return the reply code.
{code})
> FTP: MFMT support
> -----------------
>
> Key: NET-245
> URL: https://issues.apache.org/jira/browse/NET-245
> Project: Commons Net
> Issue Type: Wish
> Affects Versions: Nightly Builds, 2.1
> Reporter: ArtemGr
>
> A lot of modern FTP servers support time modification via MFMT.
> This is especially useful for file synchronization.
> http://www.omz13.com/downloads/draft-somers-ftp-mfxx-00.html#anchor8
> http://forum.filezilla-project.org/viewtopic.php?f=6&t=6115
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.