These are categorized chronologically, but their order also roughly corresponds
to importance in most cases.  Items with names in [[brackets]] before them are
being actively attacked.  Items with names in *{braces}* are finished.
Numbering is sequential.

If you want to add an item, or register to be responsable for or help with one
of these items, please discuss it on the mailing list
(http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python), don't edit
this file directly.

--- TO DO:

000 Documentation.  We have sadly let this project become as arcane as Zope was
    in its early days.  Anybody with free time, please document API calls,
    write tutorials, and generally figure out how this stuff works.

    Specifically weak documentation subsections include:
      * How to write a complex service for PB
      * Identities/Perspectives/Services (Passport & how to use it)
      * Document "how to schedule" (deferred, timeouts and so on)

001 *{Glyph}* Asynchronous Authentication Service.  PB (and similiar) servers
    ought to be able to defer their authentication at least to another PB
    service.  This means that the Authenticator interface has to be revamped to
    use callbacks instead of return values.

002 *{Glyph Lefkowitz}* Configuration Application.  Twisted needs an
    interactive application for exploring and composing the various types of
    services that are available; mktap is not adequate. (this is 
    twisted.manhole.webcoil)

003 [[Paul Swartz]] Integration of TOC and Words.  twisted.protocols.toc ought
    to integrate with twisted.words, so that AIM, IRC, and PB clients can all
    access the same chat "space".

004 [[Moshe Zadka]] Relaying for Twisted.Mail.  Twisted.Mail really ought to be
    a complete sendmail/pop3d/imapd replacement, but currently it's lacking a
    few things.  Those things should be added; relaying is at the top of the
    list but there are other tasks too. Relaying depends on properly doing
    the DNS stuff (030)

005 *{Glyph Lefkowitz}* Twisted.Internet for Jython.  Although Java lacks the
    select() call, JDK 1.4 *does* have an API for doing asynchronous I/O.  Even
    previous to that upgrade, it should be possible to fake it by spawning a
    bunch of threads.  I would probably prefer having the bunch-of-threads
    approach initially since old JVMs are all over the place; however, it would
    certainly be higher performance to have it actually using an asyncio API;
    so I'd like to have both eventually.  I would really like to have the
    Jython Faucet back up and running again.

006 *{Sean Riley}* "Enterprise".  Similiar to WebWare's MiddleKit, it would be
    nice to have a library for object-relational interaction.  Better yet that
    such interaction could be event-based rather than dependant upon blocking
    DB APIs.  This is a nastier problem than it sounds like.

007 *{Glyph Lefkowitz}* Web widgetry.  Twisted.Web ought to have a way of
    assembling pages where bits of the pages can be rendered asynchronously
    (for example, from pb requests or fetched from other URLs) but the resource
    author shouldn't have to manually juggle NOT_DONE_YET requests.
    twisted.web.lmx might aid with this.  Put more simply: web application
    pages should be collections of components, not just flat text generators.

008 File Transfer layer for PB.  This would be especially nice for
    twisted.words; having standard a way to transfer "large" (100MB+) packets
    across or in tandem with a PB connection without breaking anything would be
    very good.

009 [[Itamar]] HEAD and other HTTP subtleties for Twisted.Web.  There are many
    things in the HTTP RFC(s) that Twisted.Web does not do properly and should.
    This could perhaps be broken out into multiple TODO items.

010 Profiling, and possibly C optimization of, twisted.internet.main loop and
    select calls.  There also needs to be some serious load-testing of Twisted
    in this area to discover its limitations.

011 WEBDAV protocol implementation for twisted.web.  A pluggable infrastructure
    would be best, so you could browse different heirarchies (twisted reality
    objects, etc) and edit them.

012 *{Itamar Shtull-Trauring}* Twisted.Internet for wxwindows.  This might be a 
    better cross-platform toolkit solution than tkinter, especially given how
    poorly tkinter works on MacOS.  (At least wxwindows *plans* to support the
    mac...)

013 [[Allen Short]] Destroy the sun.

014 *{Glyph Lefkowitz}* Web authentication widget which combines Passport with
    Web so that asynchronous authentication won't bother web pages. (this is
    twisted.web.guard)

015 [[Itay Ben-Yaacov]] Twisted Names, a full replacement for BIND.

016 *{Glyph Lefkowitz}* Web Session Expiry. (30 minutes seems like a reasonable
    default...)

017 mod_pb, an apache module which allows communication with Twisted servers --
    hopefully compatible with the current twisted.web spread model.

018 Better win32 integration. 

018.1 Support for running twisted servers as WinNT services, with a GUI.

018.2 *{Andrew Bennetts}* twisted.internet support for the win32 event loop as
      provided by win32all.

018.3 GUI startup and system tray icon for twistd process on non-NT machines.

018.4 Generating an installer with distutils that actually installs an icon
      into your start menu to start twistd (running webcoil).

018.5 Performance Monitor export for twisted.metrics.

019 IMAP support, possibly based on alpha code written by Michel Pelletier
    (http://www.zope.org/Members/michel/MyWiki/IMAPServer).

020 NNTP support, server can be based off asyncore code itamar got from Sam
    Rushing (and is known to work with Netscape and Pan).

021 [[Glyph Lefkowitz]] Update GTK IM client to be current with twisted.words.

022 *{Paul Swartz}* Update Tk IM client so it doesn't suck so much.  (There are
    TONS of graphical artifacts and problems with the UI, and the networking
    code seems to flake out around the edges)

023 [[Allen Short]] Emacs integration with PB.

024 *{Glyph Lefkowitz}* Refactor twisted.internet so that there is a
    single defined API for connecting protocols to their transports.
    (listenTCP, listenSSL, connectTCP, connectSSL, etc)

025 *{Glyph Lefkowitz}* Fix C encoder for banana.

026 *{Chris Armstrong}* More ircd-style names for virtual nicks in words; LoginServ (or maybe
    NickServ) instead of *login*.  The asterisks break some clients.

027 Unit testing of I/O code.  There are two possible approaches, both of which
    are probably worthwhile at some point: one is to create a virtual_select
    and virtual_socket module and a dummy application, sending data to
    pre-determined fake FDs.  (Note: this could also work with a virtual_gtk
    module).  Another approach is to create a test framework that starts
    separate client and server processes and compares some condition after both
    have finished running (or times out if they take too long)

028 [[Kevin Turner]] proper DCC and CTCP support for IRCClient.

029 DCC and CTCP parsing for IRCGateway, to allow interactions with clients on
    other protocols. (This depends on 008)

030 [[Moshe Zadka]] DNS
    A. Make sure we can serve DNS correctly (half done)
    B. Make sure we can deal with asking several servers and dealing
       with the answers appropriately
    C. Generate unit tests for encoding/decoding
    D. Figure a user interface for DNS serving
    E. Figure a caching strategy
    F. Write acceptance tests (probably via dig(1))

031 Abstract notion of "a group of people", at a higher level than a chat
    group.

032 Mailman-like mailing list functionality for twisted.mail.

033 [[Glyph Lefkowitz]] Object Migration layer for Twisted Spread.

034 Voice & video streaming for Twisted Words.

035 *{Glyph Lefkowitz}* Asynchronous equivalent to getPerspectiveNamed, so that
    perspectives can be loaded from a database a-la getIdentityRequest.

036 twisted.metrics OS metrics for Linux, FreeBSD, Solaris, etc..

037 twisted.web cookie-based sessions need to be redone in a more secure fashion.
    See http://cookies.lcs.mit.edu/pubs.html for details.

038 *{?}* Integrate mbac's client FTP protocol.

039 Remote log viewing and management PB service in lumberjack package.
