<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

-->
<!--
This file is also used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits. Set the project.properties' maven.changelog.range
property to the number of days since the last release.

To generate the release notes from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the formatting if necessary
and commit

The <action> type attribute can be add,update,fix,remove.
-->

<document xmlns="http://maven.apache.org/changes/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Apache Commons Net Release Notes</title>
    <author email="dev@commons.apache.org">Apache Commons developers</author>
  </properties>

    <!-- NOTE:
    The description below is specially formatted so as to improve the layout of the generated release notes:
    The parsing process removes all line feeds, replacing them with a single space.
    The Velocity template in resources/templates has been enhanced to replace pairs of adjacent spaces
    with a new-line in the release notes. (These spaces are ignored when displaying HTML).
    If the output is not quite correct, check for invisible trailing spaces!

    N.B. The release notes template groups actions by type, and only extracts data for the current release.
    The changes report outputs actions in the order they appear in this file.

    To regenerate the release notes:
    mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

    Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix.
     -->

  <body>
    <release version="3.10.0" date="202Y-MM-DD" description="Maintenance and bug fix release (Java 8).">
      <!-- FIX -->
      <action type="fix" issue="NET-650" dev="ggregory" due-to="Matthew McGillis, exceptionfactory, sebbASF">
        Delegate host resolution to Socket.connect() #138.
      </action>
      <action type="fix" dev="ggregory" due-to="Martin Wiesner, Gary Gregory, sebbASF">
        Fixes many grammar issues and typos in JavaDoc and code comments #141.
      </action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump commons-parent from 54 to 58 #132, #137, #153.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons-io from 2.11.0 to 2.12.0.
      </action>
    </release>
    <release version="3.9.0" date="2022-11-26" description="Maintenance and bug fix release (Java 8).">
      <!-- FIX -->
      <action type="fix" issue="NET-708" dev="ggregory" due-to="XenoAmess">
        Use yyyy instead of YYYY in SimpleDateFormat #97.
      </action>
      <action type="fix" dev="sebb">
        Prevent serialization of the 4 classes that implement Serializable.
        It is not useful and is unlikely to work properly.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Use Math.min and Math.max method instead of manual calculations. #104.
      </action>
      <action issue="NET-711" type="fix" dev="ggregory" due-to="Jochen Wiedmann, Gary Gregory">
        Add FTP option to toggle use of return host like CURL.
      </action>
      <action issue="NET-642" type="fix" dev="ggregory" due-to="Yani Mihaylov, Gary Gregory">
        FTPSClient execPROT removes proxy settings #90.
      </action>
      <action type="fix" dev="ggregory" due-to="John Patrick, Gary Gregory">
        JUnit5 assertThrows SimpleSMTPHeaderTestCase #121.
      </action>
      <action type="fix" dev="ggregory" due-to="John Patrick, Gary Gregory">
        JUnit5 assertThrows TestTimeInfo #120.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal, Gary Gregory">
        Simplify conditions avoiding extra operations #88.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Remove reflection from SSLSocketUtils.
      </action>
      <action type="fix" issue="NET-707" dev="ggregory" due-to="Dmytro Sylaiev, sebbASF, Gary Gregory">
        Process files with spaces in name for OS400 #95.
      </action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.mdtmInstant(String).
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add MLSxEntryParser.parseGmtInstant(String).
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.getControlKeepAliveReplyTimeoutDuration().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.setControlKeepAliveReplyTimeout(Duration).
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.getControlKeepAliveTimeoutDuration().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.setControlKeepAliveTimeout(Duration).
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.getDataTimeout().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.setDataTimeout(Duration).
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPFile.getTimestampInstant().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add github/codeql-action.
      </action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2.1.6 to 3.0.11 #93, #102, #115, #116.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump actions/checkout from 2.3.4 to 3.1.0 #89, #91, #100, #114.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/upload-artifact from 3.1.0 to 3.1.1 #124.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump junit from 4.13.1 to 5.9.1 Vintage #74.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump commons-io from 2.6 to 2.11.0 #60.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons.jacoco.version from 0.8.6 to 0.8.8.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons.japicmp.version from 0.14.3 to 0.17.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons.surefire.version from 2.22.2 to 3.0.0-M7.
      </action>
      <action type="update" dev="ggregory" due-to="XenoAmess, Gary Gregory">
        Bump ftpserver-core from 1.1.1 to 1.2.0 #96.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump exec-maven-plugin from 3.0.0 to 3.1.0 #109.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump commons-parent from 53 to 54 #112.
      </action>
    </release>
    <release version="3.8.0" date="2021-02-13" description="Maintenance and bug fix release (Java 7).">
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Arturo Bernal, Gary Gregory">
        Add and use NetConstants.
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add and use SocketClient.applySocketAttributes().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.hasFeature(FTPCmd).
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        [FTP] Add FTPClient.mdtmCalendar(String).
      </action>
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        [IMAP] Fix concurrent counting of chunks in IMAPExportMbox.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Fix possible if rare NPEs in tests.
      </action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump actions/checkout from v2.3.3 to v2.3.4 #69.
      </action>
      <action issue="NET-685" type="update" dev="ggregory" due-to="Simo385">
        Update SocketClient default connect timeout from ∞ to 60 seconds #51.
      </action>
      <action issue="NET-695" type="update" dev="ggregory" due-to="Gary Gregory, Possibly Cott">
        Apply SocketClient timeout after connection but before SSL negotiation.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal, Gary Gregory">
        Minor Improvements #71, #72.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump actions/cache from v2 to v2.1.4 #73.
      </action>
    </release>
    <release version="3.7.2" date="2020-10-14" description="Maintenance and bug fix release (Java 7).">
      <action issue="NET-689" type="fix" dev="ggregory" due-to="Charlie, Gary Gregory">
        Host name is not set on the SSLSocket causing isEndpointCheckingEnabled to fail.
      </action>
      <action type="fix" dev="ggregory" due-to="Dependabot">
        Fix possible socket and input stream leak on socket exception in
        org.apache.commons.net.ftp.FTPClient._retrieveFile(String, String, OutputStream).
      </action>
      <action issue="NET-690" type="fix" dev="ggregory" due-to="payal-meh, Gary Gregory">
        Performance issue when using the FTPClient to retrieve files #65.
      </action>
      <action issue="NET-691" type="update" dev="ggregory" due-to="Lewis John McGibbney">
        Improve Javadoc for IMAPSClient #68.
      </action>
      <!-- UPDATES -->
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump actions/setup-java from v1.4.2 to v1.4.3 #62.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump junit from 4.13 to 4.13.1 #67.
      </action>
    </release>
    <release version="3.7.1" date="2020-09-30" description="Maintenance and bug fix release (Java 7).">
      <action issue="NET-687" type="fix" dev="ggregory" due-to="Gary Gregory, Mikael, j-verse">
        [FTPS] javax.net.ssl.SSLException: Unsupported or unrecognized SSL message, #59.
      </action>
      <!-- UPDATES -->
      <action type="update" dev="ggregory" due-to="Dependabot">
        Update actions/checkout from v2.3.1 to v2.3.3 #56, #61.
      </action>
    </release>
    <release version="3.7" date="2020-08-05"
      description="
This is mainly a bug-fix release (Java 7). 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.

">
      <action issue="NET-673" type="fix" dev="sebb">
        IMAPClient.APPEND does not always calculate the correct length
      </action>
      <action issue="NET-646" type="add" dev="sebb">
        ALLO FTP Command for files >2GB
      </action>
      <action issue="NET-615" type="add" dev="sebb">
        IMAPClient could simplify using empty arguments
      </action>
      <action issue="NET-614" type="add" dev="sebb">
        IMAP fails to quote/encode mailbox names
      </action>
      <action issue="NET-643" type="fix" dev="sebb" due-to="Vasily">
        NPE when closing telnet stream
      </action>
      <action issue="NET-648" type="add" dev="pschumacher">
        Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility
      </action>
      <action issue="NET-641" type="fix" dev="sebb" due-to="pin_ptr">
        SubnetUtils.SubnetInfo.isInRange("0.0.0.0") returns true for CIDR/31, 32
      </action>
      <action issue="NET-638" type="add" dev="sebb" due-to="Daniel Leong">
        Telnet subnegotiations hard-limited to 512 bytes - allow override
      </action>
      <action issue="NET-639" type="fix" dev="sebb" due-to=" Alexander Eller">
        MVSFTPEntryParser.preParse - MVS, z/OS - allow for merged Ext/Used fields
      </action>
      <action issue="NET-636" type="fix" dev="sebb">
        examples should be in org.apache.commons.net subpackage
      </action>
      <action issue="NET-634" type="add" dev="sebb" due-to="Mauro Molinari">
        Add SIZE command support
      </action>
      <action type="add" dev="sebb">
        Add POP3ExportMbox example code
      </action>
      <action issue="NET-633" type="update" dev="sebb" due-to="n0rm1e">
        Add XOAUTH2 to IMAP and SMTP
      </action>
      <action issue="NET-632" type="update" dev="sebb" due-to="prakapenka">
        FTPHTTPClient - support for encoding other than UTF-8
      </action>
      <action issue="NET-631" type="fix" dev="sebb">
        Bug in MVSFTPEntryParser.parseUnixList (FindBugs)
      </action>
      <action issue="NET-584" type="fix" dev="sebb" due-to="Kazantsev Andrey Sergeevich/Nick Manley">
        Error when using org.apache.commons.net.ftp.FTPClient setControlKeepAliveTimeout
      </action>
      <action issue="NET-626" type="update" dev="sebb" due-to="Makoto Sakaguchi">
        SubnetUtils#SubnetUtils - improved comment
      </action>
      <action issue="NET-625" type="update" dev="sebb">
        SubnetUtils - improve construction
      </action>
      <action issue="NET-624" type="update" dev="sebb" due-to="Makoto Sakaguchi">
        SubnetInfo#getCidrSignature - improve functions
      </action>
      <action issue="NET-624" type="fix" dev="sebb" due-to="Makoto Sakaguchi">
        SubnetInfo#toCidrNotation: A wrong format subnet mask is allowed
      </action>
      <action issue="NET-623" type="fix" dev="sebb" due-to="Makoto Sakaguchi">
        SubnetUtils - fixed spelling errors
      </action>
      <action issue="NET-621" type="update" dev="sebb" due-to="Makoto Sakaguchi">
        SubnetUtils#SubnetInfo - remove unnecessary accessors
      </action>
      <action issue="NET-619" type="update" dev="sebb" due-to="Makoto Sakaguchi">
        SubnetUtils - improve binary netmask algorithm
      </action>
      <action issue="NET-613" type="fix" dev="sebb" due-to="Donald Kwakkel">
        System Information Leak in ftp parser
      </action>
      <action issue="NET-678" type="update" dev="sebb" due-to="Roman Grigoriadi">
        VMS ftp LIST parsing results in empty file list
      </action>
      <action issue="NET-674" type="add" dev="sebb" due-to="Chris Steingen">
        FTPListParseEngine should support listing via MLSD
      </action>
      <action issue="NET-663" type="fix" dev="sebb" due-to="Max Shenfield">
        NullPointerException when FTPClient remote verification fails
      </action>
      <action issue="NET-649" type="fix" dev="sebb" due-to="Filipe Bojikian Rissi">
        227 Entering Passive Mode
      </action>
      <action issue="NET-660" type="add" dev="sebb" due-to="Nagabhushan S N">
        Next and Previous IP Address in SubnetUtils.SubnetInfo
      </action>
      <action issue="NET-682" type="fix" dev="sebb" due-to="richard">
        MVSFTPEntryParser doesn't support Record Formats of U
      </action>
    </release>
    <release version="3.6" date="2017-02-15"
      description="
This is mainly a bug-fix release (Java 6). See further details below.


 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

  The code now requires a minimum of Java 6.

  Changes to functionality:
 * The FTP client now performs stricter checks on non-multiline command replies.
  The 3 digit code must now be followed by a space and some text, as per RFC 959.
  To suppress this stricter checking, call FTP#setStrictReplyParsing(false). This should not be needed with a well-behaved server.
  Note also that if strict checking is disabled, some functions may unconditionally strip the next character after the code,
without checking it if is a space.

* The FTP client mlistFile() method now checks for a leading space before removing it.
  If the space is missing, a MalformedServerReplyException is thrown.
  This will only happen if the FTP server is not compliant with RFC 3659.

  Notable additions:
 * The POP3Mail examples can now get password from console, stdin or an environment variable.

* TFTPClient code has been rewritten to improve error handling and retries.
  
">
      <action issue="NET-613" type="fix" dev="sebb">
        TFTPClient assumes that lastBlock == 0 only once
      </action>
      <action issue="NET-320" type="fix" dev="sebb" due-to="Kevin Bulebush">
        Allow TFTPServer.java to bind to a specific network adapter
      </action>
      <action issue="NET-414" type="fix" dev="sebb" due-to="Chuck Wolber">
        Apache Commons TFTP does not reject request replies that originate from a control port.
      </action>
      <action issue="NET-477" type="fix" dev="sebb" due-to="John Walton">
        TFTP sendFile retry broken
      </action>
      <action issue="NET-612" type="update" dev="sebb">
        Allow TFTP socket IO tracing
      </action>
      <action issue="NET-596" type="fix" dev="sebb" due-to="Vincent Bories-Azeau">
        NullPointerException when disconnecting TelnetClient twice with JDK 7
      </action>
      <action issue="NET-602" type="fix" dev="sebb" due-to="Ross Braithwaite">
        Failure to parse times from SYST_L8 systems that report as "WINDOWS Type: L8"
      </action>
      <action issue="NET-604" type="fix" dev="sebb" due-to="Frank Delporte">
        TFTP send and receive don't have progress indication
      </action>
      <action issue="NET-588" type="fix" dev="sebb" due-to="Dave Nice / Thai H">
        FTPClient.setPassiveNatWorkaround assumes host is outside site local range
      </action>
      <action issue="NET-610" type="fix" dev="sebb" due-to="Sergey Yanzin">
        FTPClient.mlistFile incorrectly handles MLST reply
      </action>
      <action issue="NET-611" type="fix" dev="sebb">
        FTP does not validate command reply syntax fully
      </action>
      <action issue="NET-609" type="fix" dev="sebb" due-to="Tqup3">
        DefaultUnixFTPFileEntryParserFactory Issue (leading spaces removal configuration)
      </action>
      <action type="update" dev="sebb">
        POP3Mail example: support host port; allow reading password from Console/stdin/environment
      </action>
      <action issue="NET-597" type="fix" dev="sebb" due-to="Hiroki Taniura">
        FTP fails to parse listings for Solaris 10 FTPd in Japanese
      </action>
      <action issue="NET-599" type="update" dev="sebb">
        Add shorthand FTPClientConfig constructor
      </action>
      <action issue="NET-593" type="fix" dev="sebb" due-to="Joerg Weule">
        HostnameVerifier is called with ip addess instead of the provided hostname
      </action>
      <action issue="NET-594" type="fix" dev="sebb" due-to="Brad Worrral">
        TelnetClient._closeOutputStream unhandled exception from FilterOutputStream.close
      </action>
      <action issue="NET-592" type="fix" dev="sebb" due-to="Mark Ford">
        plainSocket in FTPSClient is never closed
      </action>
    </release>
    <release version="3.5" date="2016-05-05"
      description="
This is mainly a bug-fix release (Java 6). See further details below.


 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

  The code now requires a minimum of Java 6.

  Notable additions:
  The IMAP examples can now get password from console, stdin or an environment variable.
        ">
      <action issue="NET-583" type="fix" dev="sebb" due-to="Holger Rehn">
        FTPClient.getReplyString() returns wrong value after connect()
      </action>
      <action type="add" dev="sebb">
        Alternative password input methods for IMAP examples
      </action>
      <action type="add" dev="sebb">
        More tests for Feb 29 handling.
      </action>
      <action issue="NET-586" type="fix" dev="sebb">
        Don't use Feb 29 for short future date tests
      </action>
      <action type="fix" dev="sebb">
        Documentation tweaks
      </action>
    </release>
    <release version="3.4" date="2015-11-26"
      description="
This is mainly a bug-fix release. See further details below.

  This release is binary compatible with previous releases.
  However it is not source compatible, as some methods have been added to the interface NtpV3Packet

  Notable additions:
  IMAPExportMbox (example app) allows IMAP folders to be exported into an mbox file.
  This is the inverse of the IMAPImportMbox example added previously
        ">
      <action issue="NET-581" type="fix" dev="sebb">
        SimpleSMTPHeader fails to supply the required Date: header
      </action>
      <action issue="NET-582" type="fix" dev="sebb">
        SimpleSMTPHeader does not allow for missing To: field
      </action>
      <action issue="NET-580" type="fix" dev="sebb" due-to="Simon Arlott">
        SMTPClient.sendSimpleMessage() silently ignores failed recipients
        Update Javadoc
      </action>
      <action issue="NET-579" type="fix" dev="sebb" due-to="Simon Arlott">
        SSL/TLS SocketClients do not verify the hostname against the certificate
      </action>
      <action issue="NET-576" type="update" dev="sebb">
        Allow FTPClient to use SYST response if system type is not specified in configuration
      </action>
      <action issue="NET-575" type="update" dev="sebb">
        FTPClientExample should support setting the date format
      </action>
      <action issue="NET-538" type="fix" dev="sebb" due-to="Dzmitry">
        FTPHTTPClient should use socket factory to create sockets
      </action>
      <action issue="NET-566" type="fix" dev="sebb" due-to="Gary Russell">
        UnixFTPEntryParser Drops Leading Spaces from File Names
      </action>
      <action type="update" dev="sebb">
        examples/Main now uses a property file to define aliases instead of scanning class files
      </action>
      <action issue="NET-552" type="fix" dev="sebb" due-to="Quentin Devriendt">
        SocketTimeoutException connecting a FTP server via an HTTP Proxy
      </action>
      <action issue="NET-528" type="add" dev="sebb">
        FTPListParseEngine does not provide access to raw responses
      </action>
      <action issue="NET-565" type="add" dev="sebb">
        Add FTPClient method to return an FTPFile from an MDTM command
      </action>
      <action issue="NET-564" type="update" dev="sebb">
        FTPFile.toFormattedString - allow specification of TimeZone for display
      </action>
      <action issue="NET-562" type="update" dev="sebb">
        FTPFile.toFormattedString should print only signficant parts of the parsed date
      </action>
      <action issue="NET-563" type="fix" dev="sebb">
        MLSxEntryParser needs test cases; parsing is too lax
      </action>
      <action issue="NET-561" type="fix" dev="sebb">
        FTPFile.toFormattedString prints user and group in wrong order
      </action>
      <action issue="NET-544" type="fix" dev="sebb" due-to="Olivier Queyrut ">
        FTPClient.initiateListParsing does not correctly check if parserKey was cached
      </action>
      <action issue="NET-554" type="update" dev="sebb">
        Simplify TelnetOptionHandler class hierarchy
      </action>
      <action issue="NET-558" type="fix" dev="sebb" due-to="Ralph Becker">
        FTPClient.getModificationTime(filename) returns complete received line including response code and EOL
        Strip the response code and EOL
      </action>
      <action issue="NET-556" type="update" dev="sebb" due-to="Andy Rosa">
        Make SubnetInfo.isInRange(int) public
      </action>
      <action issue="NET-550" type="fix" dev="sebb" due-to="Geoffrey Hardy">
        Default FTPClient bufferSize results in very slow retrieve transfers
        Fix code in Util#copyStream (also copyReader) that failed to use the proper default for buffer size 0
      </action>
      <action issue="NET-551" type="fix" dev="sebb">
        Util copyReader calls CopyStreamListener.bytesTransferred with the incorrect value for bytesTransferred
      </action>
      <action type="update" dev="sebb">
        Added control character processing to TelnetClientExample
      </action>
      <action issue="NET-547" type="update" dev="sebb" due-to="Fabio Scippacercola">
        There is a lack of documentation regarding setControlKeepAliveTimeout
      </action>
      <action issue="NET-549" type="fix" dev="sebb" due-to="Pradeep Natarajan">
        Telnet does not convert LF to CRLF in ASCII mode
      </action>
      <action issue="NET-543" type="fix" dev="sebb" due-to="Ferry Huberts">
        telnet: spy read EOL is reversed
      </action>
      <action issue="NET-540" type="add" dev="sebb">
        Article#printThread should have option to use any PrintStream
      </action>
      <action issue="NET-539" type="fix" dev="sebb">
        NPE if Threader.thread invoked with empty list or with null array
      </action>
      <action issue="NET-536" type="add" dev="sebb">
        IMAP FETCH example
        IMAPExportMbox can export selected nessages from an IMAP folder
      </action>
      <action issue="NET-535" type="add" dev="sebb">
        IMAP FETCH can overflow reply buffer; provide for partial responses
      </action>
      <action issue="NET-534" type="update" dev="sebb">
        Unnecesssary call to getReplyString() if no listeners configured
      </action>
      <action issue="NET-530" type="fix" dev="sebb" due-to="fish ship">
        input parameter of org.apache.commons.net.ftp.FTP.__getReply(boolean) is not used
      </action>
      <action issue="NET-529" type="fix" dev="sebb" due-to="Putinas Piliponis">
        SubnetUtils throws exception on valid input
      </action>
      <action issue="NET-527" type="add" dev="sebb" due-to="jason mathews">
        Add SimpleNTPServer as example and for testing
      </action>
      <action issue="NET-516" type="fix" dev="sebb" due-to="Asha K S &amp; pavan">
        parser problem occurs if the filename contains one or more characters of which the second byte of Shift-JIS code is 0x85
        Fix NT parser
      </action>
      <action type="update" dev="sebb">
        Added control encoding option to FTPClientExample
      </action>
      <action issue="NET-526" type="update" dev="sebb" due-to="Jason Mathews, MITRE Corp">
        Added missing set methods on NTP class and interface
      </action>
      <action issue="NET-526" type="update" dev="sebb">
        Avoid greedy matches within a regex
      </action>
      <action issue="NET-520" type="fix" dev="sebb">
        SubnetUtils("0.0.0.0/0") does not behave as expected
        Fixed range checking so network and broadcast addresses are treated as unsigned ints
      </action>
      <action issue="NET-521" type="fix" dev="sebb">
        SubnetUtils.SubnetInfo.getAddressCount() can overflow as it returns an int
      </action>
      <action issue="NET-515" type="fix" due-to="Sebastian Ritter">
        FTPClient sample in class javadoc "bug"
      </action>
      <action issue="NET-519" type="fix">
        Apache Commons Net 3.3 has a performance issue
      </action>
      <action issue="NET-517" dev="sebb" type="fix" due-to="David Kocher">
        FTPClient#reinitialize is package protected
      </action>
      <action issue="NET-512" dev="sebb" type="add" due-to="Thomas Raddatz">
        Downloading files or members from the AS400 QSYS file system is not supported
      </action>
      <action issue="NET-518" dev="sebb" type="fix" due-to="David Kocher">
        FTPClient#initFeatureMap should not initialize empty map if reply code is 530
      </action>
      <action issue="NET-514" dev="sebb" type="fix">
        IMAP APPEND multiple issues in IMapClient.
        Deprecated unusable append methods.
        Added new append method, as well as example IMapImportMbox class to make use of it.
      </action>
      <action issue="NET-511" dev="ggregory" type="fix" due-to="Kyriacos Elia, Daniel Scott">
        Exception for new SubnetUtils("0.0.0.0/0").
      </action>
    </release>
    <release version="3.3" date="2013-06-11"
      description="
This is mainly a bug-fix release. See further details below.
        ">
      <action issue="NET-509" dev="sebb" due-to="Anthony Dahanne" type="update">
        AuthenticatingSMTPClient needs a constructor with the isImplicit argument for SSL
      </action>
      <action issue="NET-501" dev="sebb" due-to="Julián Lastiri" type="fix">
        Race Condition on TelnetClient.disconnect() and TelnetInputStream.run()
        java.lang.IllegalStateException: Queue is full! Cannot process another character.
      </action>
      <action issue="NET-505" dev="sebb" due-to="Sean Kelley" type="update">
        User specified bufferSize reset to default when FTPClient is disconnected or reinitialized resulting in performance
        degradation.
      </action>
      <action issue="NET-507" dev="sebb" due-to="Jiri Netolicky" type="update">
        Option to disable private IP replacement in FTP passive mode.
      </action>
      <action issue="NET-503" dev="sebb" due-to="Ofer Regev" type="add">
        AuthenticatingSMTPClient does not support non-default encoding
      </action>
      <action issue="NET-500" dev="sebb" due-to="Michael Frick" type="fix">
        Always call FTPClient#setFileType after connection.
        Not all servers default to ASCII.
      </action>
      <action issue="NET-465" dev="sebb" due-to="Jim Kerwood" type="fix">
        FTPClient setSendBufferSize and setReceiveBufferSize on data socket.
        The previous fix caused performance problems.
        Added new getters and setters for the SO_SNDBUF and SO_RCVBUF values to be used on the data socket.
      </action>
      <action issue="NET-496" dev="sebb" type="add">
        Util copyReader/copyStream classes should use default buffer size for non-positive buffer size parameters.
      </action>
      <action issue="NET-310" dev="sebb" type="add">
        FTPCommand conversion to use enum; added FTPCmd emum and deprecated FTPCommand.
      </action>
      <action issue="NET-480" dev="sebb" due-to="Peter Naber" type="fix">
        Wrong passivHost when using FTPHTTPClient with EPSV
      </action>
      <action issue="NET-494" dev="sebb" type="fix">
        FTPClient.CSL.cleanUp() fails to restore timeout value on exception
      </action>
      <action issue="NET-492" dev="sebb" due-to="Tomasz Jedrzejewski" type="fix">
        FTPClient.printWorkingDirectory() incorrectly parses certain valid PWD command results
      </action>
    </release>
    <release version="3.2" date="2012-12-03"
      description="
This release fixes bugs and adds some new functionality (see below).
 It is binary compatible with previous releases.
 Note that Clirr shows that two public methods have been removed (NET-485). These are not used within NET.
        ">
      <action issue="NET-46" dev="sebb" type="fix">
        retrieveFileStream fails randomly or hangs
      </action>
      <action issue="NET-485" dev="sebb" type="fix">
        Remove unnecessary Base64 methods.
      </action>
      <action issue="NET-482" dev="sebb" type="update" due-to="Houman Atashbar">
        Support XOAUTH.
      </action>
      <action issue="NET-484" dev="sebb" type="fix">
        Base64.CHUNK_SEPARATOR should be private
      </action>
      <action issue="NET-483" dev="sebb" type="fix">
        Base64.encodeBase64(byte[], boolean, boolean, int) does not calculate output size correctly for unchunked output.
      </action>
      <action issue="NET-466" dev="sebb" type="fix" due-to="Martin Oberhuber">
        Regression: TelnetInputStream#available() blocks.
      </action>
      <action issue="NET-426" dev="sebb" type="fix" due-to="Ketan">
        FTPS: Hook to customize _openDataConnection_ SSLSocket before startHandshake() is called.
        Implement _openDataConnection(String, String) method to properly
        interface with FTPClient.openDataConnection(String, String)
      </action>
      <action issue="NET-456" dev="sebb" type="fix">
        TelnetClient hangs when reader-thread startup is delayed.
      </action>
      <action issue="NET-449" dev="sebb" type="fix">
        listFiles bug with folder that begins with "-". Clarify Javadoc.
      </action>
      <action issue="NET-473" dev="sebb" type="fix">
        FTPClient setSoTimeout (int time) will result in NullPointerException. Clarify Javadoc.
      </action>
      <action issue="NET-468" dev="sebb" type="add" due-to="Bogdan Drozdowski">
        Request for native support for socks proxy routing with Commons net FTP.
      </action>
      <action issue="NET-475" dev="sebb" type="fix">
        FtpClient sends REST when calling listFiles. Clarified Javadoc.
      </action>
      <action issue="NET-465" dev="sebb" type="add" due-to="Bogdan Drozdowski">
        FTPClient setSendBufferSize and setReceiveBufferSize on data socket.
      </action>
      <action issue="NET-462" dev="sebb" type="add" due-to="Bogdan Drozdowski">
        FTPClient in PASSIVE_LOCAL_DATA_CONNECTION_MODE cannot work when host have several different IP.
      </action>
      <action issue="NET-467" dev="sebb" type="fix">
        IMAPClient#fetch() does not handle literal strings.
      </action>
      <action issue="NET-458" dev="sebb" type="fix" due-to="Denis Molony">
        MVSFTPEntryParser.parseSimpleEntry - ArrayIndexOutOfBoundsException.
      </action>
      <action issue="NET-450" dev="sebb" type="fix" due-to="Roger Hardiman">
        Bug in documentation for FTPClient.
      </action>
      <action dev="sebb" type="add">
        The examples can now be run using "java -jar commons-net-examples-m.n.jar".
        This will automatically include the main net jar in the classpath.
        See documentation.
        FTPClientExample now supports "-A" for anonymous login
      </action>
      <action issue="NET-442" dev="sebb" type="fix">
        StringIndexOutOfBoundsException: String index out of range: -1 if server respond with root is current directory.
      </action>
      <action issue="NET-444" dev="sebb" type="fix">
        FTPTimestampParserImpl fails to parse future dates correctly on Feb 28th in a leap year.
      </action>
    </release>
    <release version="3.1" date="Feb 20, 2012"
      description="
This release fixes a few bugs and adds some new functionality (see below).
  It is binary compatible with previous releases
        ">
      <action issue="NET-441" dev="sebb" type="fix" due-to="consiliens">
        [FTP] mlistDir doc should be "MLSD" not "MSLD".
      </action>
      <action issue="NET-440" dev="sebb" type="add">
        [FTP] Allow user to provide default value in case SYST command fails.
      </action>
      <action issue="NET-438" dev="sebb" type="fix" due-to="Norman Maurer">
        POP3Client.capa() should call POP3Client.getAdditionalReply()
      </action>
      <action issue="NET-412" dev="sebb" type="fix" due-to="Chuck Wolber">
        TFTP implementation subject to Sorcerer's Apprentice Syndrome
      </action>
      <action issue="NET-410" dev="sebb" type="fix" due-to="Chuck Wolber">
        TFTP does not handle RFC 783 retransmits
      </action>
      <action issue="NET-437" dev="sebb" type="fix" due-to="Gavin Camp">
        TelnetInputStream doesn't support non-blocking IO when reader thread is not enabled
      </action>
      <action issue="NET-346" dev="sebb" type="add" due-to="Kevin Samuel">
        FTP should support reporting NATed external IP address
      </action>
      <action issue="NET-433" dev="sebb" type="add">
        Commons NET site should link to the examples
      </action>
      <action issue="NET-422" dev="sebb" type="fix" due-to="Tomas Mysik / Magnus Johansson">
        FTP using HTTP proxy not working
      </action>
      <action issue="NET-423" dev="sebb" type="fix" due-to="Jens Koch">
        FTPClient.storeFIle might fail when ControlKeepAliveTimeout is set (ditto for FTPCLient.retrieveFile)
      </action>
      <action issue="NET-426" dev="sebb" type="add" due-to="Ketan">
        FTPS: Hook to customize _openDataConnection_ SSLSocket before startHandshake() is called
      </action>
      <action issue="NET-430" dev="sebb" type="fix" due-to="Thomas Mathis">
        Can't login to POP3S Server using explicit mode
      </action>
      <action issue="NET-434" dev="sebb" type="fix" due-to="zhangyong">
        FTPClient fails to close local listener socket when command socket channel encounter "ReadTimeoutException"
      </action>
      <action issue="NET-436" dev="sebb" type="add" due-to="Jürgen Jung">
        [FTP] Support for SYST "Mac OS" listing - "MACOS Peter's Server"
      </action>
      <action issue="NET-425" dev="sebb" type="update" due-to="Steven Jardine">
        [FTP] _openDataConnection_, __storeFile, and __storeFileStream should be protected and take String for FTP command.
        Likewise for receiveFile and receiveFileStream.
      </action>
      <action issue="NET-416" dev="sebb" type="update" due-to="Abhijeet Gaikwad">
        [Telnet] Increasing sub-negotiation message holder array size
      </action>
      <action issue="NET-428" dev="sebb" type="fix" due-to="sebb">
        SubnetUtils throws ArrayIndexOutOfBoundsException for new SubnetUtils( "1.2.3.4/32" ).getInfo().getAllAddresses()
      </action>
      <action issue="NET-421" dev="sebb" type="fix" due-to="Oliver Saggau">
        Problem connecting to TLS/SSL SMTP server using explicit mode.
      </action>
      <action issue="NET-415" dev="sebb" type="fix" due-to="george thomas">
        [Site] typo in migration how-to.
      </action>
    </release>

    <release version="3.0.1" date="June 6, 2011" description="
This is a bug-fix release.
        ">
      <action issue="NET-409" dev="sebb" type="fix">
        FTPClient truncates file (storeFile method).
        Fix bug introduced in release 3.0.
      </action>
    </release>
    <release version="3.0" date="May 16, 2011"
      description="
This release fixes many bugs (see below), and adds new functionality:
  - basic support for IMAP and IMAPS
  - support for SMTPS and POP3S

    FTP changes:
  - default for lenient future dates is now true, which fixes short date parsing where host clock is ahead of client clock
  - no longer parses every response line twice
  - OS auto-detection can be overriden by defining the property 'org.apache.commons.net.ftp.systemType';
  - or by creating a properties file '/systemType.properties' which provides a mapping from getSystemType() to parser name
  See the Javadoc for FTPClient.initiateListParsing(String parserKey, String pathname).
  - SASL, PLAIN and CRAM-MD5 authentication added
  - added control channel keep-alive for use with misbehaving routers, see FTPClient.setControlKeepAliveTimeout(long controlIdle)

    NNTP changes:
  - reworked to use long for article numbers
  - added streaming equivalents for the array methods

  Added TrustManagerUtils and KeyManagerUtils classes to simplify setting up trust and key namagers.
KeyManagerUtils can be used to provide client certificates.

  This release is binary-compatible with 2.2, but there are some minor changes to source compatibility:
  - telnet.TelnetClient#addOptionHandler(TelnetOptionHandler) now additionally throws IOException
  - telnet.TelnetClient#deleteOptionHandler() now additionally throws IOException
  - ftp.FTPSClient ctors no longer throw NoSuchAlgorithmException
  - Redundant CODE_nnn definitions have been removed from FTPReply, SMTPReply and NNTPReply classes
  - Unused String constants KEYSTORE_ALGORITHM, PROVIDER, STORE_TYPE, TRUSTSTORE_ALGORITHM removed from FTPSClient

  All users are recommended to upgrade.
">
      <action issue="NET-407" dev="sebb" type="update">
        Change lenientFutureDates to default to true.
        This means short dates will be parsed as the current year when the host clock is up to 1 day ahead of the client clock.
      </action>
      <action issue="NET-404" dev="sebb" type="fix">
        FTPSSocketFactory does not override createSocket(); causes java.net.SocketException: Unconnected sockets not implemented.
      </action>
      <action issue="NET-399" dev="sebb" type="fix" due-to="Noah Levitt">
        ftp data connection does not use connectTimeout.
      </action>
      <action issue="NET-400" dev="sebb" type="update" due-to="David Kocher">
        Option to override SSL negotiation. Make FTPSClient#execAuth() and FTPSClient#sslNegotiation() protected
      </action>
      <action issue="NET-402" dev="sebb" type="fix">
        IMAP, NNTP, POP3 and SMTP classes uses BufferedReader for control channel, which does not follow the standard.
        Changed reader to CRLFLineReader.
      </action>
      <action issue="NET-401" dev="sebb" type="fix">
        FTP class uses BufferedReader for control channel, which does not follow the standard.
        Changed reader to CRLFLineReader.
      </action>
      <action issue="NET-331" dev="sebb" type="update">
        AS400 file timestamp format is wrong. Workround exists.
      </action>
      <action issue="NET-269" dev="sebb" type="update">
        Remove semi-redundant check in SubnetUtils.calculate().
      </action>
      <action issue="NET-219" dev="sebb" type="update">
        Should Telnet class Exception blocks write to System.err?
        Catch blocks removed, and throws clauses added to allow caller to more easily detect and recover.
      </action>
      <action issue="NET-397" dev="sebb" type="update" due-to="Bogdan Drozdowski"
        due-to-email="bogdandr # op . pl">
        FTPSClient does not handle AUTH or ADAT and only partially handles PBSZ. FTPSCommand should be deprecated.
      </action>
      <action issue="NET-268" dev="sebb" type="fix">
        Better handling of CIDR/31 and CIDR/32 where isInclusive = false.
        Return 0 for address count, and 0.0.0.0 for each of the addresses
      </action>
      <action issue="NET-395" dev="sebb" type="update">
        Move ProtocolCommandSupport to SocketClient.
      </action>
      <action issue="NET-393" dev="sebb" type="update">
        Should the sendCommandWithID() methods be public?
        Made methods private, and deleted currently unused ones.
      </action>
      <action issue="NET-394" dev="sebb" type="update">
        Are the sendUntaggedCommand() methods needed?
        Renamed the method as sendData(), as it's not a command.
      </action>
      <action issue="NET-392" dev="sebb" type="update">
        Use enum for IMAPCommand.
      </action>
      <action issue="NET-333" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        Added basic IMAP/IMAPS implementation.
      </action>
      <action issue="NET-389" dev="sebb" type="fix">
        Unix parser should ignore "total nnn" lines.
      </action>
      <action issue="NET-369" dev="sebb" type="remove">
        Article.addHeaderField() is currently write-only - there is no way to retrieve the headers - is it needed?
        Method was removed, along with the field.
      </action>
      <action issue="NET-367" dev="sebb" type="fix">
        ntp.TimeStamp uses incorrect lazy initialisation of static fields simpleFormatter and utcFormatter.
      </action>
      <action issue="NET-381" dev="sebb" type="update">
        Parsing is inefficient, as it parses everything twice.
      </action>
      <action issue="NET-388" dev="sebb" type="fix">
        VMSVersioningFTPEntryParser#preParse should not call super.preParse().
      </action>
      <action issue="NET-362" dev="sebb" type="fix">
        TelnetInputStream has various threading bugs.
      </action>
      <action issue="NET-89" dev="sebb" type="fix">
        TelnetClient use of FromNetASCIIInputStream and ToNetASCIIOutputStream breaks binary mode.
        See also NET-387.
      </action>
      <action issue="NET-385" dev="sebb" type="update">
        FTP does not apply timeout to initial responses.
      </action>
      <action issue="NET-384" dev="sebb" type="update">
        KeyManagerUtils - the KeyManager is not efficient.
      </action>
      <action issue="NET-383" dev="sebb" type="update">
        KeyManagerUtils - allow alias to be omitted when there is only one private key in the store
      </action>
      <action issue="NET-326" dev="sebb" type="add">
        A KeyManager is required when the protection level is set to 'P' with FTPSClient on active mode.
        Added KeyManagerUtils class to simplify provision of client certificates.
      </action>
      <action issue="NET-273" dev="sebb" type="add">
        FEAT response parsing. Added FTPClient methods: boolean hasFeature(feature [,option]),
        String fetaureValue(feature), String[] featureValues(feature)
      </action>
      <action issue="NET-379" dev="sebb" type="add">
        FTPClient - support for processing arbitrary commands that only use the control channel
      </action>
      <action issue="NET-378" dev="sebb" type="add">
        FTP listing should support MLST and MLSD.
      </action>
      <action issue="NET-377" dev="sebb" type="update">
        NLST does not take notice of HiddenFiles setting.
      </action>
      <action issue="NET-373" dev="sebb" type="update">
        NNTP Listgroups not working - broken server implementation.
      </action>
      <action issue="NET-375" dev="sebb" type="update">
        DotTerminatedMessageReader should extend BufferedReader, rather than Reader.
      </action>
      <action issue="NET-374" dev="sebb" type="update">
        ParserInitializationException doesn't use standard JDK exception chaining
      </action>
      <action issue="NET-372" dev="sebb" type="add">
        FTPSClient: java.security.cert.CertificateException: No X509TrustManager implementation available if trustManager == null
      </action>
      <action issue="NET-371" dev="sebb" type="add">
        Create TrustManagerFactory to provide custom TrustManagers.
      </action>
      <action issue="NET-354" dev="sebb" type="fix" due-to="Leif John Korshavn">
        FTPSClient not properly supporting CCC and PROT P.
      </action>
      <action issue="NET-368" dev="sebb" type="update">
        Threader.thread should accept an Iterable rather than a List.
      </action>
      <action issue="NET-327" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        "Unconnected sockets not implemented" when using FTPSClient
        Added disconnect() override which resets the socket factories to their defaults
      </action>
      <action issue="NET-350" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        "java.net.SocketException: Broken pipe" when calling "TelnetClient.sendAYT()"
        Added SocketClient#isAvailable() method to perform additional checks on a socket.
      </action>
      <action issue="NET-237" dev="sebb" type="add">
        Add streaming methods (corresponding to array methods) to NNTPClient.
      </action>
      <action issue="NET-365" dev="sebb" type="fix">
        FTPClient.listFiles() does not work properly, if remote server speaks German.
        Match non-space{3} instead of A-Za-z{3}
      </action>
      <action issue="NET-366" dev="sebb" type="fix">
        FTPClientConfig: setServerLanguageCode and setShortMonthNames do not work.
        Ensure that config is passed to all parsers that can use it.
      </action>
      <action issue="NET-276" dev="sebb" type="fix">
        NNTPClient has problems with group listings for large groups.
      </action>
      <action issue="NET-185" dev="sebb" type="fix">
        Possible NPE in Threader.java
      </action>
      <action issue="NET-364" dev="sebb" type="fix">
        nntp.Article is very inefficient and incorrect.
      </action>
      <action issue="NET-314" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        The FTP client should autodetect the control encoding.
      </action>
      <action issue="NET-363" dev="sebb" type="fix" due-to="daniel damon">
        Can't connect to a server behind firewall in passive mode.
      </action>
      <action issue="NET-348" dev="sebb" type="fix">
        Queue is full TelnetInputStream.
      </action>
      <action issue="NET-361" dev="sebb" type="add">
        Implement Telnet Command sender.
      </action>
      <action issue="NET-345" dev="sebb" type="fix" due-to="Archie Cobbs">
        Telnet client: not properly handling IAC bytes within subnegotiation messages:
        - failing to double IACs on output
        - failing to de-double IACs in input
      </action>
      <action issue="NET-343" dev="sebb" type="add" due-to="Archie Cobbs">
        Telnet client: Support Client-initiated Subnegotiation Messages.
      </action>
      <action issue="NET-344" dev="sebb" type="add" due-to="Archie Cobbs">
        Telnet client: Support Listener Notification of Incoming Data.
      </action>
      <action issue="NET-270" dev="sebb" type="fix">
        Incorrect error handling in method initiateListParsing of FTPClient.
      </action>
      <action issue="NET-352" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        SASL PLAIN and CRAM-MD5 authentication.
      </action>
      <action issue="NET-357" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        The POP3 client does not support SSL/TLS connections.
      </action>
      <action dev="sebb" type="remove">
        Removed deprecated unused fields from FTPSClient:
        - KEYSTORE_ALGORITHM, PROVIDER, STORE_TYPE, TRUSTSTORE_ALGORITHM
      </action>
      <action issue="NET-258" dev="sebb" type="fix">
        Implement A Keepalive Mechanism. Control channel keepalive implemented for the following methods:
        appendFile, storeFile, storeUniqueFile, retrieveFile.
      </action>
      <action issue="NET-289" dev="sebb" type="fix" due-to="Luc Claes">
        StackOverflowError in Threader.
      </action>
      <action issue="NET-317" dev="sebb" type="fix">
        POP3MessageInfo fields should be final.
      </action>
      <action issue="NET-252" dev="sebb" type="fix">
        Get rid of using deprecated API in VMSFTPEntryParser.
      </action>
      <action issue="NET-330" dev="sebb" type="remove">
        The method VMSFTPEntryParser.parseFileList(InputStream listStream) should not be present.
      </action>
      <action issue="NET-303" dev="sebb" type="fix">
        FTPFileEntryParser API samples are wrong.
      </action>
      <action issue="NET-229" dev="sebb" type="add">
        Use properties file (/systemType.properties) to handle new OS-type auto-detection.
      </action>
      <action issue="NET-332" dev="sebb" type="add">
        Commons net ftp cannot handle unknown type parser and should allow override of parser through vm argument.
        The system property "org.apache.commons.net.ftp.systemType" can be used to provide the system type.
      </action>
      <action issue="NET-286" dev="sebb" type="fix">
        Unhandled SecurityException in DefaultFTPFileEntryParserFactory.createFileEntryParser when using applets.
      </action>
      <action issue="NET-360" dev="sebb" type="fix">
        DefaultFTPFileEntryParserFactory.createFileEntryParser(String key) always tries to load a class.
      </action>
      <action issue="NET-156" dev="sebb" type="add">
        New FTPClient method to retrieve all directory names in the current working directory.
        Added methods listDirectories(), listDirectories(String path).
      </action>
      <action issue="NET-353" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        The SMTPClient does not support authentication.
      </action>
      <action issue="NET-356" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        The SMTP client does not support SSL/TLS connections.
      </action>
      <action issue="NET-358" dev="sebb" type="add">
        Implement copy Listener in FTPClient file operations.
      </action>
      <action issue="NET-359" dev="sebb" type="fix">
        CopyStreamAdapter unconditionally resets the CopyStreamEvent source and is inefficient.
      </action>
      <action issue="NET-355" dev="sebb" type="fix">
        examples.nntp.NNTPUtils does not compile
      </action>
      <action issue="NET-351" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
        APOP authentication fails most of the time.
        Fix by adding leading 0 if necessary.
      </action>
    </release>
    <release version="2.2" date="Nov 22, 2010"
      description="
This is primarily a maintenance release, but it also includes new features and enhancements.

  Users of version 2.0 are encouraged to upgrade to 2.2, as this release includes some important bug fixes.

  See the detailed list of changes below for full description of all bug fixes and enhancements.

">
      <action issue="NET-334" dev="sebb" type="fix">
        FromNetASCIIInputStream can throw a NullPointerException
      </action>
      <action issue="NET-341" dev="sebb" type="fix">
        FTPClient.remoteAppend(String filename) uses STOR instead of APPE
      </action>
      <action issue="NET-339" dev="sebb" type="fix">
        Incorrect parsing of timestamp on Windows CE
        Fix parsing to allow for new-style DOS listing using 24hr clock rather than AM/PM
      </action>
      <action issue="NET-338" dev="sebb" type="add">
        ftp.FTPClient.initiateListParsing(String parserKey, String pathname)
        can call createFileEntryParser with null systemName.
        Fix this by adding getSystemType() which does not return null, and deprecating getSystemName().
      </action>
      <action issue="NET-244" dev="sebb" type="add">
        Add support for FTPFileFilter filters. New classes FTPFileFilter, FTPFileFilters, new methods:
        FTPListParseEngine#getFiles(FTPFileFilter filter)
        FTPClient.listFiles(String pathname, FTPFileFilter filter)
      </action>
      <action issue="NET-313" dev="sebb" type="fix">
        Optionally enable EPSV with IPv4; Only send EPRT with IPv6.
        Fix incorrect port used with EPRT. Allow activeMaxPort == activeMinPort in getActivePort() method.
      </action>
      <action issue="NET-328" dev="sebb" type="fix">
        FromNetASCIIInputStream.read(byte[], int, int) may change length passed to superclass if not doing conversion
      </action>
      <action issue="NET-74" dev="sebb" type="add">
        Testcase to show WindowSizeOptionHandler is working OK
      </action>
      <action issue="NET-330" dev="sebb" type="fix">
        The method VMSFTPEntryParser.parseFileList(InputStream listStream) should not be present.
        Partial fix - marked method as deprecated and to be removed
      </action>
      <action issue="NET-180" dev="sebb" type="fix">
        Telnet EOR is "consumed" by TelnetInputStream when in BINARY transmission.
        Send notification to TelnetNotificationHandler.
      </action>
      <action issue="NET-329" dev="sebb" type="fix">
        TelnetInoutStream#__read() bug in the __receiveState handling for the _STATE_IAC state.
      </action>
      <action issue="NET-283" dev="sebb" type="fix">
        SocketClient should ensure input and output streams are closed
      </action>
      <action issue="NET-302" dev="sebb" type="fix">
        FTP: initiateListParsing should not cache entryParser
      </action>
      <action issue="NET-282" dev="rwinston" type="fix">
        Improvement to isInRange method in SubnetUtil.SubnetInfo class
      </action>
      <action issue="NET-266" dev="rwinston" type="fix">
        FTPClient.listFiles() corrupts file name in certain circumstances
      </action>
      <action issue="NET-264" dev="sebb" type="fix">
        Telnet spyStream NullPointerException
      </action>
      <action dev="sebb" type="update">
        Deprecated the following unused fields from org.apache.commons.net.ftp.FTPSClient:
        KEYSTORE_ALGORITHM, PROVIDER, STORE_TYPE, TRUSTSTORE_ALGORITHM
      </action>
      <action dev="niallp" type="fix">
        Fix site reports
      </action>
      <action issue="NET-285" dev="rwinston" type="fix">
        Add support for setting external host ip/port range
      </action>
      <action issue="NET-290" dev="rwinston" type="fix">
        Add fix and testcase for DotTerminatedMessageReader
      </action>
      <action issue="NET-288" dev="rwinston" type="fix">
        Add support for IPv6 EPRT/EPSV
      </action>
      <action issue="NET-305" dev="rwinston" type="fix">
        Fix SubnetUtils for /32 subnets and add inclusive host count flag
      </action>
      <action issue="NET-300" dev="rwinston" type="fix">
        Fix NPE when listHiddenFiles was on
      </action>
      <action issue="NET-215" dev="rwinston" type="fix">
        UNIXFTPEntryParser didn't preserve trailing whitespace in files
      </action>
      <action issue="NET-236" dev="rwinston" type="fix">
        method SubnetUtils.SubnetInfo.isInRange(addr) returns incorrect result
      </action>
      <action issue="NET-242" dev="rwinston" type="fix">
        Method createServerSocket of FTPSSocketFactory never called and thus UseClientMode is incorrect in a secured ftp transfer
        using active mode.
      </action>
      <action issue="NET-248" dev="rwinston" type="fix">
        Fix inconsistent command list in FTPCommand
      </action>
      <action issue="NET-250" dev="rwinston" type="fix">
        DefaultFTPFileEntryParserFactory did not work with Netware FTP server returning "NETWARE TYPE: L8"
      </action>
      <action issue="NET-257" dev="rwinston" type="fix">
        FTP.getReplyStrings() returned array of null Strings
      </action>
      <action issue="NET-259" dev="rwinston" type="fix">
        UnixFTPEntryParser regex did not match some directory entries
      </action>
      <action issue="NET-260" dev="rwinston" type="fix">
        SubnetUtils.SubnetInfo.isInRange(...) returned incorrect values
      </action>
      <action issue="NET-261" dev="rwinston" type="update">
        SubnetUtils.SubnetInfo.isInRange(...) behavior not documented
      </action>
      <action issue="NET-262" dev="rwinston" type="fix">
        SubnetUtils did not handle /31 and /32 CIDRs well
      </action>
      <action issue="NET-265" dev="rwinston" type="fix">
        UnixFTPEntryParser failed to parse entry in certain conditions
      </action>
      <action issue="NET-266" dev="rwinston" type="fix">
        FTPClient.listFiles() corrupted file name in certain circumstances
      </action>
      <action issue="NET-251" dev="rwinston" type="update">
        Moved class "ThreadContainer" from Threader.java into its own source file
      </action>
      <action issue="NET-256" dev="rwinston" type="fix">
        FTPSClient should accept a pre-configured SSLContext
      </action>
      <action issue="NET-263" dev="rwinston" type="add">
        SubnetUtils / SubNetInfo toString() implementations
      </action>
      <action dev="rwinston" type="fix">
        Improve NNTPClient handling of invalid articles
      </action>
      <action dev="rwinston" type="update">
        Refactor examples package.
      </action>
      <action dev="sebb" type="add">
        Javadoc fixes, improvements, and refactoring.
      </action>
      <action issue="NET-245" dev="rwinston" type="fix">
        Apply MFMT patch
      </action>
      <action issue="NET-279" dev="rwinston" type="fix">
        Fix copying of reply lines collection
      </action>
      <action issue="NET-277" dev="rwinston" type="fix">
        Fix incorrect NNTP constant
      </action>
      <action issue="NET-274" dev="rwinston" type="fix">
        Restore socket state after CCC command
      </action>
      <action issue="NET-275" dev="rwinston" type="fix">
        Example code in FTPClient doesn't compile
      </action>
      <action dev="rwinston" type="fix">
        Fix inconsistent handling of socket read/write buffer size
      </action>
      <action issue="NET-294" dev="sebb" type="fix">
        UnixFTPEntryParser fails to parse some entries
      </action>
    </release>

    <release version="2.1" description="Not released" />

    <release version="2.0" date="October 20, 2008" description="Java 5.0 release">
      <action dev="rwinston" type="fix" issue="NET-307">
        One of the "connect" method in class org.apache.commons.net.SocketClient doesn't handle connection timeout properly
      </action>
      <action dev="rwinston" type="update">
        Add null check in TelnetClient::disconnect().
      </action>
      <action dev="rwinston" type="remove">
        Remove deprecated FTPFileIterator and FTPFileList classes.
      </action>
      <action dev="rwinston" type="add">
        Add connection timeout functionality to SocketClient.
      </action>
      <action dev="rwinston" type="update">
        Make the KeyManager and TrustManager settable (niklas@protocol7.com).
      </action>
      <action dev="rwinston" type="update">
        Patch FTPSClient to set default SSLServerSocketFactory. Thanks niklas@protocol7.com
      </action>
      <action dev="rwinston" type="fix" issue="NET-68">
        Patch to prevent TFTPClient dropping last packet. Thanks palm@poplarware.com
      </action>
      <action dev="rwinston" type="update">
        Change isConnected() method to delegate to underlying socket connection.
      </action>
      <action dev="rwinston" type="add">
        FTPS (TLS and SSL) is now supported. Thanks to Jose Juan Montiel, Paul Ferraro, and Satoshi Ishigami.
      </action>
      <action dev="rwinston" type="update">
        Commons::Net now uses Maven 2. The project.xml has been replaced with a pom.xml, and the source tree layout
        has been changed accordingly.
      </action>
      <action dev="rwinston" type="remove">
        Removed old ftp2 proposal directories.
      </action>
      <action dev="rwinston" type="update">
        Commons::Net now uses JDK regex functionality, saving on an extra [oro] dependency. There are now
        no external dependencies required.
      </action>
      <action dev="rwinston" type="fix">
        Various syntactic issues (FindBugs issues, JDK 5.0 generics support)
      </action>
      <action dev="dfs" type="fix">
        Applied Rob Hasselbaum's
        rhasselbaum -> alumni.ithaca.edu
        patch for PR 38688 fixing a
        TelnetInputStream hang.
      </action>
      <action dev="dfs" type="update">
        Exposed control connection of FTP
        class via _controlInput_ and _controlOutput_
        protected member variables in response
        to PR 38309 reported by
        josejuan.montiel@gmail.com.
      </action>
      <action dev="dfs" type="fix">
        Reverted PR 32859 patch to TFTPClient
        because it caused final packets to not
        be sent.
      </action>
      <action dev="rwinston" type="update" issue="NET-36">
        Make FTPClient extend SocketClient instead of TelnetClient. From jhindsley@providerlink.com
      </action>
      <action dev="rwinston" type="fix" issue="NET-39">
        Adds an "e" symbolic link flag to the Unix FTP parser. From denisgaebler@netscape.net
      </action>
      <action dev="rwinston" type="fix" issue="NET-119">
        Allow hidden files to be listed. Thanks to mario@ops.co.at
      </action>
      <action dev="rwinston" type="update">
        Remove reflective check for Socket::isConnected() (no longer needed)
      </action>
      <action dev="rwinston" type="add" issue="NET-136">
        Added WindowSizeOptionHandler for TelnetClient. Thanks to yuvalkashtan@gmail.com
      </action>
      <action dev="rwinston" type="update">
        Refactored *Client classes under net/ package into separate subpackages, and move PrintCommandListener
        out of the examples/ package.
      </action>
      <action dev="rwinston" type="add">
        Added an ant target to the Maven build to generate an FTP-only jar file, for clients who
        wish to use only FTP-based functionality.
      </action>
      <action dev="rwinston" type="update">
        Custom SocketFactory interface has been replaced with the JDK SocketFactory implementation. Added
        ServerSocketFactory instance to SocketClient.
      </action>
      <action dev="rwinston" type="update">
        Removed redundant FTP.IMAGE_FILE_TYPE flag.
      </action>
      <action dev="rwinston" type="update">
        Added heavily updated MVSFTPEntryParser from henrik.sorensen@balcab.ch
      </action>
      <action dev="rwinston" type="remove">
        Removed deprecated classes FTPFileListParser, FTPFileListParserImpl, and DefaultFTPFileListParser. Also
        removed associated deprecated methods from FTPClient.
      </action>
      <action dev="rwinston" type="fix" issue="NET-164">
        Added encoding to FingerClient. From Ulrich Mayring.
      </action>
      <action dev="rwinston" type="fix" issue="NET-24">
        Catch BindException in RCommandClient::connect().
      </action>
      <action dev="rwinston" type="fix" issue="NET-178">
        Add encoding specifier to SMTPClient.
      </action>
      <action dev="rwinston" type="add">
        Add setters for socket send/receive buffer size to SocketClient.
      </action>
      <action dev="rwinston" type="fix" issue="NET-177">
        Fix PASV specifiers that broke previously. From Chris Eagle.
      </action>
      <action dev="rwinston" type="fix" issue="NET-182">
        Catch NPE in FTP parser factory method.
      </action>
      <action dev="rwinston" type="fix" issue="NET-172">
        Don't bind a UDP socket to NTP protocol port.
      </action>
      <action dev="rwinston" type="fix">
        Better handling of user and group names with embedded spaces in FTP listings.
      </action>
      <action dev="rwinston" type="fix" issue="NET-173">
        Add configurable multiline parsing.
      </action>
      <action dev="rwinston" type="fix" issue="NET-188">
        Add fix for broken leap year date parsing.
      </action>
      <action dev="rwinston" type="add">
        Add SubnetUtils class (suggested by Kenny McLeod)
      </action>
      <action dev="rwinston" type="fix" issue="NET-169">
        Add Unix-type handling for UNKNOWN Type: L8 syst() message systems.
      </action>
      <action dev="rwinston" type="fix" issue="NET-198">
        Allow FTPTimestampParserImpl to take a predefined Calendar instance representing current time.
      </action>
      <action dev="sebb" type="fix" issue="NET-194">
        Replace Exception with IOException
      </action>
      <action dev="sebb" type="update" issue="NET-214">
        VMS file permission parsing
      </action>
      <action dev="sebb" type="fix" issue="NET-208">
        TelnetInputStream swallows interruptedexception as IOException
      </action>
      <action dev="sebb" type="fix" issue="NET-223">
        the data connection socket is not closed when an IOException occurred
      </action>
      <action dev="sebb" type="fix" issue="NET-230">
        ParserInitializationException when connecting to a Unix FTP server: comparison string must be upper case
      </action>
      <action dev="sebb" type="fix" issue="NET-225">
        FTPFileEntryParserImpl.preParse() doesn't remove unparsable entries at the end of the file list
      </action>
    </release>


    <!-- 1.5.0 has not yet been released, so comment out the section until it is ready for release -->
    <!-- <release version="1.5.0" date="" description=""> <action dev="dfs" type="fix" issue="NET-3"> TelnetInputStream.java: 
      Applied Rob Hasselbaum's rhasselbaum@alumni.ithaca.edu patch for PR 38688 fixing a TelnetInputStream hang. </action> <action 
      dev="rwinston" type="fix" issue="NET-73"> TelnetInputStream.java: Fixing another potential deadlock for telnet and FTP (patch 
      courtesy Rob Hasselbaum). </action> <action dev="dfs" type="update" issue="NET-57"> FTP.java: Exposed control connection 
      of FTP class via _controlInput_ and _controlOutput_ protected member variables in response to PR 38309 reported by josejuan.montiel@gmail.com. 
      </action> <action dev="rwinston" type="fix" issue="NET-68"> TFTPClient.java: Fix bug causing final packets to not be sent. 
      </action> <action dev="rwinston" type="fix" issue="NET-161"> TFTPClient.java: Fix sendFile() (related to NET-68). </action> 
      <action dev="rwinston" type="fix" issue="NET-181"> TFTPClient.java: block number wraparound. </action> <action dev="scohen" 
      type="fix" issue="NET-16"> UNIXFTPEntryParser.java: support for group names with spaces (patch courtesy D. Kilzer). </action> 
      <action dev="scohen" type="fix" issue="NET-62"> DefaultFTPFileEntryParserFactory.java: Wrap NoClassDefFoundError in FTP parser 
      exception when ORO is not available. </action> <action dev="rwinston" type="add" issue="NET-33"> FTPClient.java: Fix closing 
      FTP ServerSocket after timeout </action> <action dev="rwinston" type="add"> FTPClientConfig.java: Added an FTP parser for 
      Netware FTP servers. Tested on Novell Netware 6.5. </action> <action dev="rwinston" type="fix" issue="NET-188"> FTPTimestampParserImpl.java: 
      Fix leap year date parsing bug. </action> <action dev="rwinston" type="fix"> Article.java: Fix minor issues with NNTP parsing. 
      </action> </release> -->


    <release version="1.4.1" date="December 3, 2005" description="fix release to restore jdk 1.3 compatability">
      <action dev="scohen" type="fix">
        Applied patches for defect 37113. Code incompatible with jdk 1.3. Original patch submitted by Andrea Rombald
      </action>
      <action dev="scohen" type="fix">
        Applied patches for defect 37522. updated project.xml to correct compatibility level.
      </action>
    </release>

    <release version="1.4.0" date="May 7, 2005" description="Some additions and enhancements">
      <action dev="dfs" type="fix">
        Fixed typo in method name.
        FTP.removeCommandListener() was missing
        the L. Problem reported by
        Per.Lindberger@linkon.se.
      </action>
      <action dev="rwinston" type="fix">
        Applied fix for PR 33942 and PR 31793. Original patch submitted by mario@ops.co.at
      </action>
      <action dev="rwinston" type="fix">
        TFTPClient was ignoring final ACK (PR 32859). Thanks to perttu.auramo@ekahau.com
      </action>
      <action dev="rwinston" type="fix">
        Applied fix for ACL parsing in the FTP client (PR 33972). Submitted by robertalasch@yahoo.com
      </action>
      <action dev="rwinston" type="fix">
        Added missing NTP/SNTP unit tests to the codebase.
      </action>
      <action dev="dfs" type="fix">
        Applied fix for POP3Client returning empty reply strings (PR 34133). Thanks to sammy_c@lineone.net
      </action>
      <action dev="rwinston" type="fix">
        NTP port parameter was being ignored (PR 34219). Fixed by felix.eichhorn@3soft.de
      </action>
      <action dev="scohen" type="add">
        An FTP parser for MVS was added. Submitted by wnoto@openfinance.com
      </action>
      <action dev="scohen" type="add">
        Added functionality for extensible parsing of FTP responses, using a configurable format string. This should enable the
        FTP client to operate across many different locales and date formats.
      </action>
    </release>

    <release version="1.3.0" date="December 15, 2004" description="many fixes and enhancements">
      <action dev="rwinston" type="fix">
        Applied patch for PR 31793. Thanks to mario@ops.co.at
      </action>
      <action dev="rwinston" type="add">
        Added message threading functionality to the NNTP client.
      </action>
      <action dev="rwinston" type="update">
        Added return code 521 to FTPReply.java - this should obviate the need for the Ant FTP task to manually declare it.
      </action>
      <action dev="rwinston" type="fix">
        Add explicit notify() in TelnetInputStream::read(), so available() returns an accurate value. Thanks to
        tpalkot@gmail.com.
      </action>
      <action dev="rwinston" type="add">
        Added SNTP/NTP components into the Commons-Net codebase, courtesy of
        Jason Matthews.
      </action>
      <action dev="rwinston" type="add">
        Added POP3 test suite, courtesy of Mike George mike.george@comcast.net.
      </action>
      <action dev="scohen" type="fix">
        Applied fix for FTPClient returning null for certain timestamp formats (BUG #30737)
      </action>
      <action dev="rwinston" type="fix">
        Build.xml fixes - dont include example classes in redistributable
        .jar, remove test dependency from javadoc target, and exclude private members from generated javadoc.
      </action>
      <action dev="rwinston" type="fix">
        Fixed bug in TFTPClient::setMaxTimeout(), spotted by steve@widge.net
      </action>
      <action dev="dfs" type="fix">
        Some changes to facilitate compilation under JDK 5.0
      </action>
      <action dev="rwinston" type="fix">
        Return correct NNTP article count when high and low watermarks are 0.
        Spotted by jmordax@terra.es
      </action>
      <action dev="rwinston" type="fix">
        Remove trailing null byte in TFTP packets. Thanks to gerard.dens@alcatel.be
      </action>
      <action dev="dfs" type="fix">
        Many javadoc fixes.
      </action>
      <action dev="rwinston" type="update">
        Allow FTPClient to set transfer buffer size.
      </action>
      <action dev="rwinston" type="update">
        Ensure consistent handling of encoding throughout FTPClient
        operations. Patch submitted by leif@tanukisoftware.com.
      </action>
      <action dev="dfs" type="fix">
        Fix TelnetClient zombie thread issue
      </action>


    </release>
    <release version="1.3.0-dev" date="July 28, 2004" description="regression fix">
      <action dev="dfs" type="fix">
        Fixed regression from migration to new parsers. Most of the
        new parsers parsed the file size as an integer instead of a
        long. Changed all of them to set the size to long. This
        problem was detected by the reporter of:
        https://issues.apache.org/bugzilla/show_bug.cgi?id=30345
      </action>
    </release>
    <release version="1.2.2" date="June 25, 2004" description="fix release">
      <action dev="scohen" type="fix">
        fixed bug in the way FTPClient.listFiles worked when a directory was not
        specified. Current directory was not being 'remembered'. This was most
        problematic in the dependent ftp task of Ant.
      </action>
      <action dev="scohen" type="fix">
        fixed handling of certain unusual "special" file types in the Unix parser.
      </action>
    </release>

    <release version="1.2.1" date="May 6, 2004" description="fix release">
      <action dev="scohen" type="fix">
        changed code that rendered package uncompilable under JDK 1.2
      </action>
    </release>

    <release version="1.2.0" date="April 30, 2004" description="autodetection of system for listings">
      <action dev="scohen" type="fix">
        Mario Ivankovits mario@ops.co.at added
        functionality supporting correct handling of the &quot;dirstyle&quot;
        attribute of NT and OS400 servers that allows them to mimic Unix ftp servers.
        and a bug fix affecting handling of sticky and suid bits on Unix FTP servers.
      </action>
      <action dev="scohen" type="add">
        Mario Ivankovits mario@ops.co.at added parser for OS400.
      </action>
      <action dev="jbrekke,scohen" type="fix">
        Added a functional junit test testing list parsing against real servers
        and fix several bugs found through this test.
      </action>
      <action dev="dfs" type="add">
        Ted Wise ctwise@bellsouth.net provided a
        patch to add the XHDR extended NNTP command.
      </action>
      <action dev="scohen,dfs" type="update">
        Deprecated FTPFileListParser interface, DefaultFTPFileListParser
        class, and the FTPClient.listFiles methods that accepted an
        FTPFileListParser parameter. These deprecated classes and methods
        will be removed in version 2.0.
      </action>
      <action dev="scohen" type="add">
        Added org.apache.commons.net.parser.FTPFileEntryParserFactory
        interface and a default implementation:
        DefaultFTPFileEntryParserFactory. This addition facilitates the
        autodetection of which FTPFileEntryParser to use to generate
        listings. FTPClient.listFiles methods were added that implement
        autodetection.
      </action>
    </release>

    <!-- Not yet released; probably never will be <release version="1.1.1" date="TBD" description="last jdk1.1 compatible 
      release"> <action dev="scohen" type="fix"> Removed all JDK 1.1 incompatibilities that had been introduced unintentionally 
      in previous versions. Release 1.1.1 is the last JDK 1.1 compatible release. Any future 1.1.x maintenance releases will remain 
      JDK !.1 compatible, but version 1.2 may break compatibility and will be guaranteed to work with only J2SE 1.2 and later. 
      </action> </release> -->
    <release version="1.1.0" date="October 23, 2003" description="many enhancements and bug fixes">
      <action dev="dfs" type="add">
        Rory Winston Rory.Winston@telewest.co.uk provided
        patches to add the following extended NNTP commands to
        NNTPClient: XOVER, AUTHINFO USER, AUTHINFO PASS, and
        LIST ACTIVE.
      </action>
      <action dev="dfs" type="fix">
        Changed connection hooks for FTP, SMTP, POP3, and NNTP classes
        to force use of an 8-bit US-ASCII superset (ISO-8859-1) for
        protocol communication. This was necessary because
        InputStreamReader and OutputStreamWriter use the default
        client-side character set encoding. fasselin@ca.ibm.com
        reported failure of SMTP on OS/390 which has EBCDIC as the
        native character set.
      </action>

      <action dev="dfs" type="fix">
        Applied variation of fix suggested by Matthieu Recouly
        matthieu.recouly@laposte.net so that
        UnixFTPEntryParser may handle listings of the form:
        "drwxr-xr-x 1 usernameftp 512 Jan 29 23:32 prog"
        where the space between user name and group is omitted.
      </action>
      <action dev="dfs" type="fix">
        Applied patch from Stephane Este-Gracias
        sestegra@free.fr that fixes the parsing of
        VMS listings by VMSFTPEntryParser..
      </action>
      <action dev="brekke" type="fix">
        If the buffer queue run full, the run() method sometimes hangs forever.
        Changed wait() to wait(100) as with other changes in TelnetInputStream.
        Fix submitted From: J. Matysiak ( j.matysiak@cenit.de ).
      </action>
      <action dev="brekke" type="fix">
        FTP.smnt(String dir) was not passing on the dir to the SMNT command as an argument.
      </action>
      <action dev="brekke" type="add">
        Added a link to the FAQ currently hosted on the Apache Wiki.
      </action>
      <action dev="dfs" type="update">
        Changed package private NNTP._reader and NNTP._writer member
        variables to protected NNTP._reader_ and NNTP._writer_
        variables as suggested by issue report 16995 to facilitate
        extending NNTPClient functionality in subclasses.
      </action>
      <action dev="dfs" type="update">
        Changed name of FTPClient.__openDataConnection() to
        FTPClient._openDataConnection_() to remain consistent
        with the convention in the code that protected members
        are of the form _foo_. At some point __openDataConnection()
        had been changed from private to protected.
      </action>
      <action dev="brekke" type="add">
        Added terminal option support to the telnet client with tests.
        From Bruno D'Avanzo ( b.davanzo@inwind.it ).
      </action>
      <action dev="scohen" type="add">
        New parsers merged with mainline with support for old list parsers.
      </action>
    </release>

    <release version="1.0.0" date="February 23, 2003" description="first jakarta-commons release">
      <action dev="brekke" type="add">
        Added a migration document for moving from NetComponents to Commons/Net.
      </action>
      <action dev="brekke" type="fix">
        Moved the ftp2 tree with tests to a proposal directory and setup
        a build for that code. This can grow in this area so users don't
        think it is production ready.
      </action>
      <action dev="dfs" type="fix">
        Cleaned up license header on some source.
      </action>
      <action dev="dfs" type="fix">
        Moved .io and .util to .net.io and .net.util in preparation for
        1.0 release.
      </action>
      <action dev="dfs" type="fix">
        Fixed typo in NNTP.removeProtocolCommandListener() method name. It
        was missing an L. From: joev@atg.com.
      </action>
      <action dev="brekke" type="add">
        Various site updates including this changes doc and publish
        date information.
      </action>
      <action dev="dfs" type="fix">
        Patch for restarting FTP file transfers. The offset was not
        being sent immediately before the data transfer command on
        account. The bug was apparently introduced in NetComponents
        when it was decided to always send a PORT command before each data
        transfer to avoid socket reuse problems on Windows.
        From: Tapan Karecha ( tapan@india.hp.com ).
      </action>
      <action dev="dfs" type="fix">
        Applied a fix for potential deadlock in TelnetInputStream by
        changing a wait() to a wait(100).
        From: Tapan Karecha ( tapan@india.hp.com ).
      </action>
      <action dev="dfs" type="update">
        FTP examples now use passive ftp connections.
      </action>
    </release>
  </body>
</document>
