              Apache Commons Net 3.10.0
                  RELEASE NOTES

The Apache Commons Net team is pleased to announce the release of Apache Commons Net 3.10.0.

Apache Commons Net library contains a collection of network utilities and protocol implementations.
Supported protocols include Echo, Finger, FTP, NNTP, NTP, POP3(S), SMTP(S), Telnet, and Whois.


Maintenance and bug fix release (Java 8 or above).

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Net website:

https://commons.apache.org/proper/commons-net/

Download page: https://commons.apache.org/proper/commons-net/download_net.cgi

Changes in this version include:
===============================

New features:
o           Add and use DatagramSocketClient.setDefaultTimeout(Duration) and deprecate DatagramSocketClient.setDefaultTimeout(int). Thanks to Gary Gregory.
o           Add and use TFTP.DEFAULT_TIMEOUT_DURATION and deprecate org.apache.commons.net.tftp.TFTP.DEFAULT_TIMEOUT. Thanks to Gary Gregory.
o           Add and use DatagramSocketClient#getSoTimeoutDuration(). Thanks to Gary Gregory.
o           Add and use DatagramSocketClient#setSoTimeout(Duration). Thanks to Gary Gregory.
o           Add and use DatagramSocketClient.checkOpen(). Thanks to Gary Gregory.
o           Add TelnetClient.sendAYT(Duration). Thanks to Gary Gregory.
o           TFTPServer implements AutoCloseable. Thanks to Gary Gregory.
o           DatagramSocketClient implements AutoCloseable. Thanks to Gary Gregory.
o           Add IMAP package tests, include junit-jupiter-params artifact #166. Thanks to KuKa, Gary Gregory.
o           Add Base64 missing tests and documentation fixes #161. Thanks to KuKa, Bruno P. Kinoshita.
o           Add FTPFile tests and fix Javadoc typos #162. Thanks to KuKa, Gary Gregory.
o           Add IMAPReply tests and documentation fixes #165. Thanks to KuKa, Gary Gregory, Bruno P. Kinoshita.

Fixed Bugs:
o NET-650:  Delegate host resolution to Socket.connect() #138. Thanks to Matthew McGillis, exceptionfactory, sebbASF.
o           Fixes many grammar issues and typos in JavaDoc and code comments #141. Thanks to Martin Wiesner, Gary Gregory, sebbASF.
o           Remove redundant (null) initializations and other clean ups #155. Thanks to Martin Wiesner, Gary Gregory.
o           TFTPServer.setMaxTimeoutRetries() now throws IllegalArgumentException instead of RuntimeException. Thanks to Gary Gregory.
o           TFTPServer.setSocketTimeout() now throws IllegalArgumentException instead of RuntimeException. Thanks to Gary Gregory.
o           FTPCommand.checkArray() now throws IllegalStateException instead of RuntimeException. Thanks to Gary Gregory.
o           org.apache.commons.net.nntp.Threader now throws IllegalStateException instead of RuntimeException. Thanks to Gary Gregory.
o           POP3Command static initializer now throws IllegalStateException instead of RuntimeException. Thanks to Gary Gregory.
o           SMTPCommand static initializer now throws IllegalStateException instead of RuntimeException. Thanks to Gary Gregory.
o           SubnetUtils.SubnetInfo.getPreviousAddress() now throws IllegalStateException instead of RuntimeException. Thanks to Gary Gregory.
o           IMAPExportMbox.MboxListener.chunkReceived(IMAP) now throws UncheckedIOException instead of RuntimeException. Thanks to Gary Gregory.
o           IMAPUtils.imapLogin(URI, int, ProtocolCommandListener) now throws IOException instead of RuntimeException while maintaining method signature source compatibility. Thanks to Gary Gregory.
o           [StepSecurity] ci: Harden GitHub Actions #156. Thanks to step-security-bot, Gary Gregory.
o NET-722:  Javadoc for FtpClient.setControlKeepAliveReplyTimeout(Duration) says timeout is in milliseconds. Thanks to David Costanzo, Gary Gregory.
o           Change class org.apache.commons.net.ftp.parser.MVSFTPEntryParser to support more datasets #182. Thanks to haegar9766, Gary Gregory.
o           Bulletproof TFTPServerPathTest #173. Thanks to Jakub Kupczyk, Bruno P. Kinoshita, Gary Gregory.
o           Deprecate org.apache.commons.net.util.Base64 in favor of java.util.Base64. Thanks to Gary Gregory.
o           Replace use of org.apache.commons.net.util.Base64 with java.util.Base64 in org.apache.commons.net.ftp. Thanks to Gary Gregory.
o           Replace use of org.apache.commons.net.util.Base64 with java.util.Base64 in org.apache.commons.net.imap. Thanks to Gary Gregory.
o           Replace use of org.apache.commons.net.util.Base64 with java.util.Base64 in org.apache.commons.net.pop3. Thanks to Gary Gregory.
o           Replace use of org.apache.commons.net.util.Base64 with java.util.Base64 in org.apache.commons.net.smtp. Thanks to Gary Gregory.

Changes:
o           Bump commons-parent from 54 to 62 #132, #137, #153. Thanks to Dependabot.
o           Bump commons-io from 2.11.0 to 2.14.0. Thanks to Gary Gregory.
o           Bump commons-lang3 from 3.12.0 to 3.13.0. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-net/changes-report.html

Enjoy!
-Apache Commons Net team

-----------------------------------------------------------------------------

              Apache Commons Net 3.9.0
                  RELEASE NOTES

The Apache Commons Net team is pleased to announce the release of Apache Commons Net 3.9.0.

Apache Commons Net library contains a collection of network utilities and protocol implementations.
Supported protocols include Echo, Finger, FTP, NNTP, NTP, POP3(S), SMTP(S), Telnet, and Whois.


Maintenance and bug fix release (Java 8 or above).

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Net website:

https://commons.apache.org/proper/commons-net/

Download page: https://commons.apache.org/proper/commons-net/download_net.cgi

Changes in this version include:
===============================

New features:
o           [FTP] Add FTPClient.mdtmInstant(String). Thanks to Gary Gregory.
o           [FTP] Add MLSxEntryParser.parseGmtInstant(String). Thanks to Gary Gregory.
o           [FTP] Add FTPClient.getControlKeepAliveReplyTimeoutDuration(). Thanks to Gary Gregory.
o           [FTP] Add FTPClient.setControlKeepAliveReplyTimeout(Duration). Thanks to Gary Gregory.
o           [FTP] Add FTPClient.getControlKeepAliveTimeoutDuration(). Thanks to Gary Gregory.
o           [FTP] Add FTPClient.setControlKeepAliveTimeout(Duration). Thanks to Gary Gregory.
o           [FTP] Add FTPClient.getDataTimeout(). Thanks to Gary Gregory.
o           [FTP] Add FTPClient.setDataTimeout(Duration). Thanks to Gary Gregory.
o           [FTP] Add FTPFile.getTimestampInstant(). Thanks to Gary Gregory.
o           Add github/codeql-action. Thanks to Gary Gregory.

Fixed Bugs:
o NET-708:  Use yyyy instead of YYYY in SimpleDateFormat #97. Thanks to XenoAmess.
o           Prevent serialization of the 4 classes that implement Serializable.
            It is not useful and is unlikely to work properly.
o           Use Math.min and Math.max method instead of manual calculations. #104. Thanks to Arturo Bernal.
o NET-711:  Add FTP option to toggle use of return host like CURL. Thanks to Jochen Wiedmann, Gary Gregory.
o NET-642:  FTPSClient execPROT removes proxy settings #90. Thanks to Yani Mihaylov, Gary Gregory.
o           JUnit5 assertThrows SimpleSMTPHeaderTestCase #121. Thanks to John Patrick, Gary Gregory.
o           JUnit5 assertThrows TestTimeInfo #120. Thanks to John Patrick, Gary Gregory.
o           Simplify conditions avoiding extra operations #88. Thanks to Arturo Bernal, Gary Gregory.
o           Remove reflection from SSLSocketUtils. Thanks to Gary Gregory.
o NET-707:  Process files with spaces in name for OS400 #95. Thanks to Dmytro Sylaiev, sebbASF, Gary Gregory.

Changes:
o           Bump actions/cache from 2.1.6 to 3.0.11 #93, #102, #115, #116. Thanks to Dependabot, Gary Gregory.
o           Bump actions/checkout from 2.3.4 to 3.1.0 #89, #91, #100, #114. Thanks to Dependabot, Gary Gregory.
o           Bump actions/upload-artifact from 3.1.0 to 3.1.1 #124. Thanks to Dependabot.
o           Bump junit from 4.13.1 to 5.9.1 Vintage #74. Thanks to Dependabot.
o           Bump commons-io from 2.6 to 2.11.0 #60. Thanks to Dependabot, Gary Gregory.
o           Bump commons.jacoco.version from 0.8.6 to 0.8.8. Thanks to Gary Gregory.
o           Bump commons.japicmp.version from 0.14.3 to 0.17.1. Thanks to Gary Gregory.
o           Bump commons.surefire.version from 2.22.2 to 3.0.0-M7. Thanks to Gary Gregory.
o           Bump ftpserver-core from 1.1.1 to 1.2.0 #96. Thanks to XenoAmess, Gary Gregory.
o           Bump exec-maven-plugin from 3.0.0 to 3.1.0 #109. Thanks to Dependabot.
o           Bump commons-parent from 53 to 54 #112. Thanks to Dependabot.


Historical list of changes: https://commons.apache.org/proper/commons-net/changes-report.html

Enjoy!
-Apache Commons Net team

-----------------------------------------------------------------------------

              Apache Commons Net 3.8.0
                  RELEASE NOTES

The Apache Commons Net team is pleased to announce the release of Apache Commons Net 3.8.0.

Apache Commons Net library contains a collection of network utilities and protocol implementations.
Supported protocols include Echo, Finger, FTP, NNTP, NTP, POP3(S), SMTP(S), Telnet, and Whois.


Maintenance and bug fix release (Java 7 or above).

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Net website:

https://commons.apache.org/proper/commons-net/

Download page: https://commons.apache.org/proper/commons-net/download_net.cgi

Changes in this version include:
===============================

New features:
o           Add and use NetConstants. Thanks to Arturo Bernal, Gary Gregory.
o           Add and use SocketClient.applySocketAttributes(). Thanks to Gary Gregory.
o           Add FTPClient.hasFeature(FTPCmd). Thanks to Gary Gregory.
o           Add FTPClient.mdtmCalendar(String). Thanks to Gary Gregory.

Fixed Bugs:
o           Fix concurrent counting of chunks in IMAPExportMbox. Thanks to Gary Gregory.
o           Fix possible if rare NPEs in tests. Thanks to Gary Gregory.

Changes:
o           Bump actions/checkout from v2.3.3 to v2.3.4 #69. Thanks to Dependabot.
o NET-685:  Update SocketClient default connect timeout from ? to 60 seconds #51. Thanks to Simo385.
o NET-695:  Apply SocketClient timeout after connection but before SSL negotiation. Thanks to Gary Gregory, Possibly Cott.
o           Minor Improvements #71, #72. Thanks to Arturo Bernal, Gary Gregory.
o           Bump actions/cache from v2 to v2.1.4 #73. Thanks to Dependabot.


Historical list of changes: https://commons.apache.org/proper/commons-net/changes-report.html

Enjoy!
-Apache Commons Net team

-----------------------------------------------------------------------------

              Apache Commons Net 3.7.2
                  RELEASE NOTES

The Apache Commons Net team is pleased to announce the release of Apache Commons Net 3.7.2.

Apache Commons Net library contains a collection of network utilities and protocol implementations.
Supported protocols include Echo, Finger, FTP, NNTP, NTP, POP3(S), SMTP(S), Telnet, and Whois.


Maintenance and bug fix release.

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Net website:

https://commons.apache.org/proper/commons-net/

Download page: https://commons.apache.org/proper/commons-net/download_net.cgi

Changes in this version include:
===============================

Fixed Bugs:
o NET-689:  Host name is not set on the SSLSocket causing isEndpointCheckingEnabled to fail. Thanks to Charlie, Gary Gregory.
o           Fix possible socket and input stream leak on socket exception in org.apache.commons.net.ftp.FTPClient._retrieveFile(String, String, OutputStream). Thanks to Dependabot.
o NET-690:  Performance issue when using the FTPClient to retrieve files #65. Thanks to payal-meh, Gary Gregory.

Changes:
o NET-691:  Improve Javadoc for IMAPSClient #68. Thanks to Lewis John McGibbney.
o           Bump actions/setup-java from v1.4.2 to v1.4.3 #62. Thanks to Dependabot.
o           Bump junit from 4.13 to 4.13.1 #67. Thanks to Dependabot.


Historical list of changes: https://commons.apache.org/proper/commons-net/changes-report.html

Enjoy!
-Apache Commons Net team

-----------------------------------------------------------------------------

              Apache Commons Net 3.7.1
                  RELEASE NOTES

The Apache Commons Net team is pleased to announce the release of Apache Commons Net 3.7.1

Apache Commons Net library contains a collection of network utilities and protocol implementations.
Supported protocols include Echo, Finger, FTP, NNTP, NTP, POP3(S), SMTP(S), Telnet, and Whois.


Maintenance and bug fix release.

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Net website:

https://commons.apache.org/proper/commons-net/

Download page: https://commons.apache.org/proper/commons-net/download_net.cgi

Changes in this version include:
===============================

Fixed Bugs:
o NET-687:  [FTPS] javax.net.ssl.SSLException: Unsupported or unrecognized SSL message, #59. Thanks to Gary Gregory, Mikael, j-verse.
o NET-673:  Update actions/checkout from v2.3.1 to v2.3.3 #56, #61. Thanks to Dependabot.
o NET-673:  Update actions/setup-java from v1.4.0 to v1.4.2 #58. Thanks to Dependabot.


Historical list of changes: https://commons.apache.org/proper/commons-net/changes-report.html

Enjoy!
-Apache Commons Net team

-----------------------------------------------------------------------------

              Apache Commons Net 3.7
                  RELEASE NOTES

The Apache Commons Net team is pleased to announce the release of Apache Commons Net 3.7

Apache Commons Net library contains a collection of network utilities and protocol implementations.
Supported protocols include Echo, Finger, FTP, NNTP, NTP, POP3(S), SMTP(S), Telnet, and Whois.

This is mainly a bug-fix release. See further details below.
 This release requires a minimum of Java 7.
 This release is binary compatible with previous releases.
However it is not source compatible with releases before 3.4, as some methods were added to the interface NtpV3Packet in 3.4
 Note that the examples packages were moved under org/apache/commons/net/examples.
The examples are not part of the public API, so this does not affect compatibility.

Changes in this version include:

New features:
o NET-646:  ALLO FTP Command for files >2GB
o NET-615:  IMAPClient could simplify using empty arguments
o NET-614:  IMAP fails to quote/encode mailbox names
o NET-648:  Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility
o NET-638:  Telnet subnegotiations hard-limited to 512 bytes - allow override Thanks to Daniel Leong.
o NET-634:  Add SIZE command support Thanks to Mauro Molinari.
o           Add POP3ExportMbox example code
o NET-674:  FTPListParseEngine should support listing via MLSD Thanks to Chris Steingen.
o NET-660:  Next and Previous IP Address in SubnetUtils.SubnetInfo Thanks to Nagabhushan S N.

Fixed Bugs:
o NET-673:  IMAPClient.APPEND does not always calculate the correct length
o NET-643:  NPE when closing telnet stream Thanks to Vasily.
o NET-641:  SubnetUtils.SubnetInfo.isInRange("0.0.0.0") returns true for CIDR/31, 32 Thanks to pin_ptr.
o NET-639:  MVSFTPEntryParser.preParse - MVS, z/OS - allow for merged Ext/Used fields Thanks to Alexander Eller.
o NET-636:  examples should be in org.apache.commons.net subpackage
o NET-631:  Bug in MVSFTPEntryParser.parseUnixList (FindBugs)
o NET-584:  Error when using org.apache.commons.net.ftp.FTPClient setControlKeepAliveTimeout Thanks to Kazantsev Andrey Sergeevich/Nick Manley.
o NET-624:  SubnetInfo#toCidrNotation: A wrong format subnet mask is allowed Thanks to Makoto Sakaguchi.
o NET-623:  SubnetUtils - fixed spelling errors Thanks to Makoto Sakaguchi.
o NET-613:  System Information Leak in ftp parser Thanks to Donald Kwakkel.
o NET-663:  NullPointerException when FTPClient remote verification fails Thanks to Max Shenfield.
o NET-649:  227 Entering Passive Mode Thanks to Filipe Bojikian Rissi.
o NET-682:  MVSFTPEntryParser doesn't support Record Formats of U Thanks to richard.

Changes:
o NET-633:  Add XOAUTH2 to IMAP and SMTP Thanks to n0rm1e.
o NET-632:  FTPHTTPClient - support for encoding other than UTF-8 Thanks to prakapenka.
o NET-626:  SubnetUtils#SubnetUtils - improved comment Thanks to Makoto Sakaguchi.
o NET-625:  SubnetUtils - improve construction
o NET-624:  SubnetInfo#getCidrSignature - improve functions Thanks to Makoto Sakaguchi.
o NET-621:  SubnetUtils#SubnetInfo - remove unnecessary accessors Thanks to Makoto Sakaguchi.
o NET-619:  SubnetUtils - improve binary netmask algorithm Thanks to Makoto Sakaguchi.
o NET-678:  VMS ftp LIST parsing results in empty file list Thanks to Roman Grigoriadi.


Historical list of changes: https://commons.apache.org/proper/commons-net/changes-report.html

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Net website:

https://commons.apache.org/proper/commons-net/

Download page: https://commons.apache.org/proper/commons-net/download_net.cgi
