This release is a major revamp of the code to migrate from the asyncore framework to the new asyncio framework in Python 3.4. All the APIs have been adapted to fit the new asyncio paradigm, using coroutines wherever possible to avoid the need for callbacks when performing asynchronous operations.
So far, this release only supports the “low-level” asyncio API.
The API Documentation, Client Examples, and Server Examples have all been updated to reflect these changes.
Added the following new classes to support fully asynchronous connection forwarding, replacing the methods previously added in release 0.2.0:
These new classes allow for DNS lookups and other operations to be performed fully asynchronously when new listeners are set up. As with the asynchronous connect changes below, methods are now available to report when the listener is opened or when an error occurs during the open rather than requiring the listener to be fully set up in a single call.
Updated examples in Client Examples and Server Examples to reflect the above changes.
Added support in SSHTCPConnection for the following methods to allow asynchronous operations to be used when accepting inbound connection requests:
These new methods are used to implement asynchronous connect support for local and remote port forwarding, and to support trying multiple destination addresses when connection failures occur.
Cleaned up a few minor documentation errors.
Added support in SSHClient and SSHServer for setting the key exchange, encryption, MAC, and compression algorithms allowed in the SSH handshake.
Refactored the algorithm selection code to pull a common matching function back into _SSHConnection and simplify other modules.
Extended the listener class to open multiple listening sockets when necessary, fixing a bug where sockets opened to listen on localhost were not properly accepting both IPv4 and IPv6 connections.
Now, any listen request which resolves to multiple addresses will open listening sockets for each address.
Fixed a bug related to tracking of listeners opened on dynamic ports.