<?xml version="1.0"?>
<!--
   Copyright 2003-2004 The Apache Software Foundation

   Licensed 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.
-->
<document>
  <properties>
    <title>Changes</title>
    <author email="brekke@apache.org">Jeffrey D. Brekke</author>
  </properties>

  <body>
    <release version="1.2.1" date="May 6, 2004">
      <action dev="scohen" type="fix">
      	remove any code that would render package uncompilable under JDK 1.2
      </action>
    </release>	

    <release version="1.2.0" date="April 30, 2004">
      <action dev="scohen" type="fix">
      	Mario Ivankovits &lt;mario@ops.co.at&gt; 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 &lt;mario@ops.co.at&gt; 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 &lt;ctwise@bellsouth.net&gt; provided a
        <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=24078">
        patch</a> 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>
    
    <release version="1.1.1" date="TBD">
      <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">
      <action dev="dfs" type="add">
        Rory Winston &lt;Rory.Winston@telewest.co.uk&gt; 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.
        <pre>
        drwxr-xr-x 1 usernameftp 512 Jan 29 23:32 prog
        </pre>
      </action>

      <action dev="dfs" type="fix">
        Applied variation of fix suggested by Matthieu Recouly
        &lt;matthieu.recouly@laposte.net&gt; so that
        UnixFTPEntryParser may handle listings of the form
        <pre>
        drwxr-xr-x 1 usernameftp 512 Jan 29 23:32 prog
        </pre>
        where the space between user name and group is omitted.
      </action>
      <action dev="dfs" type="fix">
        Applied patch from Stephane Este-Gracias
        &lt;sestegra@free.fr&gt; 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="02/23/2003">
      <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>
