libfget
=======

Packaging / Portability
-----------------------

* add examples directory?

* finish implementing test suite

* start using C99 "bool" type for boolean values?
  (need to check for relevant autoconf test)

* add libfget-config script for other packages to determine how to build
  and link to libfget?


New Features
------------

* should "banner" arg be present in ftp_connect() interface?
  (seems inconsistent, since any command can get a multi-line
  response from the server, but no other functions have a banner arg)
  (maybe we need a generic "get text from last response")

* add va_list functions for all stdargs functions in public API
  (e.g., ftp_vconnect() for ftp_connect(), etc)

* add ftp_quote() function?

* add API hooks to allow caller-supplied directory parsing function?
* take FTP_FEAT_NO_LIST_LS_OPTS out of FEAT bitmask
  (it's not really a FEAT response...
  maybe make it another caller-settable option?)

* add support for EPLF "i" fact and MLSD "unique" fact?

* support ftp_lseek() for O_WRONLY transfers ?

* add buffer for FTPFILEs
* implement high-level I/O functions for FTPFILEs (ftp_fgets(), etc)
  (suggested by Mike Drzal <drzal@uiuc.edu>)

* allow caller to access banners returned by the server after PASS and
  CWD commands?  (Save buffer from ftp_get_response() in the FTP handle?)
  (is this really necessary?  caller can get this info via recv_hook)
  (suggested by Mike Drzal <drzal@uiuc.edu>)


Directory Cache
---------------

* add option for dircache to be completely disabled ?
* directory cache modifications:
  * add call to allow application to force refresh for a specific dir ?
    (should call this from ftp_close() for O_WRONLY files!)

* will dircache and ftplist code be able to handle a hidden directory?
  (i.e., directory does not show up in its parent, but you can CWD to it
  and do a LIST)
  (maybe I need to bite the bullet and make the dircache code completely
  dumb - i.e., "have I already issued this EXACT request?", but no
  intelligent analysis of the results)
  (this would make it easier to allow the dircache to be completely
  disabled, but it would also probably eliminate most of the need to
  disable it)


Code Cleanup
------------

* for option code, use per-option handler functions to automatically
  pass values down to netio library layer?

* add mmgr module to track dynamically allocated memory ?


Protocol Support
----------------

* add support for various protocol extensions:
  * various PORT-mode security fixes (RFC-2577)
  	* check to make sure that connection comes from the same address
	  that the control connection is connected to
	* use random ports instead of asking the kernel to assign one
  * EPRT/EPSV for IPv6 (RFC-2428)
  * AUTH/ADAT/PROT/etc security extensions (RFC-2228)
  * TLS (draft-murray-auth-ftp-ssl-12.txt)
  * LANG (RFC-2640)

* "SITE HELP" returns reply code 214, not 200 - maybe fix ftp_site() to be
  aware of this?

* fix handling of a 421 response code from the server
  (RFC-1123 says this should NOT be ECONNRESET)

* add support for other non-standard commands:
  http://www.serv-u.com/help/serv_u_help/additional_ftp_commands_supported_by_serv_u.htm
* add support for the following FTP commands:
   STRU, MODE, TYPE, APPE, ALLO, CDUP, STOU, SIZE, MDTM
* add support for wu_ftpd SITE commands:
   UMASK           GROUP           INDEX           GROUPS 
   IDLE            GPASS           EXEC            CHECKMETHOD 
   CHMOD           NEWER           ALIAS           CHECKSUM 
   HELP            MINFO           CDPATH 


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

fget
====

* add support for ";type=<typecode>" URL syntax
* code cleanup (take advantage of common code between all three modes)
* use fcntl()-locking on a lockfile for each file being downloaded, so that
  multiple parallel fget runs can be done
* add support for "fgetrc" file?
* add options for analogues of the following wget features:
  -A,  --accept=LIST                list of accepted extensions.
  -R,  --reject=LIST                list of rejected extensions.
  -I,  --include-directories=LIST   list of allowed directories.
  -X,  --exclude-directories=LIST   list of excluded directories.
* seperate out mirroring function from commandline one-shot function ???
* add option for resuming interrupted transfers of large files
* add option to call external program to evaluate whether each file
  should be downloaded ?
  (suggested by Igor Wronsky <iwronsky@users.sourceforge.net>)
* add sanity check to avoid deleting local files if remote directory
  disappears due to a disk failure

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

fftp
====

* new FTP client with readline support, etc (steal code from nph)

