+ update BUGS with important malfeatures from TODO file
###############################################################################
Net::xAP

* literal handling doesn't handle literals that aren't the last item
  on the list.

* the literal handling in the response method should be done with a callback

* need to be able to handle literal+

* the mechanism that getline uses to stuff the literal payload into
  the string that is passed to parse_line needs to be improved.
  currently just tacks it onto the end.  maybe it should tack it into
  the end as a scalar ref and have parse_line look for '{\d+} SCALAR(.*)'.
  that should eliminate the chance of falsely interpreting {\d+} as a
  literal tag in instances where it isn't. make sure it derefs the
  scalar ref when it stuffs it into the list that is to be returned.

* maybe have command failure synthesize a response object to alleviate
  the need to check status of the command method

* there are some things in IMAP that should probably be moved to xAP.

* have as_astring and friends grok stringrefs

* documentation
  * document what a callback is required to do
  * in the docs, mention which methods are intended to be usable by
    end-programmers and which are intended for protocol implementers

+ add ability to spawn server using a 2-way pipe (needed for imap's preauth)

+ add ability to selectively turn on or off debug for individual
  commands and callbacks

+ the $xAP_* variables should be constants
###############################################################################
Net::IMAP

* implement and document prevention of ambiguous multiple pending requests
  + except for FETCH, STORE, and SEARCH, command must wait for a response
    before the following commands can be issued:
      FETCH, STORE, COPY, UID?, SEARCH (partially)
  + fetch -> store involving flags
  + select/examine -> select/examine
  + others, no doubt...

* add some stuff to help process data from fetch response objects

* add methods
  + is_readonly/is_readwrite and others that will prevent the need to
    access internal vars in the imap object.
  + methods for accessing AuthTypes data structure info
  + X* commands
  + trap unknown commands

* need to figure out which commands can result in a [PARSE] response
  code and act accordingly

* figure out best way to handle untagged OK, NO, and BAD responses.
  (user-supplied callback?)

* implement checks for (and/or document) bad practices (per Mark Crispin)
  + don't issue 'LIST "" *' command
  + have STATUS command return failure if issued against an open folder.
  + use STATUS only at the user's request.  There is a reason why
    STATUS information is not part of LIST

* regression tests

* documentation
  + make sure to add comment about using '' instead of '""'
  + make sure docs have an admonition against gratuitous use of
    'LIST "" *' recommend use of 'LIST "" %' as needed instead
  + mention in docs that '*' can be used in a msgset
  + make sure \* in PERMANENTFLAGS is documented
  + make sure related RFCs are mentioned

+ consider some higher level functions than what IMAP provides in the
  protocol:
    fetch a list of all messages

+ try to collapse some of the methods into meta-methods

+ figure out a best way to interface to Mail::Internet and MIME::Entity

+ need a few examples

+ clean up select_callback

+ maybe EXPUNGE response needs to update data in $self

+ add support for some of the optional capabilities
  + LITERAL+
  + IDLE
  + REFERRAL
  + AUTHENTICATE CRAM-MD5
  + ID (need to be able to optionally not use it even it it's available)

+ resp_text can be MIME2 data

+ maybe need to do something to handle modified-utf-7 mailbox names

+ maybe have callbacks do stronger response data arg checking,
  especially arg counts.

+ maybe need to handle X-NON-HIERARCHICAL-RENAME bug in cyrus imapd

+ decide whether we need to handle 'state'
  (non-authenticated, authenticated, selected)

+ date option in append command should be smarter about date string
  passed in

+ make sure case is being ignored on responses from server

+ implement the authenticate command

+ maybe interoperate with older servers

+ is there anything preventing it from being used in off-line mode?
###############################################################################
Net::ACAP

* finish converting ACAP to newer style of callbacks

* parse banner string

* if unsafe chars are present in the user name or authentication
  mechanism ([\s;]) they must be encoded as described in BASE-URL.

* include ability to cancel authentication exchange with a '*' line

+ spec limits size of an atom to 1024

+ NUL octects are only permitted in values of attributes whose names
  end with '.bin'.  client should send non-binary data as valid utf-8 data

+ are there any multiple-pending-commands ambiguities need to be
  accounted for

+ context names must not start with '/'.

+ clients writing to a shared dataset SHOULD use UNCHANGEDSINCE when
  modifying an existing entry.

+ make sure any 'server SHOULD' items aren't a problem if the 'server DOESNT'.

+ clients MUST ignore unknown server responses which meet the syntax
  of response-extend or resp-code-ext.
###############################################################################
Net::IMSP

+ implement core commands
###############################################################################
Net::ICAP

+ implement core commands
###############################################################################
