              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, Whois


Maintenance and bug fix release (Java 7).

For complete information on Apache Commons Net, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache 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, 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 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, 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 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, 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 Apache Commons Net website:

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

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