Releases

There isn’t a “release schedule” in any sense. If there is something in master your project depends upon, let me know and I’ll do a release. Starting with v0.8.0 versions are following semantic versioning.

unreleased

git master will likely become v17.0.0

v0.19.0

April 20, 2017

v0.18.0

January 11, 2017

v0.17.0

October 4, 2016

v0.16.1

August 31, 2016

v0.16.0

v0.15.1

v0.15.0

July 26, 2016

  • txtorcon-0.15.0.tar.gz (PyPI (local-sig or github-sig) (source)
  • added support for NULL control-port-authentication which is often appropriate when used with a UNIX domain socket
  • switched to ipaddress instead of Google’s ipaddr; the API should be the same from a user perspective but packagers and tutorials will want to change their instructions slightly (pip install ipaddress or apt-get install python-ipaddress are the new ways).
  • support the new ADD_ONION and DEL_ONION “ephemeral hidden services” commands in TorConfig
  • a first stealth-authentication implementation (for “normal” hidden services, not ephemeral)
  • bug-fix from david415 to raise ConnectionRefusedError instead of StopIteration when running out of SOCKS ports.
  • new feature from david415 adding a build_timeout_circuit method which provides a Deferred that callbacks only when the circuit is completely built and errbacks if the provided timeout expires. This is useful because txtorcon.TorState.build_circuit() callbacks as soon as a Circuit instance can be provided (and then you’d use txtorcon.Circuit.when_built() to find out when it’s done building).
  • new feature from coffeemakr falling back to password authentication if cookie authentication isn’t available (or fails, e.g. because the file isn’t readable).
  • both TorState and TorConfig now have a .from_protocol class-method.
  • spec-compliant string-un-escaping from coffeemakr
  • a proposed new API: txtorcon.connect()
  • fix issue 176

v0.14.1

October 25, 2015

  • subtle bug with .is_built on Circuit; changing the API (but with backwards-compatibility until 0.15.0 at least)

v0.14.0

September 26, 2015

  • txtorcon-0.14.0.tar.gz (PyPI (local-sig or github-sig) (source)
  • txtorcon.interface.IStreamAttacher handling was missing None and DO_NOT_ATTACH cases if a Deferred was returned.
  • add .is_built Deferred to txtorcon.Circuit that gets `callback()`d when the circuit becomes BUILT
  • david415 ported his tor: endpoint parser so now both client and server endpoints are supported. This means any Twisted program using endpoints can use Tor as a client. For example, to connect to txtorcon’s Web site: ep = clientFromString("tor:timaq4ygg2iegci7.onion:80"). (In the future, I’d like to automatically launch Tor if required, too).
  • Python3 fixes from isis (note: needs Twisted 15.4.0+)

v0.13.0

May 10, 2015

  • txtorcon-0.13.0.tar.gz (PyPI (local-sig or github-sig) (source)
  • support basic and stealth hidden service authorization, and parse client_keys files.
  • 2x speedup for TorState parsing (mostly by lazy-parsing timestamps)
  • can now parse ~75000 microdescriptors/second per core of 3.4GHz Xeon E3
  • launch_tor now doesn’t use a temporary torrc (command-line options instead)
  • tons of pep8 cleanups
  • several improvements to hidden-service configuration from sambuddhabasu1.
  • populated valid signals from GETINFO signals/names from sambuddhabasu1.

v0.12.0

February 3, 2015

  • txtorcon-0.12.0.tar.gz (PyPI (local-sig or github-sig) (source)
  • doc, code and import cleanups from Kali Kaneko
  • HiddenServiceDirGroupReadable support
  • Issue #80: honour ControlPort 0 in incoming TorConfig instance. The caller owns both pieces: you have to figure out when it’s bootstraped, and are responsible for killing it off.
  • Issue #88: clarify documentation and fix appending to some config lists
  • If GeoIP data isn’t loaded in Tor, it sends protocol errors; if txtorcon also hasn’t got GeoIP data, the queries for country-code fail; this error is now ignored.
  • 100% unit-test coverage! (line coverage)
  • PyPy support (well, at least all tests pass)
  • TCP4HiddenServiceEndpoint now waits for descriptor upload before the listen() call does its callback (this means when using onion: endpoint strings, or any of the endpoints APIs your hidden service is 100% ready for action when you receive the callback)
  • TimeIntervalCommaList from Tor config supported
  • TorControlProtocol now has a .all_routers member (a set() of all Routers)
  • documentation fix from sammyshj

v0.11.0

August 16, 2014

v0.10.1

July 20, 2014

  • txtorcon-0.10.1.tar.gz (PyPI (local-sig or github-sig) (source)
  • fix bug incorrectly issuing RuntimeError in brief window of time on event-listeners
  • issue #78: Add tox tests and fix for Twisted 12.0.0 (and prior), as this is what Debian squeeze ships
  • issue #77: properly expand relative and tilde paths for hiddenServiceDir via endpoints

v0.10.0

June 15, 2014

  • txtorcon-0.10.0.tar.gz (PyPI (local-sig or github-sig) (source)
  • In collaboration with David Stainton after a pull-request, we have endpoint parser plugins for Twisted! This means code like serverFromString("onion:80").listen(...) is enough to start a service.
  • The above also means that any endpoint-using Twisted program can immediately offer its TCP services via Hidden Service with no code changes. For example, using Twisted Web to serve a WSGI web application would be simply: twistd web --port onion:80 --wsgi web.app
  • switch to a slightly-modified Alabaster Sphinx theme
  • added howtos to documentation

v0.9.2

April 23, 2014

  • txtorcon-0.9.2.tar.gz (local-sig or github-sig) (source)
  • add on_disconnect callback for TorControlProtocol (no more monkey-patching Protocol API)
  • add age() method to Circuit
  • add time_created property to Circuit
  • don’t incorrectly listen for NEWDESC events in TorState
  • add .flags dict to track flags in Circuit, Stream
  • build_circuit() can now take hex IDs (as well as Router instances)
  • add unique_name property to Router (returns the hex id, unless Named then return name)
  • add location property to Router
  • TorState.close_circuit now takes either a Circuit ID or Circuit instance
  • TorState.close_stream now takes either a Stream ID or Stream instance
  • support both GeoIP API versions
  • more test-coverage
  • small patch from enriquefynn improving tor binary locating
  • strip OK lines in TorControlProtocol (see issue #8)
  • use TERM not KILL when Tor launch times out (see issue #68) from hellais

v0.9.1

January 20, 2014

  • txtorcon-0.9.1.tar.gz (local-sig or github-sig) (source)
  • put test/ directory at the top level
  • using “coverage” tool instead of custom script
  • using coveralls.io and travis-ci for test coverage and continuous integration
  • issue #56: added Circuit.close() and Stream.close() starting from aagbsn’s patch
  • parsing issues with multi-line keyword discovered and resolved
  • preserve router nicks from long-names if consensus lacks an entry (e.g. bridges)
  • using Twine for releases
  • Wheel release now also available
  • issue #57: “python setup.py develop” now supported
  • issue #59: if tor_launch() times out, Tor is properly killed (starting with pull-request from Ryman)
  • experimental docker.io-based tests (for HS listening, and tor_launch() timeouts)
  • issue #55: pubkey link on readthedocs
  • issue #63
  • clean up GeoIP handling, and support pygeoip both pre and post 0.3
  • slightly improve unit-test coverage (now at 97%, 61 lines of 2031 missing)
  • added a Walkthrough to the documentation

v0.8.2

November 22, 2013

v0.8.1

May 13, 2013

  • txtorcon-0.8.1.tar.gz (local-sign or github-sig) (source)
  • fixed improper import in setup.py preventing 0.8.0 from installing
  • signatures with proper subkey this time
  • Proper file-flushing in tests and PyPy fixes from Lukas Lueg
  • docs build issue from isis

v0.8.0

April 11, 2013 (actually uploaded May 11)

  • Please use 0.8.1; this won’t install due to import problem in setup.py (unless you have pypissh).
  • following semantic versioning;
  • slight API change ICircuitListener.circuit_failed(), circuit_closed() and IStreamListener.stream_failed(), stream_closed() and stream_detach() all now include any keywords in the notification method (some of these lacked flags, or only included some) (issue #18);
  • launch_tor() can take a timeout (starting with a patch from hellais);
  • cleanup from aagbsn;
  • more test coverage;
  • run tests cleanly without graphviz (from lukaslueg);
  • issue #26 fix from lukaslueg;
  • pep8 and whitespace targets plus massive cleanup (now pep8 clean, from lukaslueg);
  • issue #30 fix reported by webmeister making ipaddr actually-optional;
  • example using synchronous web server (built-in SimpleHTTPServer) with txtorcon (from lukaslueg);
  • TorState can now create circuits without an explicit path;
  • passwords for non-cookie authenticated sessions use a password callback (that may return a Deferred) instead of a string (issue #44);
  • fixes for AddrMap in case #8596 is implemented;

v0.7

November 21, 2012

v0.6

October 10, 2012

  • txtorcon-0.6.tar.gz (local-sig or github-sig) (source)
  • debian packaging (mmaker);
  • psutil fully gone;
  • changed API for launch_tor() to use TorConfig instead of args;
  • TorConfig.save() works properly with no connected Tor;
  • fix incorrect handling of 650 immediately after connect;
  • pep8 compliance;
  • use assertEqual in tests;
  • messages with embdedded keywords work properly;
  • fix bug with setup.py + pip;
  • issue #15 reported along with patch by Isis Lovecruft;
  • consolidate requirements (from aagbsn);
  • increased test coverage and various minor fixes;
  • https URIs for ReadTheDocs;

v0.5

June 20, 2012

v0.4

June 6, 2012

v0.3

  • 0.3 was broken when released (docs couldn’t build).

v0.2

June 1, 2012

  • txtorcon-0.2.tar.gz (txtorcon-0.2.tar.gz.sig)
  • incremental parsing;
  • faster TorState startup;
  • SAFECOOKIE support;
  • several bug fixes;
  • options to circuit_failure_rates.py example to make it actually-useful;
  • include built documentation + sources in tarball;
  • include tests in tarball;
  • improved logging;
  • patches from mmaker and kneufeld;