Ticket numbers in this file can be looked up by visiting
http://twistedmatrix.com/trac/ticket/<number>

Twisted Core 10.2.0 (2010-11-29)
================================

Features
--------
 - twisted.internet.cfreactor has been significantly improved.  It now
   runs, and passes, the test suite.  Many, many bugs in it have been
   fixed, including several segfaults, as it now uses PyObjC and
   longer requires C code in Twisted. (#1833)
 - twisted.protocols.ftp.FTPRealm now accepts a parameter to override
   "/home" as the container for user directories.  The new
   BaseFTPRealm class in the same module also allows easy
   implementation of custom user directory schemes. (#2179)
 - twisted.python.filepath.FilePath and twisted.python.zippath.ZipPath
   now have a descendant method to simplify code which calls the child
   method repeatedly. (#3169)
 - twisted.python.failure._Frame objects now support fake f_locals
   attribute. (#4045)
 - twisted.internet.endpoints now has 'serverFromString' and
   'clientFromString' APIs for constructing endpoints from descriptive
   strings. (#4473)
 - The default trial reporter now combines reporting of tests with the
   same result to shorten its summary output. (#4487)
 - The new class twisted.protocols.ftp.SystemFTPRealm implements an
   FTP realm which uses system accounts to select home directories.
   (#4494)
 - twisted.internet.reactor.spawnProcess now wastes less time trying
   to close non-existent file descriptors on POSIX platforms. (#4522)
 - twisted.internet.win32eventreactor now declares that it implements
   a new twisted.internet.interfaces.IReactorWin32Events interface.
   (#4523)
 - twisted.application.service.IProcess now documents its attributes
   using zope.interface.Attribute. (#4534)
 - twisted.application.app.ReactorSelectionMixin now saves the value
   of the --reactor option in the "reactor" key of the options object.
   (#4563)
 - twisted.internet.endpoints.serverFromString and clientFromString,
   and therefore also twisted.application.strports.service, now
   support plugins, so third parties may implement their own endpoint
   types. (#4695)

Bugfixes
--------
 - twisted.internet.defer.Deferred now handles chains iteratively
   instead of recursively, preventing RuntimeError due to excessive
   recursion when handling long Deferred chains. (#411)
 - twisted.internet.cfreactor now works with trial. (#2556)
 - twisted.enterprise.adbapi.ConnectionPool.close may now be called
   even if the connection pool has not yet been started.  This will
   prevent the pool from ever starting. (#2680)
 - twisted.protocols.basic.NetstringReceiver raises
   NetstringParseErrors for  invalid netstrings now. It handles empty
   netstrings ("0:,") correctly, and  the performance for receiving
   netstrings has been improved. (#4378)
 - reactor.listenUDP now returns an object which declares that it
   implements IListeningPort. (#4462)
 - twisted.python.randbytes no longer uses PyCrypto as a secure random
   number source (since it is not one). (#4468)
 - twisted.internet.main.installReactor now blocks installation of
   another reactor when using python -O (#4476)
 - twisted.python.deprecate.deprecatedModuleAttribute now emits only
   one warning when used to deprecate a package attribute which is a
   module. (#4492)
 - The "brief" mode of twisted.python.failure.Failure.getTraceback now
   handles exceptions raised by the underlying exception's __str__
   method. (#4501)
 - twisted.words.xish.domish now correctly parses XML with namespaces
   which include whitespace. (#4503)
 - twisted.names.authority.FileAuthority now generates correct
   negative caching hints, marks its referral NS RRs as non-
   authoritative, and correctly generates referrals for ALL_RECORDS
   requests. (#4513)
 - twisted.internet.test.reactormixins.ReactorBuilder's attribute
   `requiredInterface` (which should an interface) is now
   `requiredInterfaces` (a list of interfaces) as originally described
   per the documentation. (#4527)
 - twisted.python.zippath.ZipPath.__repr__ now correctly formats paths
   with ".." in them (by including it). (#4535)
 - twisted.names.hosts.searchFileFor has been fixed against
   refcounting dependency. (#4540)
 - The POSIX process transports now declare that they implement
   IProcessTransport. (#4585)
 - Twisted can now be built with the LLVM clang compiler, with
   'CC=clang python setup.py build'.  C code that caused errors with
   this compiler has been removed. (#4652)
 - trial now puts coverage data in the path specified by --temp-
   directory, even if that option comes after --coverage on the
   command line. (#4657)
 - The unregisterProducer method of connection-oriented transports
   will now cause the connection to be closed if there was a prior
   call to loseConnection. (#4719)
 - Fixed an issue where the new StreamServerEndpointService didn't log
   listen errors.  (This was a bug not present in any previous
   releases, as this class is new.) (#4731)

Improved Documentation
----------------------
 - The trial man page now documents the meaning of the final line of
   output of the default reporter. (#1384)
 - The API documentation for twisted.internet.defer.DeferredList now
   goes into more depth about the effects each of the __init__ flags
   that class accepts. (#3595)
 - There is now narrative documentation for the endpoints APIs, in the
   'endpoints' core howto, as well as modifications to the 'writing
   clients' and 'writing servers' core howto documents to indicate
   that endpoints are now the preferred style of listening and
   connecting. (#4478)
 - trial's man page now documents the --disablegc option in more
   detail. (#4511)
 - trial's coverage output format is now documented in the trial man
   page. (#4512)
 - Broken links and spelling errors in the finger tutorial are now
   fixed. (#4516)
 - twisted.internet.threads.blockingCallFromThread's docstring is now
   explicit about Deferred support. (#4517)
 - twisted.python.zippath.ZipPath.child now documents its handling of
   ".." (which is not special, making it different from
   FilePath.child). (#4535)
 - The API docs for twisted.internet.defer.Deferred now cover several
   more of its (less interesting) attributes. (#4538)
 - LineReceiver, NetstringReceiver, and IntNStringReceiver from
   twisted.protocols.basic now have improved API documentation for
   read callbacks and write methods. (#4542)
 - Tidied up the Twisted Conch documentation for easier conversion.
   (#4566)
 - Use correct Twisted version for when cancellation was introduced in
   the Deferred docstring. (#4614)
 - The logging howto is now more clear about how the standard library
   logging module and twisted.python.log can be integrated. (#4642)
 - The finger tutorial still had references to .tap files. This
   reference has now been removed. The documentation clarifies
   "finger.tap" is a module and not a filename. (#4679)
 - The finger tutorial had a broken link to the
   twisted.application.service.Service class, which is now fixed.
   Additionally, a minor typo ('verison') was fixed.  (#4681)
 - twisted.protocols.policies.TimeoutMixin now has clearer API
   documentation. (#4684)

Deprecations and Removals
-------------------------
 - twisted.internet.defer.Deferred.setTimeout has been removed, after
   being deprecated since Twisted 2.0. (#1702)
 - twisted.internet.interfaces.IReactorTime.cancelCallLater
   (deprecated since  2007) and
   twisted.internet.interfaces.base.ReactorBase.cancelCallLater
   (deprecated since 2002) have been removed. (#4076)
 - Removed twisted.cred.util.py, which has been deprecated since
   Twisted 8.3. (#4107)
 - twisted.python.text.docstringLStrip was deprecated. (#4328)
 - The module attributes `LENGTH`, `DATA`, `COMMA`, and `NUMBER` of
   twisted.protocols.basic (previously used by `NetstringReceiver`)
   are now deprecated. (#4541)
 - twisted.protocols.basic.SafeNetstringReceiver, deprecated since
   2001 (before Twisted 2.0), was removed. (#4546)
 - twisted.python.threadable.whenThreaded, deprecated since Twisted
   2.2.0, has been removed. (#4550)
 - twisted.python.timeoutqueue, deprecated since Twisted 8.0, has been
   removed. (#4551)
 - iocpreactor transports can no longer be pickled. (#4617)

Other
-----
 - #4300, #4475, #4477, #4504, #4556, #4562, #4564, #4569, #4608,
   #4616, #4617, #4626, #4630, #4650, #4705


Twisted Conch 10.2.0 (2010-11-29)
=================================

Bugfixes
--------
 - twisted.conch.ssh.factory.SSHFactory no longer disables coredumps.
   (#2715)
 - The Deferred returned by twisted.conch.telnet.TelnetTransport.will
   now fires with an OptionRefused failure if the peer responds with a
   refusal for the option negotiation. (#4231)
 - SSHServerTransport and SSHClientTransport in
   twisted.conch.ssh.transport no longer use PyCrypto to generate
   random numbers for DH KEX.  They also now generate values from the
   full valid range, rather than only half of it. (#4469)
 - twisted.conch.ssh.connection.SSHConnection now errbacks leftover
   request deferreds on connection shutdown. (#4483)

Other
-----
 - #4677


Twisted Lore 10.2.0 (2010-11-29)
================================

No significant changes have been made for this release.

Other
-----
 - #4571


Twisted Mail 10.2.0 (2010-11-29)
================================

Improved Documentation
----------------------
 - The email server example now demonstrates how to set up
   authentication and authorization using twisted.cred. (#4609)

Deprecations and Removals
-------------------------
 - twisted.mail.smtp.sendEmail, deprecated since mid 2003 (before
   Twisted 2.0), has been removed. (#4529)

Other
-----
 - #4038, #4572


Twisted Names 10.2.0 (2010-11-29)
=================================

Features
--------
 - twisted.names.server can now serve SPF resource records using
   twisted.names.dns.Record_SPF.  twisted.names.client can query for
   them using lookupSenderPolicy.   (#3928)

Bugfixes
--------
 - twisted.names.common.extractRecords doesn't try to close the
   transport anymore in case of recursion, as it's done by the
   Resolver itself now. (#3998)

Improved Documentation
----------------------
 - Tidied up the Twisted Names documentation for easier conversion.
   (#4573)


Twisted News 10.2.0 (2010-11-29)
================================

Bugfixes
--------
 - twisted.news.database.PickleStorage now invokes the email APIs
   correctly, allowing it to actually send moderation emails. (#4528)


Twisted Pair 10.2.0 (2010-11-29)
================================

No significant changes have been made for this release.


Twisted Runner 10.2.0 (2010-11-29)
==================================

No significant changes have been made for this release.


Twisted Web 10.2.0 (2010-11-29)
===============================

Features
--------
 - twisted.web.xmlrpc.XMLRPC.xmlrpc_* methods can now be decorated
   using withRequest to cause them to be passed the HTTP request
   object. (#3073)

Bugfixes
--------
 - twisted.web.xmlrpc.QueryProtocol.handleResponse now disconnects
   from the server, meaning that Twisted XML-RPC clients disconnect
   from the server as soon as they receive a response, rather than
   relying on the server to disconnect. (#2518)
 - twisted.web.twcgi now generates responses containing all
   occurrences of duplicate headers produced by CGI scripts, not just
   the last value. (#4742)

Deprecations and Removals
-------------------------
 - twisted.web.trp, which has been deprecated since Twisted 9.0, was
   removed. (#4299)

Other
-----
 - #4576, #4577, #4709, #4723


Twisted Words 10.2.0 (2010-11-29)
=================================

Features
--------
 - twisted.words.protocols.irc.IRCClient.msg now enforces a maximum
   length for messages, splitting up messages that are too long.
   (#4416)

Bugfixes
--------
 - twisted.words.protocols.irc.IRCClient no longer invokes privmsg()
   in the default noticed() implementation. (#4419)
 - twisted.words.im.ircsupport.IRCProto now sends the correct name in
   the USER command. (#4641)

Deprecations and Removals
-------------------------
 - Remove twisted.words.im.proxyui and twisted.words.im.tap. (#1823)


Twisted Core 10.1.0 (2010-06-27)
================================

Features
--------
 - Add linux inotify support, allowing monitoring of file system
   events. (#972)
 - Deferreds now support cancellation. (#990)
 - Added new "endpoint" interfaces in twisted.internet.interfaces,
   which abstractly describe stream transport endpoints which can be
   listened on or connected to.  Implementations for TCP and SSL
   clients and servers are present in twisted.internet.endpoints.
   Notably, client endpoints' connect() methods return cancellable
   Deferreds, so code written to use them can bypass the awkward
   "ClientFactory.clientConnectionFailed" and
   "Connector.stopConnecting" methods, and handle errbacks from or
   cancel the returned deferred, respectively. (#1442)
 - twisted.protocols.amp.Integer's documentation now clarifies that
   integers of arbitrary size are supported and that the wire format
   is a base-10 representation. (#2650)
 - twisted.protocols.amp now includes support for transferring
   timestamps (amp.DateTime) and decimal values (amp.Decimal). (#2651)
 - twisted.protocol.ftp.IWriteFile now has a close() method, which can
   return a Deferred. Previously a STOR command would finish
   immediately upon the receipt of the last byte of the uploaded file.
   With close(), the backend can delay the finish until it has
   performed some other slow action (like storing the data to a
   virtual filesystem). (#3462)
 - FilePath now calls os.stat() only when new status information is
   required, rather than immediately when anything changes.  For some
   applications this may result in fewer stat() calls.  Additionally,
   FilePath has a new method, 'changed', which applications may use to
   indicate that the FilePath may have been changed on disk and
   therefore the next status information request must  fetch a new
   stat result.  This is useful if external systems, such as C
   libraries, may have changed files that Twisted applications are
   referencing via a FilePath. (#4130)
 - Documentation improvements are now summarized in the NEWS file.
   (#4224)
 - twisted.internet.task.deferLater now returns a cancellable
   Deferred. (#4318)
 - The connect methods of twisted.internet.protocol.ClientCreator now
   return cancellable Deferreds. (#4329)
 - twisted.spread.pb now has documentation covering some of its
   limitations. (#4402)
 - twisted.spread.jelly now supports jellying and unjellying classes
   defined with slots if they also implement __getstate__ and
   __setstate__. (#4430)
 - twisted.protocols.amp.ListOf arguments can now be specified as
   optional. (#4474)

Bugfixes
--------
 - On POSIX platforms, reactors now support child processes in a way
   which doesn't cause other syscalls to sometimes fail with EINTR (if
   running on Python 2.6 or if Twisted's extension modules have been
   built). (#733)
 - Substrings are escaped before being passed to a regular expression
   for searching to ensure that they don't get interpreted as part of
   the expression. (#1893)
 - twisted.internet.stdio now supports stdout being redirected to a
   normal file (except when using epollreactor). (#2259)
 -  (#2367)
 - The tap2rpm script now works with modern versions of RPM. (#3292)
 - twisted.python.modules.walkModules will now handle packages
   explicitly precluded from importing by a None placed in
   sys.modules. (#3419)
 - ConnectedDatagramPort now uses stopListening when a connection
   fails instead of the deprecated loseConnection. (#3425)
 - twisted.python.filepath.FilePath.setContent is now safe for
   multiple processes to use concurrently. (#3694)
 - The mode argument to the methods of
   twisted.internet.interfaces.IReactorUNIX is no longer deprecated.
   (#4078)
 - Do not include blacklisted projects when generating NEWS. (#4190)
 - When generating NEWS for a project that had no significant changes,
   include a section for that project and say that there were no
   interesting changes. (#4191)
 - Redundant 'b' mode is no longer passed to calls to FilePath.open
   and FilePath.open itself now corrects the mode when multiple 'b'
   characters are present, ensuring only one instance of 'b' is
   provided, as a workaround for http://bugs.python.org/issue7686.
   (#4207)
 - HTML tags inside <pre> tags in the code snippets are now escaped.
   (#4336)
 - twisted.protocols.amp.CommandLocator now allows subclasses to
   override responders inherited from base classes. (#4343)
 - Fix a bunch of small but important defects in the INSTALL, README
   and so forth. (#4346)
 - The poll, epoll, glib2, and gtk2 reactors now all support half-
   close in the twisted.internet.stdio.StandardIO transport. (#4352)
 - twisted.application.internet no longer generates an extra and
   invalid entry in its __all__ list for the nonexistent
   MulticastClient. (#4373)
 - Choosing a reactor documentation now says that only the select-
   based reactor is a truly cross-platform reactor. (#4384)
 - twisted.python.filepath.FilePath now no longer leaves files open,
   to be closed by the garbage collector, when an exception is raised
   in the implementation of setContent, getContent, or copyTo. (#4400)
 - twisted.test.proto_helpers.StringTransport's getHost and getPeer
   methods now return IPv4Address instances by default. (#4401)
 - twisted.protocols.amp.BinaryBoxProtocol will no longer deliver an
   empty string to a switched-to protocol's dataReceived method when
   the BinaryBoxProtocol's buffer happened to be empty at the time of
   the protocol switch. (#4405)
 - IReactorUNIX.listenUNIX implementations now support abstract
   namespace sockets on Linux. (#4421)
 - Files opened with FilePath.create() (and therefore also files
   opened via FilePath.open() on a path with alwaysCreate=True) will
   now be opened in binary mode as advertised, so that they will
   behave portably across platforms. (#4453)
 - The subunit reporter now correctly reports import errors as errors,
   rather than by crashing with an unrelated error. (#4496)

Improved Documentation
----------------------
 - The finger tutorial example which introduces services now avoids
   double-starting the loop to re-read its users file. (#4420)
 - twisted.internet.defer.Deferred.callback's docstring now mentions
   the implicit chaining feature. (#4439)
 - doc/core/howto/listing/pb/chatclient.py can now actually send a
   group message. (#4459)

Deprecations and Removals
-------------------------
 - twisted.internet.interfaces.IReactorArbitrary,
   twisted.application.internet.GenericServer, and
   twisted.application.internet.GenericClient are now deprecated.
   (#367)
 - twisted.internet.gtkreactor is now deprecated. (#2833)
 - twisted.trial.util.findObject has been deprecated. (#3108)
 - twisted.python.threadpool.ThreadSafeList is deprecated and Jython
   platform detection in Twisted core removed (#3725)
 - twisted.internet.interfaces.IUDPConnectedTransport has been removed
   (deprecated since Twisted 9.0). (#4077)
 - Removed twisted.application.app.runWithProfiler, which has been
   deprecated since Twisted 8.0. (#4090)
 - Removed twisted.application.app.runWithHotshot, which has been
   deprecated since Twisted 8.0. (#4091)
 - Removed twisted.application.app.ApplicationRunner.startLogging,
   which has been deprecated (doesn't say since when), as well as
   support for the legacy
   twisted.application.app.ApplicationRunner.getLogObserver method.
   (#4092)
 - twisted.application.app.reportProfile has been removed. (#4093)
 - twisted.application.app.getLogFile has been removed. (#4094)
 - Removed twisted.cred.util.py, which has been deprecated since
   Twisted 8.3. (#4107)
 - twisted.python.util.dsu is now deprecated. (#4339)
 - In twisted.trial.util: FailureError, DirtyReactorWarning,
   DirtyReactorError, and PendingTimedCallsError, which have all been
   deprecated since Twisted 8.0, have been removed. (#4505)

Other
-----
 - #1363, #1742, #3170, #3359, #3431, #3738, #4088, #4206, #4221,
   #4239, #4257, #4272, #4274, #4287, #4291, #4293, #4309, #4316,
   #4319, #4324, #4332, #4335, #4348, #4358, #4394, #4399, #4409,
   #4418, #4443, #4449, #4479, #4485, #4486, #4497


Twisted Conch 10.1.0 (2010-06-27)
=================================

Features
--------
 - twisted.conch.ssh.transport.SSHTransportBase now allows supported
   ssh protocol versions to be overriden. (#4428)

Bugfixes
--------
 - SSHSessionProcessProtocol now doesn't close the session when stdin
   is closed, but instead when both stdout and stderr are. (#4350)
 - The 'cftp' command-line tool will no longer encounter an
   intermittent error, crashing at startup with a ZeroDivisionError
   while trying to report progress. (#4463)
 - twisted.conch.ssh.connection.SSHConnection now replies to requests
   to open an unknown channel with a OPEN_UNKNOWN_CHANNEL_TYPE message
   instead of closing the connection. (#4490)

Deprecations and Removals
-------------------------
 - twisted.conch.insults.client was deprecated. (#4095)
 - twisted.conch.insults.colors has been deprecated.  Please use
   twisted.conch.insults.helper instead. (#4096)
 - Removed twisted.conch.ssh.asn1, which has been deprecated since
   Twisted 9.0. (#4097)
 - Removed twisted.conch.ssh.common.Entropy, as Entropy.get_bytes has
   been  deprecated since 2007 and Entropy.get_bytes was the only
   attribute of Entropy. (#4098)
 - Removed twisted.conch.ssh.keys.getPublicKeyString, which has been
   deprecated since 2007.  Also updated the conch examples
   sshsimpleserver.py and sshsimpleclient.py to reflect this removal.
   (#4099)
 - Removed twisted.conch.ssh.keys.makePublicKeyString, which has been
   deprecated since 2007. (#4100)
 - Removed twisted.conch.ssh.keys.getPublicKeyObject, which has been
   deprecated since 2007. (#4101)
 - Removed twisted.conch.ssh.keys.getPrivateKeyObject, which has been
   deprecated since 2007.  Also updated the conch examples to reflect
   this removal. (#4102)
 - Removed twisted.conch.ssh.keys.makePrivateKeyString, which has been
   deprecated since 2007. (#4103)
 - Removed twisted.conch.ssh.keys.makePublicKeyBlob, which has been
   deprecated since 2007. (#4104)
 - Removed twisted.conch.ssh.keys.signData,
   twisted.conch.ssh.keys.verifySignature, and
   twisted.conch.ssh.keys.printKey, which have been deprecated since
   2007.   (#4105)

Other
-----
 - #3849, #4408, #4454


Twisted Lore 10.1.0 (2010-06-27)
================================

No significant changes have been made for this release.


Twisted Mail 10.1.0 (2010-06-27)
================================

Bugfixes
--------
 - twisted.mail.imap4.IMAP4Server no longer fails on search queries
   that contain wildcards. (#2278)
 - A case which would cause twisted.mail.imap4.IMAP4Server to loop
   indefinitely when handling a search command has been fixed. (#4385)

Other
-----
 - #4069, #4271, #4467


Twisted Names 10.1.0 (2010-06-27)
=================================

Features
--------
 - twisted.names.dns.Message now uses a specially constructed
   dictionary for looking up record types.  This yields a significant
   performance improvement on PyPy. (#4283)


Twisted News 10.1.0 (2010-06-27)
================================

No significant changes have been made for this release.


Twisted Pair 10.1.0 (2010-06-27)
================================

No significant changes have been made for this release.


Twisted Runner 10.1.0 (2010-06-27)
==================================

Features
--------
 - twistd now has a procmon subcommand plugin - a convenient way to
   monitor and automatically restart another process. (#4356)

Deprecations and Removals
-------------------------
 - twisted.runner.procmon.ProcessMonitor's active, consistency, and
   consistencyDelay attributes are now deprecated. (#1763)

Other
-----
 - #3775


Twisted Web 10.1.0 (2010-06-27)
===============================

Features
--------
 - twisted.web.xmlrpc.XMLRPC and twisted.web.xmlrpc.Proxy now expose
   xmlrpclib's support of datetime.datetime objects if useDateTime is
   set to True. (#3219)
 - HTTP11ClientProtocol now has an abort() method for cancelling an
   outstanding request by closing the connection before receiving the
   entire response. (#3811)
 - twisted.web.http_headers.Headers initializer now rejects
   incorrectly structured dictionaries. (#4022)
 - twisted.web.client.Agent now supports HTTPS URLs. (#4023)
 - twisted.web.xmlrpc.Proxy.callRemote now returns a Deferred which
   can be cancelled to abort the attempted XML-RPC call. (#4377)

Bugfixes
--------
 - twisted.web.guard now logs out avatars even if a request completes
   with an error. (#4411)
 - twisted.web.xmlrpc.XMLRPC will now no longer trigger a RuntimeError
   by trying to write responses to closed connections. (#4423)

Improved Documentation
----------------------
 - Fix broken links to deliverBody and iweb.UNKNOWN_LENGTH in
   doc/web/howto/client.xhtml. (#4507)

Deprecations and Removals
-------------------------
 - twisted.web.twcgi.PHP3Script and twisted.web.twcgi.PHPScript are
   now deprecated. (#516)

Other
-----
 - #4403, #4452


Twisted Words 10.1.0 (2010-06-27)
=================================

Bugfixes
--------
 - twisted.words.im.basechat.ChatUI now has a functional
   contactChangedNick with unit tests. (#229)
 - twisted.words.protocols.jabber.error.StanzaError now correctly sets
   a default error type and code for the remote-server-timeout
   condition (#4311)
 - twisted.words.protocols.jabber.xmlstream.ListenAuthenticator now
   uses unicode objects for session identifiers (#4345)


Twisted Core 10.0.0 (2010-03-01)
================================

Features
--------
 - The twistd man page now has a SIGNALS section. (#689)

 - reactor.spawnProcess now will not emit a PotentialZombieWarning
   when called before reactor.run, and there will be no potential for
   zombie processes in this case. (#2078)

 - High-throughput applications based on Perspective Broker should now
   run noticably faster thanks to the use of a more efficient decoding
   function in Twisted Spread. (#2310)

 - Documentation for trac-post-commit-hook functionality in svn-dev
   policy. (#3867)

 - twisted.protocols.socks.SOCKSv4 now supports the SOCKSv4a protocol.
   (#3886)

 - Trial can now output test results according to the subunit
   protocol, as long as Subunit is installed (see
   https://launchpad.net/subunit). (#4004)

 - twisted.protocols.amp now provides a ListOf argument type which can
   be composed with some other argument types to create a zero or more
   element sequence of that type. (#4116)

 - If returnValue is invoked outside of a function decorated with
   @inlineCallbacks, but causes a function thusly decorated to exit, a
   DeprecationWarning will be emitted explaining this potentially
   confusing behavior.  In a future release, this will cause an
   exception. (#4157)

 - twisted.python.logfile.BaseLogFile now has a reopen method allowing
   you to use an external logrotate mechanism. (#4255)

Bugfixes
--------
 - FTP.ftp_NLST now handles requests on invalid paths in a way
   consistent with RFC 959. (#1342)

 - twisted.python.util.initgroups now calls the low-level C initgroups
   by default if available: the python version can create lots of I/O
   with certain authentication setup to retrieve all the necessary
   information. (#3226)

 - startLogging now does nothing on subsequent invocations, thus
   fixing a terrible infinite recursion bug that's only on edge case.
   (#3289)

 - Stringify non-string data to NetstringReceiver.sendString before
   calculating the length so that the calculated length is equal to
   the actual length of the transported data. (#3299)

 - twisted.python.win32.cmdLineQuote now correctly quotes empty
   strings arguments (#3876)

 - Change the behavior of the Gtk2Reactor to register only one source
   watch for each file descriptor, instead of one for reading and one
   for writing. In particular, it fixes a bug with Glib under Windows
   where we failed to notify when a client is connected. (#3925)

 - Twisted Trial no longer crashes if it can't remove an old
   _trial_temp directory.  (#4020)

 - The optional _c_urlarg extension now handles unquote("") correctly
   on platforms where malloc(0) returns NULL, such as AIX.  It also
   compiles with less warnings. (#4142)

 - On POSIX, child processes created with reactor.spawnProcess will no
   longer automatically ignore the signals which the parent process
   has set to be ignored. (#4199)

 - All SOCKSv4a tests now use a dummy reactor with a deterministic
   resolve method. (#4275)

 - Prevent extraneous server, date and content-type headers in proxy
   responses. (#4277)

Deprecations and Removals
-------------------------
 - twisted.internet.error.PotentialZombieWarning is now deprecated.
   (#2078)

 - twisted.test.time_helpers is now deprecated. (#3719)

 - The deprecated connectUDP method of IReactorUDP has now been
   removed. (#4075)

 - twisted.trial.unittest.TestCase now ignores the previously
   deprecated setUpClass and tearDownClass methods. (#4175)

Other
-----
 - #917, #2406, #2481, #2608, #2689, #2884, #3056, #3082, #3199,
   #3480, #3592, #3718, #3935, #4066, #4083, #4154, #4166, #4169,
   #4176, #4183, #4186, #4188, #4189, #4194, #4201, #4204, #4209,
   #4222, #4234, #4235, #4238, #4240, #4245, #4251, #4264, #4268,
   #4269, #4282


Twisted Conch 10.0.0 (2010-03-01)
=================================

Bugfixes
--------
 - twisted.conch.checkers.SSHPublicKeyDatabase now looks in the
   correct user directory for authorized_keys files. (#3984)
 - twisted.conch.ssh.SSHUserAuthClient now honors preferredOrder when
   authenticating. (#4266)

Other
-----
 - #2391, #4203, #4265


Twisted Lore 10.0.0 (2010-03-01)
================================

Other
-----
 - #4241


Twisted Mail 10.0.0 (2010-03-01)
================================

Bugfixes
--------
 - twisted.mail.smtp.ESMTPClient and
   twisted.mail.smtp.LOGINAuthenticator now implement the (obsolete)
   LOGIN SASL mechanism according to the draft specification. (#4031)

 - twisted.mail.imap4.IMAP4Client will no longer misparse all html-
   formatted message bodies received in response to a fetch command.
   (#4049)

 - The regression in IMAP4 search handling of "OR" and "NOT" terms has
   been fixed. (#4178)

Other
-----
 - #4028, #4170, #4200


Twisted Names 10.0.0 (2010-03-01)
=================================

Bugfixes
--------
 - twisted.names.root.Resolver no longer leaks UDP sockets while
   resolving names. (#970)

Deprecations and Removals
-------------------------
 - Several top-level functions in twisted.names.root are now
   deprecated. (#970)

Other
-----
 - #4066


Twisted Pair 10.0.0 (2010-03-01)
================================

Other
-----
 - #4170


Twisted Runner 10.0.0 (2010-03-01)
==================================

Other
-----
 - #3961


Twisted Web 10.0.0 (2010-03-01)
===============================

Features
--------
 - Twisted Web in 60 Seconds, a series of short tutorials with self-
   contained examples on a range of common web topics, is now a part
   of the Twisted Web howto documentation. (#4192)

Bugfixes
--------
 - Data and File from twisted.web.static and
   twisted.web.distrib.UserDirectory will now only generate a 200
   response for GET or HEAD requests.
   twisted.web.client.HTTPPageGetter will no longer ignore the case of
   a request method when considering whether to apply special HEAD
   processing to a response. (#446)

 - twisted.web.http.HTTPClient now supports multi-line headers.
   (#2062)

 - Resources served via twisted.web.distrib will no longer encounter a
   Banana error when writing more than 640kB at once to the request
   object. (#3212)

 - The Error, PageRedirect, and InfiniteRedirection exception in
   twisted.web now initialize an empty message parameter by mapping
   the HTTP status code parameter to a descriptive string. Previously
   the lookup would always fail, leaving message empty.  (#3806)

 - The 'wsgi.input' WSGI environment object now supports -1 and None
   as arguments to the read and readlines methods. (#4114)

 - twisted.web.wsgi doesn't unquote QUERY_STRING anymore, thus
   complying with the WSGI reference implementation. (#4143)

 - The HTTP proxy will no longer pass on keep-alive request headers
   from the client, preventing pages from loading then "hanging"
   (leaving the connection open with no hope of termination). (#4179)

Deprecations and Removals
-------------------------
 - Remove '--static' option from twistd web, that served as an alias
   for the '--path' option. (#3907)

Other
-----
 - #3784, #4216, #4242


Twisted Words 10.0.0 (2010-03-01)
=================================

Features
--------
 - twisted.words.protocols.irc.IRCClient.irc_MODE now takes ISUPPORT
   parameters into account when parsing mode messages with arguments
   that take parameters (#3296)

Bugfixes
--------
 - When twisted.words.protocols.irc.IRCClient's versionNum and
   versionEnv attributes are set to None, they will no longer be
   included in the client's response to CTCP VERSION queries. (#3660)

 - twisted.words.protocols.jabber.xmlstream.hashPassword now only
   accepts unicode as input (#3741, #3742, #3847)

Other
-----
 - #2503, #4066, #4261


Twisted Core 9.0.0 (2009-11-24)
===============================

Features
--------
 - LineReceiver.clearLineBuffer now returns the bytes that it cleared (#3573)
 - twisted.protocols.amp now raises InvalidSignature when bad arguments are
   passed to Command.makeArguments (#2808)
 - IArgumentType was added to represent an existing but previously unspecified
   interface in amp (#3468)
 - Obscure python tricks have been removed from the finger tutorials (#2110)
 - The digest auth implementations in twisted.web and twisted.protocolos.sip
   have been merged together in twisted.cred (#3575)
 - FilePath and ZipPath now has a parents() method which iterates up all of its
   parents (#3588)
 - reactors which support threads now have a getThreadPool method (#3591)
 - The MemCache client implementation now allows arguments to the "stats"
   command (#3661)
 - The MemCache client now has a getMultiple method which allows fetching of
   multiple values (#3171)
 - twisted.spread.jelly can now unserialize some new-style classes (#2950)
 - twisted.protocols.loopback.loopbackAsync now accepts a parameter to control
   the data passed between client and server (#3820)
 - The IOCP reactor now supports SSL (#593)
 - Tasks in a twisted.internet.task.Cooperator can now be paused, resumed, and
   cancelled (#2712)
 - AmpList arguments can now be made optional (#3891)
 - The syslog output observer now supports log levels (#3300)
 - LoopingCall now supports reporting the number of intervals missed if it
   isn't able to schedule calls fast enough (#3671)

Fixes
-----
 - The deprecated md5 and sha modules are no longer used if the stdlib hashlib
   module is available (#2763)
 - An obscure deadlock involving waking up the reactor within signal handlers
   in particular threads was fixed (#1997)
 - The passivePortRange attribute of FTPFactory is now honored (#3593)
 - TestCase.flushWarnings now flushes warnings even if they were produced by a
   file that was renamed since it was byte compiled (#3598)
 - Some internal file descriptors are now marked as close-on-exec, so these will
   no longer be leaked to child processes (#3576)
 - twisted.python.zipstream now correctly extracts the first file in a directory
   as a file, and not an empty directory (#3625)
 - proxyForInterface now returns classes which correctly *implement* interfaces
   rather than *providing* them (#3646)
 - SIP Via header parameters should now be correctly generated (#2194)
 - The Deferred returned by stopListening would sometimes previously never fire
   if an exception was raised by the underlying file descriptor's connectionLost
   method. Now the Deferred will fire with a failure (#3654)
 - The command-line tool "manhole" should now work with newer versions of pygtk
   (#2464)
 - When a DefaultOpenSSLContextFactory is instantiated with invalid parameters,
   it will now raise an exception immediately instead of waiting for the first
   connection (#3700)
 - Twisted command line scripts should now work when installed in a virtualenv
   (#3750)
 - Trial will no longer delete temp directories which it did not create (#3481)
 - Processes started on Windows should now be cleaned up properly in more cases
   (#3893)
 - Certain misbehaving importers will no longer cause twisted.python.modules
   (and thus trial) to raise an exception, but rather issue a warning (#3913)
 - MemCache client protocol methods will now fail when the transport has been
   disconnected (#3643)
 - In the AMP method callRemoteString, the requiresAnswer parameter is now
   honored (#3999)
 - Spawning a "script" (a file which starts with a #! line) on Windows running
   Python 2.6 will now work instead of raising an exception about file mode
   "ru" (#3567)
 - FilePath's walk method now calls its "descend" parameter even on the first
   level of children, instead of only on grandchildren. This allows for better
   symlink cycle detection (#3911)
 - Attempting to write unicode data to process pipes on Windows will no longer
   result in arbitrarily encoded messages being written to the pipe, but instead
   will immediately raise an error (#3930)
 - The various twisted command line utilities will no longer print
   ModuleType.__doc__ when Twisted was installed with setuptools (#4030)
 - A Failure object will now be passed to connectionLost on stdio connections
   on Windows, instead of an Exception object (#3922)

Deprecations and Removals
-------------------------
 - twisted.persisted.marmalade was deleted after a long period of deprecation
   (#876)
 - Some remaining references to the long-gone plugins.tml system were removed
   (#3246)
 - SSLv2 is now disabled by default, but it can be re-enabled explicitly
   (#3330)
 - twisted.python.plugin has been removed (#1911)
 - reactor.run will now raise a ReactorAlreadyRunning exception when it is
   called reentrantly instead of warning a DeprecationWarning (#1785)
 - twisted.spread.refpath is now deprecated because it is unmaintained,
   untested, and has dubious value (#3723)
 - The unused --quiet flag has been removed from the twistd command (#3003)

Other
-----
 - #3545, #3490, #3544, #3537, #3455, #3315, #2281, #3564, #3570, #3571, #3486,
   #3241, #3599, #3220, #1522, #3611, #3596, #3606, #3609, #3602, #3637, #3647,
   #3632, #3675, #3673, #3686, #2217, #3685, #3688, #2456, #506, #3635, #2153,
   #3581, #3708, #3714, #3717, #3698, #3747, #3704, #3707, #3713, #3720, #3692,
   #3376, #3652, #3695, #3735, #3786, #3783, #3699, #3340, #3810, #3822, #3817,
   #3791, #3859, #2459, #3677, #3883, #3894, #3861, #3822, #3852, #3875, #2722,
   #3768, #3914, #3885, #2719, #3905, #3942, #2820, #3990, #3954, #1627, #2326,
   #2972, #3253, #3937, #4058, #1200, #3639, #4079, #4063, #4050


Twisted Conch 9.0.0 (2009-11-24)
================================

Fixes
-----
 - The SSH key parser has been removed and conch now uses pyASN1 to parse keys.
   This should fix a number of cases where parsing a key would fail, but it now
   requires users to have pyASN1 installed (#3391)
 - The time field on SFTP file listings should now be correct (#3503)
 - The day field on SFTP file listings should now be correct on Windows (#3503)
 - The "cftp" sftp client now truncates files it is uploading over (#2519)
 - The telnet server protocol can now properly respond to subnegotiation
   requests (#3655)
 - Tests and factoring of the SSHv2 server implementation are now much better
   (#2682)
 - The SSHv2 server now sends "exit-signal" messages to the client, instead of
   raising an exception, when a process dies due to a signal (#2687)
 - cftp's client-side "exec" command now uses /bin/sh if the current user has
   no shell (#3914)

Deprecations and Removals
-------------------------
 - The buggy SSH connection sharing feature of the SSHv2 client was removed
   (#3498)
 - Use of strings and PyCrypto objects to represent keys is deprecated in favor
   of using Conch Key objects (#2682)

Other
-----
 - #3548, #3537, #3551, #3220, #3568, #3689, #3709, #3809, #2763, #3540, #3750,
   #3897, #3813, #3871, #3916, #4047, #3940, #4050


Twisted Lore 9.0.0 (2009-11-24)
===============================

Features
--------
 - Python source listings now include line numbers (#3486)

Fixes
-----
 - Lore now uses minidom instead of Twisted's microdom, which incidentally
   fixes some Lore bugs such as throwing away certain whitespace
   (#3560, #414, #3619)
 - Lore's "lint" command should no longer break on documents with links in them
   (#4051, #4115)

Deprecations and Removals
-------------------------
 - Lore no longer uses the ancient "tml" Twisted plugin system (#1911)

Other
-----
 - #3565, #3246, #3540, #3750, #4050


Twisted Mail 9.0.0 (2009-11-24)
===============================

Features
--------
 - maildir.StringListMailbox, an in-memory maildir mailbox, now supports
   deletion, undeletion, and syncing (#3547)
 - SMTPClient's callbacks are now more completely documented (#684)

Fixes
-----
 - Parse UNSEEN response data and include it in the result of
   IMAP4Client.examine (#3550)
 - The IMAP4 client now delivers more unsolicited server responses to callbacks
   rather than ignoring them, and also won't ignore solicited responses that
   arrive on the same line as an unsolicited one (#1105)
 - Several bugs in the SMTP client's idle timeout support were fixed (#3641,
   #1219)
 - A case where the SMTP client could skip some recipients when retrying
   delivery has been fixed (#3638)
 - Errors during certain data transfers will no longer be swallowed. They will
   now bubble up to the higher-level API (such as the sendmail function) (#3642)
 - Escape sequences inside quoted strings in IMAP4 should now be parsed
   correctly by the IMAP4 server protocol (#3659)
 - The "imap4-utf-7" codec that is registered by twisted.mail.imap4 had a number
   of fixes that allow it to work better with the Python codecs system, and to
   actually work (#3663)
 - The Maildir implementation now ensures time-based ordering of filenames so
   that the lexical sorting of messages matches the order in which they were
   received (#3812)
 - SASL PLAIN credentials generated by the IMAP4 protocol implementations
   (client and server) should now be RFC-compliant (#3939)
 - Searching for a set of sequences using the IMAP4 "SEARCH" command should 
   now work on the IMAP4 server protocol implementation. This at least improves
   support for the Pine mail client (#1977)

Other
-----
 - #2763, #3647, #3750, #3819, #3540, #3846, #2023, #4050


Twisted Names 9.0.0 (2009-11-24)
================================

Deprecations and Removals
-------------------------
 - client.ThreadedResolver is deprecated in favor of
   twisted.internet.base.ThreadedResolver (#3710)

Other
-----
 - #3540, #3560, #3712, #3750, #3990


Twisted News 9.0.0 (2009-11-24)
===============================

Other
-----
 - #2763, #3540


Twisted Pair 9.0.0 (2009-11-24)
===============================

Other
-----
 - #3540, #4050


Twisted Runner 9.0.0 (2009-11-24)
=================================

Features
--------
 - procmon.ProcessMonitor.addProcess now accepts an 'env' parameter which allows
   users to specify the environment in which a process will be run (#3691)

Other
-----
 - #3540


Twisted Web 9.0.0 (2009-11-24)
==============================

Features
--------
 - There is now an iweb.IRequest interface which specifies the interface that
   request objects provide (#3416)
 - downloadPage now supports the same cookie, redirect, and timeout features
   that getPage supports (#2971)
 - A chapter about WSGI has been added to the twisted.web documentation (#3510)
 - The HTTP auth support in the web server now allows anonymous sessions by
   logging in with ANONYMOUS credentials when no Authorization header is
   provided in a request (#3924, #3936)
 - HTTPClientFactory now accepts a parameter to enable a common deviation from
   the HTTP 1.1 standard by responding to redirects in a POSTed request with a
   GET instead of another POST (#3624)
 - A new basic HTTP/1.1 client API is included in twisted.web.client.Agent
   (#886, #3987)

Fixes
-----
 - Requests for "insecure" children of a static.File (such as paths containing
   encoded directory separators) will now result in a 404 instead of a 500
   (#3549, #3469)
 - When specifying a followRedirect argument to the getPage function, the state
   of redirect-following for other getPage calls should now be unaffected.  It
   was previously overwriting a class attribute which would affect outstanding
   getPage calls (#3192)
 - Downloading an URL of the form "http://example.com:/" will now work,
   ignoring the extraneous colon (#2402)
 - microdom's appendChild method will no longer issue a spurious warning, and
   microdom's methods in general should now issue more meaningful exceptions
   when invalid parameters are passed (#3421)
 - WSGI applications will no longer have spurious Content-Type headers added to
   their responses by the twisted.web server. In addition, WSGI applications
   will no longer be able to specify the server-restricted headers Server and
   Date (#3569)
 - http_headers.Headers now normalizes the case of raw headers passed directly
   to it in the same way that it normalizes the headers passed to setRawHeaders
   (#3557)
 - The distrib module no longer relies on the deprecated woven package (#3559)
 - twisted.web.domhelpers now works with both microdom and minidom (#3600)
 - twisted.web servers will now ignore invalid If-Modified-Since headers instead
   of returning a 500 error (#3601)
 - Certain request-bound memory and file resources are cleaned up slightly
   sooner by the request when the connection is lost (#1621, #3176)
 - xmlrpclib.DateTime objects should now correctly round-trip over twisted.web's
   XMLRPC support in all supported versions of Python, and errors during error
   serialization will no longer hang a twisted.web XMLRPC response (#2446)
 - request.content should now always be seeked to the beginning when
   request.process is called, so application code should never need to seek 
   back manually (#3585)
 - Fetching a child of static.File with a double-slash in the URL (such as
   "example//foo.html") should now return a 404 instead of a traceback and
   500 error (#3631)
 - downloadPage will now fire a Failure on its returned Deferred instead of
   indicating success when the connection is prematurely lost (#3645)
 - static.File will now provide a 404 instead of a 500 error when it was
   constructed with a non-existent file (#3634)
 - microdom should now serialize namespaces correctly (#3672)
 - The HTTP Auth support resource wrapper should no longer corrupt requests and
   cause them to skip a segment in the request path (#3679)
 - The twisted.web WSGI support should now include leading slashes in PATH_INFO,
   and SCRIPT_NAME will be empty if the application is at the root of the
   resource tree. This means that WSGI applications should no longer generate
   URLs with double-slashes in them even if they naively concatenate the values
   (#3721)
 - WSGI applications should now receive the requesting client's IP in the
   REMOTE_ADDR environment variable (#3730)
 - The distrib module should work again. It was unfortunately broken with the
   refactoring of twisted.web's header support (#3697)
 - static.File now supports multiple ranges specified in the Range header
   (#3574)
 - static.File should now generate a correct Content-Length value when the
   requested Range value doesn't fit entirely within the file's contents (#3814)
 - Attempting to call request.finish() after the connection has been lost will
   now immediately raise a RuntimeError (#4013)
 - An HTTP-auth resource should now be able to directly render the wrapped
   avatar, whereas before it would only allow retrieval of child resources
   (#4014)
 - twisted.web's wsgi support should no longer attempt to call request.finish
   twice, which would cause errors in certain cases (#4025)
 - WSGI applications should now be able to handle requests with large bodies
   (#4029)
 - Exceptions raised from WSGI applications should now more reliably be turned
   into 500 errors on the HTTP level (#4019)
 - DeferredResource now correctly passes through exceptions raised from the
   wrapped resource, instead of turning them all into 500 errors (#3932)
 - Agent.request now generates a Host header when no headers are passed at
   (#4131)

Deprecations and Removals
-------------------------
 - The unmaintained and untested twisted.web.monitor module was removed (#2763)
 - The twisted.web.woven package has been removed (#1522)
 - All of the error resources in twisted.web.error are now in
   twisted.web.resource, and accessing them through twisted.web.error is now
   deprecated (#3035)
 - To facilitate a simplification of the timeout logic in server.Session,
   various things have been deprecated (#3457)
   - the loopFactory attribute is now ignored
   - the checkExpired method now does nothing
   - the lifetime parameter to startCheckingExpiration is now ignored
 - The twisted.web.trp module is now deprecated (#2030)

Other
-----
 - #2763, #3540, #3575, #3610, #3605, #1176, #3539, #3750, #3761, #3779, #2677,
   #3782, #3904, #3919, #3418, #3990, #1404, #4050


Twisted Words 9.0.0 (2009-11-24)
================================

Features
--------
 - IRCClient.describe is a new method meant to replace IRCClient.me to send
   CTCP ACTION messages with less confusing behavior (#3910)
 - The XMPP client protocol implementation now supports ANONYMOUS SASL
   authentication (#4067)
 - The IRC client protocol implementation now has better support for the
   ISUPPORT server->client message, storing the data in a new
   ServerSupportedFeatures object accessible via IRCClient.supported (#3285)

Fixes
-----
 - The twisted.words IRC server now always sends an MOTD, which at least makes
   Pidgin able to successfully connect to a twisted.words IRC server (#2385)
 - The IRC client will now dispatch "RPL MOTD" messages received before a
   "RPL MOTD START" instead of raising an exception (#3676)
 - The IRC client protocol implementation no longer updates its 'nickname'
   attribute directly; instead, that attribute will be updated when the server
   acknowledges the change (#3377)
 - The IRC client protocol implementation now supports falling back to another
   nickname when a nick change request fails (#3377, #4010)

Deprecations and Removals
-------------------------
 - The TOC protocol implementation is now deprecated, since the protocol itself
   has been deprecated and obselete for quite a long time (#3580)
 - The gui "im" application has been removed, since it relied on GTK1, which is
   hard to find these days (#3699, #3340)

Other
-----
 - #2763, #3540, #3647, #3750, #3895, #3968, #4050


Core 8.2.0 (2008-12-16)
=======================

Features
--------
 - Reactors are slowly but surely becoming more isolated, thus improving
   testability (#3198)
 - FilePath has gained a realpath method, and FilePath.walk no longer infinitely
   recurses in the case of a symlink causing a self-recursing filesystem tree
   (#3098)
 - FilePath's moveTo and copyTo methods now have an option to disable following
   of symlinks (#3105)
 - Private APIs are now included in the API documentation (#3268)
 - hotshot is now the default profiler for the twistd --profile parameter and
   using cProfile is now documented (#3355, #3356)
 - Process protocols can now implement a processExited method, which is
   distinct from processEnded in that it is called immediately when the child
   has died, instead of waiting for all the file descriptors to be closed
   (#1291)
 - twistd now has a --umask option (#966, #3024)
 - A new deferToThreadPool function exists in twisted.internet.threads (#2845)
 - There is now an example of writing an FTP server in examples/ftpserver.py
   (#1579)
 - A new runAsEffectiveUser function has been added to twisted.python.util
   (#2607)
 - twisted.internet.utils.getProcessOutput now offers a mechanism for
   waiting for the process to actually end, in the event of data received on
   stderr (#3239)
 - A fullyQualifiedName function has been added to twisted.python.reflect
   (#3254)
 - strports now defaults to managing access to a UNIX socket with a lock;
   lockfile=0 can be included in the strports specifier to disable this
   behavior (#2295)
 - FTPClient now has a 'rename' method (#3335)
 - FTPClient now has a 'makeDirectory' method (#3500)
 - FTPClient now has a 'removeFile' method (#3491)
 - flushWarnings, A new Trial method for testing warnings, has been added
   (#3487, #3427, #3506)
 - The log observer can now be configured in .tac files (#3534)

Fixes
-----
 - TLS Session Tickets are now disabled by default, allowing connections to
   certain servers which hang when an empty session ticket is received (like
   GTalk) (#3463)
 - twisted.enterprise.adbapi.ConnectionPool's noisy attribute now defaults to
   False, as documented (#1806)
 - Error handling and logging in adbapi is now much improved (#3244)
 - TCP listeners can now be restarted (#2913)
 - Doctests can now be rerun with trial's --until-failure option (#2713)
 - Some memory leaks have been fixed in trial's --until-failure
   implementation (#3119, #3269)
 - Trial's summary reporter now prints correct runtime information and handles
   the case of 0 tests (#3184)
 - Trial and any other user of the 'namedAny' function now has better error
   reporting in the case of invalid module names (#3259)
 - Multiple instances of trial can now run in parallel in the same directory
   by creating _trial_temp directories with an incremental suffix (#2338)
 - Trial's failUnlessWarns method now works on Python 2.6 (#3223)
 - twisted.python.log now hooks into the warnings system in a way compatible
   with Python 2.6 (#3211)
 - The GTK2 reactor is now better supported on Windows, but still not passing
   the entire test suite (#3203)
 - low-level failure handling in spawnProcess has been improved and no longer
   leaks file descriptors (#2305, #1410)
 - Perspective Broker avatars now have their logout functions called in more
   cases (#392)
 - Log observers which raise exceptions are no longer removed (#1069)
 - transport.getPeer now always includes an IP address in the Address returned
   instead of a hostname (#3059)
 - Functions in twisted.internet.utils which spawn processes now avoid calling
   chdir in the case where no working directory is passed, to avoid some
   obscure permission errors (#3159)
 - twisted.spread.publish.Publishable no longer corrupts line endings on
   Windows (#2327)
 - SelectReactor now properly detects when a TLS/TCP connection has been
   disconnected (#3218)
 - twisted.python.lockfile no longer raises an EEXIST OSError and is much
   better supported on Windows (#3367)
 - When ITLSTransport.startTLS is called while there is data in the write
   buffer, TLS negotiation will now be delayed instead of the method raising
   an exception (#686)
 - The userAnonymous argument to FTPFactory is now honored (#3390)
 - twisted.python.modules no longer tries to "fix" sys.modules after an import
   error, which was just causing problems (#3388)
 - setup.py no longer attempts to build extension modules when run with Jython
   (#3410)
 - AMP boxes can now be sent in IBoxReceiver.startReceivingBoxes (#3477)
 - AMP connections are closed as soon as a key length larger than 255 is
   received (#3478)
 - Log events with timezone offsets between -1 and -59 minutes are now
   correctly reported as negative (#3515)

Deprecations and Removals
-------------------------
 - Trial's setUpClass and tearDownClass methods are now deprecated (#2903)
 - problemsFromTransport has been removed in favor of the argument passed to
   connectionLost (#2874)
 - The mode parameter to methods of IReactorUNIX and IReactorUNIXDatagram are
   deprecated in favor of applications taking other security precautions, since
   the mode of a Unix socket is often not respected (#1068)
 - Index access on instances of twisted.internet.defer.FirstError has been
   removed in favor of the subFailure attribute (#3298)
 - The 'changeDirectory' method of FTPClient has been deprecated in favor of
   the 'cwd' method (#3491)

Other
-----

 - #3202, #2869, #3225, #2955, #3237, #3196, #2355, #2881, #3054, #2374, #2918,
   #3210, #3052, #3267, #3288, #2985, #3295, #3297, #2512, #3302, #1222, #2631,
   #3306, #3116, #3215, #1489, #3319, #3320, #3321, #1255, #2169, #3182, #3323,
   #3301, #3318, #3029, #3338, #3346, #1144, #3173, #3165, #685, #3357, #2582,
   #3370, #2438, #1253, #637, #1971, #2208, #979, #1790, #1888, #1882, #1793,
   #754, #1890, #1931, #1246, #1025, #3177, #2496, #2567, #3400, #2213, #2027,
   #3415, #1262, #3422, #2500, #3414, #3045, #3111, #2974, #2947, #3222, #2878,
   #3402, #2909, #3423, #1328, #1852, #3382, #3393, #2029, #3489, #1853, #2026,
   #2375, #3502, #3482, #3504, #3505, #3507, #2605, #3519, #3520, #3121, #3484,
   #3439, #3216, #3511, #3524, #3521, #3197, #2486, #2449, #2748, #3381, #3236,
   #671


Conch 8.2.0 (2008-12-16)
========================

Features
--------
 - The type of the protocols instantiated by SSHFactory is now parameterized
   (#3443)

Fixes
-----
 - A file descriptor leak has been fixed (#3213, #1789)
 - "File Already Exists" errors are now handled more correctly (#3033)
 - Handling of CR IAC in TelnetClient is now improved (#3305)
 - SSHAgent is no longer completely unusable (#3332)
 - The performance of insults.ClientProtocol is now greatly increased by
   delivering more than one byte at a time to application code (#3386)
 - Manhole and the conch server no longer need to be run as root when not
   necessary (#2607)
 - The value of FILEXFER_ATTR_ACMODTIME has been corrected (#2902)
 - The management of known_hosts and host key verification has been overhauled
   (#1376, #1301, #3494, #3496, #1292, #3499)

Other
-----
 - #3193, #1633


Lore 8.2.0 (2008-12-16)
=======================

Other
-----
 - #2207, #2514


Mail 8.2.0 (2008-12-16)
=======================

Fixes
-----
 - The mailmail tool now provides better error messages for usage errors (#3339)
 - The SMTP protocol implementation now works on PyPy (#2976)

Other
-----
 - #3475


Names 8.2.0 (2008-12-16)
========================

Features
--------
 - The NAPTR record type is now supported (#2276)

Fixes
-----
 - Make client.Resolver less vulnerable to the Birthday Paradox attack by
   avoiding sending duplicate queries when it's not necessary (#3347)
 - client.Resolver now uses a random source port for each DNS request (#3342)
 - client.Resolver now uses a full 16 bits of randomness for message IDs,
   instead of 10 which it previously used (#3342)
 - All record types now have value-based equality and a string representation
   (#2935)

Other
-----
 - #1622, #3424


Web 8.2.0 (2008-12-16)
======================

Features
--------
 - The web server can now deal with multi-value headers in the new attributes of
   Request, requestHeaders and responseHeaders (#165)
 - There is now a resource-wrapper which implements HTTP Basic and Digest auth
   in terms of twisted.cred (#696)
 - It's now possible to limit the number of redirects that client.getPage will
   follow (#2412)
 - The directory-listing code no longer uses Woven (#3257)
 - static.File now supports Range headers with a single range (#1493)
 - twisted.web now has a rudimentary WSGI container (#2753)
 - The web server now supports chunked encoding in requests (#3385)

Fixes
-----
 - The xmlrpc client now raises an error when the server sends an empty
   response (#3399)
 - HTTPPageGetter no longer duplicates default headers when they're explicitly
   overridden in the headers parameter (#1382)
 - The server will no longer timeout clients which are still sending request
   data (#1903)
 - microdom's isEqualToNode now returns False when the nodes aren't equal
   (#2542)

Deprecations and Removals
-------------------------

 - Request.headers and Request.received_headers are not quite deprecated, but
   they are discouraged in favor of requestHeaders and responseHeaders (#165)

Other
-----
 - #909, #687, #2938, #1152, #2930, #2025, #2683, #3471


Web2 8.2.0 (2008-12-16)
=======================

Note: Twisted Web2 is being phased out in preference for Twisted Web, but some
maintenance changes have been made.

Fixes
-----
 - The main twisted.web2 docstring now indicates the current state of the
   project (#2028)
 - Headers which require unusual bytes are now quoted (#2346)
 - Some links in the introduction documentation have been fixed (#2552)


Words 8.2.0 (2008-12-16)
========================

Feature
-------
 - There is now a standalone XMPP router included in twisted.words: it can be
   used with the 'twistd xmpp-router' command line (#3407)
 - A server factory for Jabber XML Streams has been added (#3435)
 - Domish now allows for iterating child elements with specific qualified names
   (#2429)
 - IRCClient now has a 'back' method which removes the away status (#3366)
 - IRCClient now has a 'whois' method (#3133)

Fixes
-----
 - The IRC Client implementation can now deal with compound mode changes (#3230)
 - The MSN protocol implementation no longer requires the CVR0 protocol to
   be included in the VER command (#3394)
 - In the IRC server implementation, topic messages will no longer be sent for
   a group which has no topic (#2204)
 - An infinite loop (which caused infinite memory usage) in irc.split has been
   fixed.  This was triggered any time a message that starts with a delimiter
   was sent (#3446)
 - Jabber's toResponse now generates a valid stanza even when stanzaType is not
   specified (#3467)
 - The lifetime of authenticator instances in XmlStreamServerFactory is no
   longer artificially extended (#3464)

Other
-----
 - #3365


Core 8.1.0 (2008-05-18)
=======================

Features
--------

 - twisted.internet.error.ConnectionClosed is a new exception which is the
   superclass of ConnectionLost and ConnectionDone (#3137)
 - Trial's CPU and memory performance should be better now (#3034)
 - twisted.python.filepath.FilePath now has a chmod method (#3124)

Fixes
-----

 - Some reactor re-entrancy regressions were fixed (#3146, #3168)
 - A regression was fixed whereby constructing a Failure for an exception and
   traceback raised out of a Pyrex extension would fail (#3132)
 - CopyableFailures in PB can again be created from CopiedFailures (#3174)
 - FilePath.remove, when called on a FilePath representing a symlink to a
   directory, no longer removes the contents of the targeted directory, and
   instead removes the symlink (#3097)
 - FilePath now has a linkTo method for creating new symlinks (#3122)
 - The docstring for Trial's addCleanup method now correctly specifies when
   cleanup functions are run (#3131)
 - assertWarns now deals better with multiple identical warnings (#2904)
 - Various windows installer bugs were fixed (#3115, #3144, #3150, #3151, #3164)
 - API links in the howto documentation have been corrected (#3130)
 - The Win32 Process transport object now has a pid attribute (#1836)
 - A doc bug in the twistd plugin howto which would inevitably lead to
   confusion was fixed (#3183)
 - A regression breaking IOCP introduced after the last release was fixed
   (#3200)

Deprecations and Removals
-------------------------

 - mktap is now fully deprecated, and will emit DeprecationWarnings when used
   (#3127)

Other
-----
 - #3079, #3118, #3120, #3145, #3069, #3149, #3186, #3208, #2762


Conch 8.1.0 (2008-05-18)
========================

Fixes
-----
 - A regression was fixed whereby the publicKeys and privateKeys attributes of
   SSHFactory would not be interpreted as strings (#3141)
 - The sshsimpleserver.py example had a minor bug fix (#3135)
 - The deprecated mktap API is no longer used (#3127)
 - An infelicity was fixed whereby a NameError would be raised in certain
   circumstances during authentication when a ConchError should have been
   (#3154)
 - A workaround was added to conch.insults for a bug in gnome-terminal whereby
   it would not scroll correctly (#3189)


Lore 8.1.0 (2008-05-18)
=======================

Fixes
-----
 - The deprecated mktap API is no longer used (#3127)


News 8.1.0 (2008-05-18)
=======================

Fixes
-----
 - The deprecated mktap API is no longer used (#3127)


Web 8.1.0 (2008-05-18)
======================

Fixes
-----
 - Fixed an XMLRPC bug whereby sometimes a callRemote Deferred would
   accidentally be fired twice when a connection was lost during the handling of
   a response (#3152)
 - Fixed a bug in the "Using Twisted Web" document which prevented an example
   resource from being renderable (#3147)
 - The deprecated mktap API is no longer used (#3127)


Words 8.1.0 (2008-05-18)
========================

Features
--------
 - JID objects now have a nice __repr__ (#3156)
 - Extending XMPP protocols is now easier (#2178)

Fixes
-----
 - The deprecated mktap API is no longer used (#3127)
 - A bug whereby one-time XMPP observers would be enabled permanently was fixed
   (#3066)


Mail 8.1.0 (2008-05-18)
=======================

Fixes
-----
 - The deprecated mktap API is no longer used (#3127)


Names 8.1.0 (2008-05-18)
========================

Fixes
-----
 - The deprecated mktap API is no longer used (#3127)


Web2 8.1.0 (2008-05-18)
=======================

Fixes
-----
 - The deprecated mktap API is no longer used (#3127)


Core 8.0.1 (2008-03-26)
=======================

Fixes
-----
 - README no longer refers to obsolete trial command line option
 - twistd no longer causes a bizarre DeprecationWarning about mktap


Core 8.0.0 (2008-03-17)
=======================

Features
--------

 - The IOCP reactor has had many changes and is now greatly improved
   (#1760, #3055)
 - The main Twisted distribution is now easy_installable (#1286, #3110)
 - twistd can now profile with cProfile (#2469)
 - twisted.internet.defer contains a DeferredFilesystemLock which gives a
   Deferred interface to lock file acquisition (#2180)
 - twisted.python.modules is a new system for representing and manipulating
   module paths (i.e. sys.path) (#1951)
 - twisted.internet.fdesc now contains a writeToFD function, along with other
   minor fixes (#2419)
 - twisted.python.usage now allows optional type enforcement (#739)
 - The reactor now has a blockingCallFromThread method for non-reactor threads
   to use to wait for a reactor-scheduled call to return a result (#1042, #3030)
 - Exceptions raised inside of inlineCallbacks-using functions now have a
   better chance of coming with a meaningful traceback (#2639, #2803)
 - twisted.python.randbytes now contains code for generating secure random
   bytes (#2685)
 - The classes in twisted.application.internet now accept a reactor parameter
   for specifying the reactor to use for underlying calls to allow for better
   testability (#2937)
 - LoopingCall now allows you to specify the reactor to use to schedule new
   calls, allowing much better testing techniques (#2633, #2634)
 - twisted.internet.task.deferLater is a new API for scheduling calls and
   getting deferreds which are fired with their results (#1875)
 - objgrep now knows how to search through deque objects (#2323)
 - twisted.python.log now contains a Twisted log observer which can forward
   messages to the Python logging system (#1351)
 - Log files now include seconds in the timestamps (#867)
 - It is now possible to limit the number of log files to create during log
   rotation (#1095)
 - The interface required by the log context system is now documented as
   ILoggingContext, and abstract.FileDescriptor now declares that it implements
   it (#1272)
 - There is now an example cred checker that uses a database via adbapi (#460)
 - The epoll reactor is now documented in the choosing-reactors howto (#2539)
 - There were improvements to the client howto (#222)
 - Int8Receiver was added (#2315)
 - Various refactorings to AMP introduced better testability and public
   interfaces (#2657, #2667, #2656, #2664, #2810)
 - twisted.protocol.policies.TrafficLoggingFactory now has a resetCounter
   method (#2757)
 - The FTP client can be told which port range within which to bind passive
   transfer ports (#1904)
 - twisted.protocols.memcache contains a new asynchronous memcache client
   (#2506, #2957)
 - PB now supports anonymous login (#439, #2312)
 - twisted.spread.jelly now supports decimal objects (#2920)
 - twisted.spread.jelly now supports all forms of sets (#2958)
 - There is now an interface describing the API that process protocols must
   provide (#3020)
 - Trial reporting to core unittest TestResult objects has been improved (#2495)
 - Trial's TestCase now has an addCleanup method which allows easy setup of
   tear-down code (#2610, #2899)
 - Trial's TestCase now has an assertIsInstance method (#2749)
 - Trial's memory footprint and speed are greatly improved (#2275)
 - At the end of trial runs, "PASSED" and "FAILED" messages are now colorized
   (#2856)
 - Tests which leave global state around in the reactor will now fail in
   trial. A new option, --unclean-warnings, will convert these errors back into
   warnings (#2091)
 - Trial now has a --without-module command line for testing code in an
   environment that lacks a particular Python module (#1795)
 - Error reporting of failed assertEquals assertions now has much nicer
   formatting (#2893)
 - Trial now has methods for monkey-patching (#2598)
 - Trial now has an ITestCase (#2898, #1950)
 - The trial reporter API now has a 'done' method which is called at the end of
   a test run (#2883)
 - TestCase now has an assertWarns method which allows testing that functions
   emit warnings (#2626, #2703)
 - There are now no string exceptions in the entire Twisted code base (#2063)
 - There is now a system for specifying credentials checkers with a string
   (#2570)

Fixes
-----

 - Some tests which were asserting the value of stderr have been changed
   because Python uncontrollably writes bytes to stderr (#2405)
 - Log files handle time zones with DST better (#2404)
 - Subprocesses using PTYs on OS X that are handled by Twisted will now be able
   to more reliably write the final bytes before they exit, allowing Twisted
   code to more reliably receive them (#2371, #2858)
 - Trial unit test reporting has been improved (#1901)
 - The kqueue reactor handles connection failures better (#2172)
 - It's now possible to run "trial foo/bar/" without an exception: trailing
   slashes no longer cause problems (#2005)
 - cred portals now better deal with implementations of inherited interfaces
   (#2523)
 - FTP error handling has been improved (#1160, 1107)
 - Trial behaves better with respect to file locking on Windows (#2482)
 - The FTP server now gives a better error when STOR is attempted during an
   anonymous session (#1575)
 - Trial now behaves better with tests that use the reactor's threadpool (#1832)
 - twisted.python.reload now behaves better with new-style objects (#2297)
 - LogFile's defaultMode parameter is now better implemented, preventing
   potential security exploits (#2586)
 - A minor obscure leak in thread pools was corrected (#1134)
 - twisted.internet.task.Clock now returns the correct DelayedCall from
   callLater, instead of returning the one scheduled for the furthest in the
   future (#2691)
 - twisted.spread.util.FilePager no longer unnecessarily buffers data in
   memory (#1843, 2321)
 - Asking for twistd or trial to use an unavailable reactor no longer prints a
   traceback (#2457)
 - System event triggers have fewer obscure bugs (#2509)
 - Plugin discovery code is much better behaved, allowing multiple
   installations of a package with plugins (#2339, #2769)
 - Process and PTYProcess have been merged and some minor bugs have been fixed
   (#2341)
 - The reactor has less global state (#2545)
 - Failure can now correctly represent and format errors caused by string
   exceptions (#2830)
 - The epoll reactor now has better error handling which now avoids the bug
   causing 100% CPU usage in some cases (#2809)
 - Errors raised during trial setUp or tearDown methods are now handled better
   (#2837)
 - A problem when deferred callbacks add new callbacks to the deferred that
   they are a callback of was fixed (#2849)
 - Log messages that are emitted during connectionMade now have the protocol
   prefix correctly set (#2813)
 - The string representation of a TCP Server connection now contains the actual
   port that it's bound to when it was configured to listen on port 0 (#2826)
 - There is better reporting of error codes for TCP failures on Windows (#2425)
 - Process spawning has been made slightly more robust by disabling garbage
   collection temporarily immediately after forking so that finalizers cannot
   be executed in an unexpected environment (#2483)
 - namedAny now detects import errors better (#698)
 - Many fixes and improvements to the twisted.python.zipstream module have
   been made (#2996)
 - FilePager no longer blows up on empty files (#3023)
 - twisted.python.util.FancyEqMixin has been improved to cooperate with objects
   of other types (#2944)
 - twisted.python.FilePath.exists now restats to prevent incorrect result
   (#2896)
 - twisted.python.util.mergeFunctionMetadata now also merges the __module__
   attribute (#3049)
 - It is now possible to call transport.pauseProducing within connectionMade on
   TCP transports without it being ignored (#1780)
 - twisted.python.versions now understands new SVN metadata format for fetching
   the SVN revision number (#3058)
 - It's now possible to use reactor.callWhenRunning(reactor.stop) on gtk2 and
   glib2 reactors (#3011)

Deprecations and removals
-------------------------
 - twisted.python.timeoutqueue is now deprecated (#2536)
 - twisted.enterprise.row and twisted.enterprise.reflector are now deprecated
   (#2387)
 - twisted.enterprise.util is now deprecated (#3022)
 - The dispatch and dispatchWithCallback methods of ThreadPool are now
   deprecated (#2684)
 - Starting the same reactor multiple times is now deprecated (#1785)
 - The visit method of various test classes in trial has been deprecated (#2897)
 - The --report-profile option to twistd and twisted.python.dxprofile are
   deprecated (#2908)
 - The upDownError method of Trial reporters is deprecated (#2883)

Other
-----

 - #2396, #2211, #1921, #2378, #2247, #1603, #2463, #2530, #2426, #2356, #2574,
 - #1844, #2575, #2655, #2640, #2670, #2688, #2543, #2743, #2744, #2745, #2746,
 - #2742, #2741, #1730, #2831, #2216, #1192, #2848, #2767, #1220, #2727, #2643,
 - #2669, #2866, #2867, #1879, #2766, #2855, #2547, #2857, #2862, #1264, #2735,
 - #942, #2885, #2739, #2901, #2928, #2954, #2906, #2925, #2942, #2894, #2793,
 - #2761, #2977, #2968, #2895, #3000, #2990, #2919, #2969, #2921, #3005, #421,
 - #3031, #2940, #1181, #2783, #1049, #3053, #2847, #2941, #2876, #2886, #3086,
 - #3095, #3109


Conch 8.0.0 (2008-03-17)
========================

Features
--------
 - Add DEC private mode manipulation methods to ITerminalTransport. (#2403)

Fixes
-----
 - Parameterize the scheduler function used by the insults TopWindow widget.
   This change breaks backwards compatibility in the TopWindow initializer.
   (#2413)
 - Notify subsystems, like SFTP, of connection close. (#2421)
 - Change the process file descriptor "connection lost" code to reverse the
   setNonBlocking operation done during initialization. (#2371)
 - Change ConsoleManhole to wait for connectionLost notification before
   stopping the reactor. (#2123, #2371)
 - Make SSHUserAuthServer.ssh_USERAUTH_REQUEST return a Deferred. (#2528)
 - Manhole's initializer calls its parent class's initializer with its
   namespace argument. (#2587)
 - Handle ^C during input line continuation in manhole by updating the prompt
   and line buffer correctly. (#2663)
 - Make twisted.conch.telnet.Telnet by default reject all attempts to enable
   options. (#1967)
 - Reduce the number of calls into application code to deliver application-level
   data in twisted.conch.telnet.Telnet.dataReceived (#2107)
 - Fix definition and management of extended attributes in conch file transfer.
   (#3010)
 - Fix parsing of OpenSSH-generated RSA keys with differing ASN.1 packing style.
   (#3008)
 - Fix handling of missing $HOME in twisted.conch.client.unix. (#3061)

Misc
----
 - #2267, #2378, #2604, #2707, #2341, #2685, #2679, #2912, #2977, #2678, #2709
   #2063, #2847


Lore 8.0.0 (2008-03-17)
=======================

Fixes
-----
 - Change twisted.lore.tree.setIndexLin so that it removes node with index-link
   class when the specified index filename is None. (#812)
 - Fix the conversion of the list of options in man pages to Lore format.
   (#3017)
 - Fix conch man pages generation. (#3075)
 - Fix management of the interactive command tag in man2lore. (#3076)

Misc
----
 - #2847


News 8.0.0 (2008-03-17)
=======================

Misc
----
 - Remove all "API Stability" markers (#2847)


Runner 8.0.0 (2008-03-17)
=========================

Misc
----
 - Remove all "API Stability" markers (#2847)


Web 8.0.0 (2008-03-17)
======================

Features
--------
 - Add support to twisted.web.client.getPage for the HTTP HEAD method. (#2750)

Fixes
-----
 - Set content-type in xmlrpc responses to "text/xml" (#2430)
 - Add more error checking in the xmlrpc.XMLRPC render method, and enforce
   POST requests. (#2505)
 - Reject unicode input to twisted.web.client._parse to reject invalid
   unicode URLs early. (#2628)
 - Correctly re-quote URL path segments when generating an URL string to
   return from Request.prePathURL. (#2934)
 - Make twisted.web.proxy.ProxyClientFactory close the connection when
   reporting a 501 error. (#1089)
 - Fix twisted.web.proxy.ReverseProxyResource to specify the port in the
   host header if different from 80. (#1117)
 - Change twisted.web.proxy.ReverseProxyResource so that it correctly encodes
   the request URI it sends on to the server for which it is a proxy. (#3013)
 - Make "twistd web --personal" use PBServerFactory (#2681)

Misc
----
 - #1996, #2382, #2211, #2633, #2634, #2640, #2752, #238, #2905


Words 8.0.0 (2008-03-17)
========================

Features
--------
 - Provide function for creating XMPP response stanzas. (#2614, #2614)
 - Log exceptions raised in Xish observers. (#2616)
 - Add 'and' and 'or' operators for Xish XPath expressions. (#2502)
 - Make JIDs hashable. (#2770)

Fixes
-----
 - Respect the hostname and servername parameters to IRCClient.register. (#1649)
 - Make EventDispatcher remove empty callback lists. (#1652)
 - Use legacy base64 API to support Python 2.3 (#2461)
 - Fix support of DIGEST-MD5 challenge parsing with multi-valued directives.
   (#2606)
 - Fix reuse of dict of prefixes in domish.Element.toXml (#2609)
 - Properly process XMPP stream headers (#2615)
 - Use proper namespace for XMPP stream errors. (#2630)
 - Properly parse XMPP stream errors. (#2771)
 - Fix toResponse for XMPP stanzas without an id attribute. (#2773)
 - Move XMPP stream header procesing to authenticators. (#2772)

Misc
----
 - #2617, #2640, #2741, #2063, #2570, #2847


Mail 8.0.0 (2008-03-17)
=======================

Features
--------
 - Support CAPABILITY responses that include atoms of the form "FOO" and
   "FOO=BAR" in IMAP4 (#2695)
 - Parameterize error handling behavior of imap4.encoder and imap4.decoder.
   (#2929)

Fixes
-----
 - Handle empty passwords in SMTP auth. (#2521)
 - Fix IMAP4Client's parsing of literals which are not preceeded by whitespace.
   (#2700)
 - Handle MX lookup suceeding without answers. (#2807)
 - Fix issues with aliases(5) process support. (#2729)

Misc
----
 - #2371, #2123, #2378, #739, #2640, #2746, #1917, #2266, #2864, #2832, #2063,
   #2865, #2847


Names 8.0.0 (2008-03-17)
========================

Fixes
-----

 - Refactor DNSDatagramProtocol and DNSProtocol to use same base class (#2414)
 - Change Resolver to query specified nameservers in specified order, instead
   of reverse order. (#2290)
 - Make SRVConnector work with bad results and NXDOMAIN responses.
   (#1908, #2777)
 - Handle write errors happening in dns queries, to have correct deferred
   failures. (#2492)
 - Fix the value of OP_NOTIFY and add a definition for OP_UPDATE. (#2945)

Misc
----
 - #2685, #2936, #2581, #2847

