Thu Sep 1 16:54:32 2016 UTC ()
Updated py-foolscap to 0.12.2.

* Release 0.12.2 (28-Aug-2016)

** Improved Tor Connection Handler

The `tor.control_endpoint` connection handler now properly handles the
config.SocksPort response provided by the debian Tor daemon (and possibly
others), which included a confusing unix-domain socket in its response.

The `tor.socks_port` handler was changed to accept both hostname and port
number. Using anything but "localhost" or "127.0.0.1" is highly discouraged,
as it would reveal your IP address to (possibly hostile) external hosts. This
change was made to support applications (e.g. Tahoe-LAFS) which accept
endpoint strings to configure socks_port, but then parse them and reject
anything but TCP endpoints (to match Foolscap's current limitations). Such
applications ought to warn their users to use only localhost.

* Release 0.12.1 (20-Aug-2016)

** Connection Handlers for SOCKS, Tor, I2P

Foolscap now includes importable connection handlers for SOCKS(5a), Tor, and
I2P. #242, #246, #261

These handlers require additional supporting libraries, so they must be
imported separately, and a setuptools "extra feature" declaration must be
used to ask for the supporting libs. For example, applications which want to
use `tor:` hints (on a host with a Tor daemon running) should have a setup.py
with:

  install_requires=["foolscap[tor]"],

and the Tub setup code should do:

  from foolscap.connections import tor
  tub.addConnectionHintHandler("tor", tor.default_socks())

Full examples and docs are available in docs/connection-handlers.rst.

The default connection-negotiation timeout was increased from 60s to 120s, to
accomodate tor/i2p daemon startup times.

* Release 0.12.0 (20-Jul-2016)

** API changes: no more automatic configuration

Foolscap has moved from automatic listener configuration (randomly-allocated
TCP ports, automatically-determined IP address) to using more predictable
manual configuration. In our experience, the automatic configuration only
worked on hosts which had external IP addresses, which (sadly) is not the
case for most computers attached to the modern internet. #252

Applications must now explicitly provide Foolscap with port numbers (for
Tub.listenOn) and hostnames (for Tub.setLocation). Applications are
encouraged to give users configuration controls to teach Foolscap what
hostname and port number it should advertise to external hosts in the FURLs
it creates. See https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2773 for ideas.

The specific API changes were:

- Tub.setLocationAutomatically() has been deprecated
- Listener.getPortnum() has been deprecated
- calling Tub.listenOn("tcp:0") is also deprecated: callers should allocate a
  port themselves (the foolscap.util.allocate_tcp_port utility function,
  which does not block, has been added for this purpose).

Foolscap tools like "flappserver create" and "flogtool create-gatherer" will
no longer try to deduce their external IP address in an attempt to build
externally-reachable FURLs, and will no longer accept "tcp:0" as a listening
port (they now default to specific port numbers). Instead, they have
--location= and --port arguments. The user must provide '--location' with a
connection-hint string like 'tcp:hostname.example.org:3117' (which is put
into the server's FURLs). This must match the corresponding '--port'
argument, if provided.

- for all tools, if '--port' is provided, it must not be tcp:0
- 'flappserver create' now requires --location, and '--port' defaults to
  tcp:3116
- 'flogtool create-gatherer' requires --location, default port is tcp:3117
- 'flogtool create-incident-gatherer' does too, default is tcp:3118

For backwards-compatibility, old flappservers will have "tcp:0" written into
their "BASEDIR/port" file, and an empty string in "BASEDIR/location": these
must then be edited to allow the flappserver to start. For example, write
"tcp:12345" into "BASEDIR/port" to assign a portnumber, and
"tcp:HOSTNAME:12345" into "BASEDIR/location" to expose it in the generated
FURL.

** Other API changes

Tub.listenOn() now takes a string or an Endpoint (something that implements
twisted.internet.interfaces.IStreamServerEndpoint). This makes it possible to
listen on non-IPv4 sockets (e.g. IPv6-only sockets, or unix-domain sockets,
or more exotic endpoints), as long as Tub.setLocation() is set to something
which the other end's connection handlers can deal with. #203 #243

The "DefaultTCP" handler (which manages normal "tcp:HOST:PORT" connection
hints) has been moved to foolscap.connections.tcp . This makes room for new
Tor/I2P/SOCKS handlers to live in e.g. foolscap.connections.tor . #260

Connection handlers are now allowed to return a Deferred from
hint_to_endpoint(), which should make some handlers easier to write. #262

Note that RemoteReference.notifyOnDisconnect() will be deprecated in the next
release (once all internal uses have been removed from Foolscap).
Applications should stop using it as soon as possible. #42 #140 #207

** Compatibility Changes

This release removes support for the old (py2.4) "sets" module. This was
retained to support applications which were trying to maintain py2.4
compatibility, but it's been so long since this was necessary, it's time to
remove it.

** Other Changes

The internal `allocate_tcp_port()` function was fixed: unexpected kernel
behavior meant that sometimes it would return a port that was actually in
use. This caused unit tests to fail randomly about 5% of the time. #258

IPv6 support is nearly complete: listening on a plain TCP port will typically
accept connections via both IPv4 and IPv6, and the DefaultTCP handler will do
a hostname lookup that can use both A and AAAA records. So as long as your
server has a DNS entry that points at its IPv6 address, and you provide the
hostname to Tub.setLocation(), Foolscap will connect over IPv6. There is one
piece missing for complete support: the DefaultTCP connection handler must be
modified to accept square-bracketed numeric IPv6 addresses, for rare
situations where the host has a known (stable) IPv6 address, but no DNS name.


(wiz)
diff -r1.20 -r1.21 pkgsrc/net/py-foolscap/Makefile
diff -r1.8 -r1.9 pkgsrc/net/py-foolscap/PLIST
diff -r1.12 -r1.13 pkgsrc/net/py-foolscap/distinfo

cvs diff -r1.20 -r1.21 pkgsrc/net/py-foolscap/Makefile (expand / switch to unified diff)

--- pkgsrc/net/py-foolscap/Makefile 2016/07/09 13:04:00 1.20
+++ pkgsrc/net/py-foolscap/Makefile 2016/09/01 16:54:32 1.21
@@ -1,16 +1,16 @@ @@ -1,16 +1,16 @@
1# $NetBSD: Makefile,v 1.20 2016/07/09 13:04:00 wiz Exp $ 1# $NetBSD: Makefile,v 1.21 2016/09/01 16:54:32 wiz Exp $
2 2
3DISTNAME= foolscap-0.11.0 3DISTNAME= foolscap-0.12.2
4PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 4PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
5CATEGORIES= net python 5CATEGORIES= net python
6MASTER_SITES= ${MASTER_SITE_PYPI:=f/foolscap/} 6MASTER_SITES= ${MASTER_SITE_PYPI:=f/foolscap/}
7 7
8MAINTAINER= kamel.derouiche@gmail.com 8MAINTAINER= kamel.derouiche@gmail.com
9#MAINTAINER+= gdt@NetBSD.org 9#MAINTAINER+= gdt@NetBSD.org
10HOMEPAGE= http://foolscap.lothar.com/trac 10HOMEPAGE= http://foolscap.lothar.com/trac
11COMMENT= Foolscap contains an RPC protocol for Twisted 11COMMENT= Foolscap contains an RPC protocol for Twisted
12LICENSE= mit 12LICENSE= mit
13 13
14DEPENDS+= ${PYPKGPREFIX}-ZopeInterface>=3.6.1:../../devel/py-ZopeInterface 14DEPENDS+= ${PYPKGPREFIX}-ZopeInterface>=3.6.1:../../devel/py-ZopeInterface
15DEPENDS+= ${PYPKGPREFIX}-twisted>=16.0:../../net/py-twisted 15DEPENDS+= ${PYPKGPREFIX}-twisted>=16.0:../../net/py-twisted
16DEPENDS+= ${PYPKGPREFIX}-OpenSSL>=0.6:../../security/py-OpenSSL 16DEPENDS+= ${PYPKGPREFIX}-OpenSSL>=0.6:../../security/py-OpenSSL

cvs diff -r1.8 -r1.9 pkgsrc/net/py-foolscap/PLIST (expand / switch to unified diff)

--- pkgsrc/net/py-foolscap/PLIST 2016/04/13 18:19:49 1.8
+++ pkgsrc/net/py-foolscap/PLIST 2016/09/01 16:54:32 1.9
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1@comment $NetBSD: PLIST,v 1.8 2016/04/13 18:19:49 wiz Exp $ 1@comment $NetBSD: PLIST,v 1.9 2016/09/01 16:54:32 wiz Exp $
2bin/flappclient 2bin/flappclient
3bin/flappserver 3bin/flappserver
4bin/flogtool 4bin/flogtool
5${PYSITELIB}/${EGG_INFODIR}/PKG-INFO 5${PYSITELIB}/${EGG_INFODIR}/PKG-INFO
6${PYSITELIB}/${EGG_INFODIR}/SOURCES.txt 6${PYSITELIB}/${EGG_INFODIR}/SOURCES.txt
7${PYSITELIB}/${EGG_INFODIR}/dependency_links.txt 7${PYSITELIB}/${EGG_INFODIR}/dependency_links.txt
8${PYSITELIB}/${EGG_INFODIR}/entry_points.txt 8${PYSITELIB}/${EGG_INFODIR}/entry_points.txt
9${PYSITELIB}/${EGG_INFODIR}/requires.txt 9${PYSITELIB}/${EGG_INFODIR}/requires.txt
10${PYSITELIB}/${EGG_INFODIR}/top_level.txt 10${PYSITELIB}/${EGG_INFODIR}/top_level.txt
11${PYSITELIB}/foolscap/__init__.py 11${PYSITELIB}/foolscap/__init__.py
12${PYSITELIB}/foolscap/__init__.pyc 12${PYSITELIB}/foolscap/__init__.pyc
13${PYSITELIB}/foolscap/__init__.pyo 13${PYSITELIB}/foolscap/__init__.pyo
14${PYSITELIB}/foolscap/_version.py 14${PYSITELIB}/foolscap/_version.py
@@ -37,29 +37,41 @@ ${PYSITELIB}/foolscap/banana.pyc @@ -37,29 +37,41 @@ ${PYSITELIB}/foolscap/banana.pyc
37${PYSITELIB}/foolscap/banana.pyo 37${PYSITELIB}/foolscap/banana.pyo
38${PYSITELIB}/foolscap/base32.py 38${PYSITELIB}/foolscap/base32.py
39${PYSITELIB}/foolscap/base32.pyc 39${PYSITELIB}/foolscap/base32.pyc
40${PYSITELIB}/foolscap/base32.pyo 40${PYSITELIB}/foolscap/base32.pyo
41${PYSITELIB}/foolscap/broker.py 41${PYSITELIB}/foolscap/broker.py
42${PYSITELIB}/foolscap/broker.pyc 42${PYSITELIB}/foolscap/broker.pyc
43${PYSITELIB}/foolscap/broker.pyo 43${PYSITELIB}/foolscap/broker.pyo
44${PYSITELIB}/foolscap/call.py 44${PYSITELIB}/foolscap/call.py
45${PYSITELIB}/foolscap/call.pyc 45${PYSITELIB}/foolscap/call.pyc
46${PYSITELIB}/foolscap/call.pyo 46${PYSITELIB}/foolscap/call.pyo
47${PYSITELIB}/foolscap/connection.py 47${PYSITELIB}/foolscap/connection.py
48${PYSITELIB}/foolscap/connection.pyc 48${PYSITELIB}/foolscap/connection.pyc
49${PYSITELIB}/foolscap/connection.pyo 49${PYSITELIB}/foolscap/connection.pyo
50${PYSITELIB}/foolscap/connection_plugins.py 50${PYSITELIB}/foolscap/connections/__init__.py
51${PYSITELIB}/foolscap/connection_plugins.pyc 51${PYSITELIB}/foolscap/connections/__init__.pyc
52${PYSITELIB}/foolscap/connection_plugins.pyo 52${PYSITELIB}/foolscap/connections/__init__.pyo
 53${PYSITELIB}/foolscap/connections/i2p.py
 54${PYSITELIB}/foolscap/connections/i2p.pyc
 55${PYSITELIB}/foolscap/connections/i2p.pyo
 56${PYSITELIB}/foolscap/connections/socks.py
 57${PYSITELIB}/foolscap/connections/socks.pyc
 58${PYSITELIB}/foolscap/connections/socks.pyo
 59${PYSITELIB}/foolscap/connections/tcp.py
 60${PYSITELIB}/foolscap/connections/tcp.pyc
 61${PYSITELIB}/foolscap/connections/tcp.pyo
 62${PYSITELIB}/foolscap/connections/tor.py
 63${PYSITELIB}/foolscap/connections/tor.pyc
 64${PYSITELIB}/foolscap/connections/tor.pyo
53${PYSITELIB}/foolscap/constraint.py 65${PYSITELIB}/foolscap/constraint.py
54${PYSITELIB}/foolscap/constraint.pyc 66${PYSITELIB}/foolscap/constraint.pyc
55${PYSITELIB}/foolscap/constraint.pyo 67${PYSITELIB}/foolscap/constraint.pyo
56${PYSITELIB}/foolscap/copyable.py 68${PYSITELIB}/foolscap/copyable.py
57${PYSITELIB}/foolscap/copyable.pyc 69${PYSITELIB}/foolscap/copyable.pyc
58${PYSITELIB}/foolscap/copyable.pyo 70${PYSITELIB}/foolscap/copyable.pyo
59${PYSITELIB}/foolscap/crypto.py 71${PYSITELIB}/foolscap/crypto.py
60${PYSITELIB}/foolscap/crypto.pyc 72${PYSITELIB}/foolscap/crypto.pyc
61${PYSITELIB}/foolscap/crypto.pyo 73${PYSITELIB}/foolscap/crypto.pyo
62${PYSITELIB}/foolscap/eventual.py 74${PYSITELIB}/foolscap/eventual.py
63${PYSITELIB}/foolscap/eventual.pyc 75${PYSITELIB}/foolscap/eventual.pyc
64${PYSITELIB}/foolscap/eventual.pyo 76${PYSITELIB}/foolscap/eventual.pyo
65${PYSITELIB}/foolscap/furl.py 77${PYSITELIB}/foolscap/furl.py
@@ -178,29 +190,38 @@ ${PYSITELIB}/foolscap/storage.pyc @@ -178,29 +190,38 @@ ${PYSITELIB}/foolscap/storage.pyc
178${PYSITELIB}/foolscap/storage.pyo 190${PYSITELIB}/foolscap/storage.pyo
179${PYSITELIB}/foolscap/stringchain.py 191${PYSITELIB}/foolscap/stringchain.py
180${PYSITELIB}/foolscap/stringchain.pyc 192${PYSITELIB}/foolscap/stringchain.pyc
181${PYSITELIB}/foolscap/stringchain.pyo 193${PYSITELIB}/foolscap/stringchain.pyo
182${PYSITELIB}/foolscap/test/__init__.py 194${PYSITELIB}/foolscap/test/__init__.py
183${PYSITELIB}/foolscap/test/__init__.pyc 195${PYSITELIB}/foolscap/test/__init__.pyc
184${PYSITELIB}/foolscap/test/__init__.pyo 196${PYSITELIB}/foolscap/test/__init__.pyo
185${PYSITELIB}/foolscap/test/apphelper.py 197${PYSITELIB}/foolscap/test/apphelper.py
186${PYSITELIB}/foolscap/test/apphelper.pyc 198${PYSITELIB}/foolscap/test/apphelper.pyc
187${PYSITELIB}/foolscap/test/apphelper.pyo 199${PYSITELIB}/foolscap/test/apphelper.pyo
188${PYSITELIB}/foolscap/test/bench_banana.py 200${PYSITELIB}/foolscap/test/bench_banana.py
189${PYSITELIB}/foolscap/test/bench_banana.pyc 201${PYSITELIB}/foolscap/test/bench_banana.pyc
190${PYSITELIB}/foolscap/test/bench_banana.pyo 202${PYSITELIB}/foolscap/test/bench_banana.pyo
 203${PYSITELIB}/foolscap/test/check-connections-client.py
 204${PYSITELIB}/foolscap/test/check-connections-client.pyc
 205${PYSITELIB}/foolscap/test/check-connections-client.pyo
 206${PYSITELIB}/foolscap/test/check-connections-server.py
 207${PYSITELIB}/foolscap/test/check-connections-server.pyc
 208${PYSITELIB}/foolscap/test/check-connections-server.pyo
191${PYSITELIB}/foolscap/test/common.py 209${PYSITELIB}/foolscap/test/common.py
192${PYSITELIB}/foolscap/test/common.pyc 210${PYSITELIB}/foolscap/test/common.pyc
193${PYSITELIB}/foolscap/test/common.pyo 211${PYSITELIB}/foolscap/test/common.pyo
 212${PYSITELIB}/foolscap/test/run_trial.py
 213${PYSITELIB}/foolscap/test/run_trial.pyc
 214${PYSITELIB}/foolscap/test/run_trial.pyo
194${PYSITELIB}/foolscap/test/test__versions.py 215${PYSITELIB}/foolscap/test/test__versions.py
195${PYSITELIB}/foolscap/test/test__versions.pyc 216${PYSITELIB}/foolscap/test/test__versions.pyc
196${PYSITELIB}/foolscap/test/test__versions.pyo 217${PYSITELIB}/foolscap/test/test__versions.pyo
197${PYSITELIB}/foolscap/test/test_appserver.py 218${PYSITELIB}/foolscap/test/test_appserver.py
198${PYSITELIB}/foolscap/test/test_appserver.pyc 219${PYSITELIB}/foolscap/test/test_appserver.pyc
199${PYSITELIB}/foolscap/test/test_appserver.pyo 220${PYSITELIB}/foolscap/test/test_appserver.pyo
200${PYSITELIB}/foolscap/test/test_banana.py 221${PYSITELIB}/foolscap/test/test_banana.py
201${PYSITELIB}/foolscap/test/test_banana.pyc 222${PYSITELIB}/foolscap/test/test_banana.pyc
202${PYSITELIB}/foolscap/test/test_banana.pyo 223${PYSITELIB}/foolscap/test/test_banana.pyo
203${PYSITELIB}/foolscap/test/test_call.py 224${PYSITELIB}/foolscap/test/test_call.py
204${PYSITELIB}/foolscap/test/test_call.pyc 225${PYSITELIB}/foolscap/test/test_call.pyc
205${PYSITELIB}/foolscap/test/test_call.pyo 226${PYSITELIB}/foolscap/test/test_call.pyo
206${PYSITELIB}/foolscap/test/test_connection.py 227${PYSITELIB}/foolscap/test/test_connection.py
@@ -214,26 +235,29 @@ ${PYSITELIB}/foolscap/test/test_crypto.p @@ -214,26 +235,29 @@ ${PYSITELIB}/foolscap/test/test_crypto.p
214${PYSITELIB}/foolscap/test/test_crypto.pyo 235${PYSITELIB}/foolscap/test/test_crypto.pyo
215${PYSITELIB}/foolscap/test/test_eventual.py 236${PYSITELIB}/foolscap/test/test_eventual.py
216${PYSITELIB}/foolscap/test/test_eventual.pyc 237${PYSITELIB}/foolscap/test/test_eventual.pyc
217${PYSITELIB}/foolscap/test/test_eventual.pyo 238${PYSITELIB}/foolscap/test/test_eventual.pyo
218${PYSITELIB}/foolscap/test/test_gifts.py 239${PYSITELIB}/foolscap/test/test_gifts.py
219${PYSITELIB}/foolscap/test/test_gifts.pyc 240${PYSITELIB}/foolscap/test/test_gifts.pyc
220${PYSITELIB}/foolscap/test/test_gifts.pyo 241${PYSITELIB}/foolscap/test/test_gifts.pyo
221${PYSITELIB}/foolscap/test/test_interfaces.py 242${PYSITELIB}/foolscap/test/test_interfaces.py
222${PYSITELIB}/foolscap/test/test_interfaces.pyc 243${PYSITELIB}/foolscap/test/test_interfaces.pyc
223${PYSITELIB}/foolscap/test/test_interfaces.pyo 244${PYSITELIB}/foolscap/test/test_interfaces.pyo
224${PYSITELIB}/foolscap/test/test_keepalive.py 245${PYSITELIB}/foolscap/test/test_keepalive.py
225${PYSITELIB}/foolscap/test/test_keepalive.pyc 246${PYSITELIB}/foolscap/test/test_keepalive.pyc
226${PYSITELIB}/foolscap/test/test_keepalive.pyo 247${PYSITELIB}/foolscap/test/test_keepalive.pyo
 248${PYSITELIB}/foolscap/test/test_listener.py
 249${PYSITELIB}/foolscap/test/test_listener.pyc
 250${PYSITELIB}/foolscap/test/test_listener.pyo
227${PYSITELIB}/foolscap/test/test_logging.py 251${PYSITELIB}/foolscap/test/test_logging.py
228${PYSITELIB}/foolscap/test/test_logging.pyc 252${PYSITELIB}/foolscap/test/test_logging.pyc
229${PYSITELIB}/foolscap/test/test_logging.pyo 253${PYSITELIB}/foolscap/test/test_logging.pyo
230${PYSITELIB}/foolscap/test/test_loopback.py 254${PYSITELIB}/foolscap/test/test_loopback.py
231${PYSITELIB}/foolscap/test/test_loopback.pyc 255${PYSITELIB}/foolscap/test/test_loopback.pyc
232${PYSITELIB}/foolscap/test/test_loopback.pyo 256${PYSITELIB}/foolscap/test/test_loopback.pyo
233${PYSITELIB}/foolscap/test/test_negotiate.py 257${PYSITELIB}/foolscap/test/test_negotiate.py
234${PYSITELIB}/foolscap/test/test_negotiate.pyc 258${PYSITELIB}/foolscap/test/test_negotiate.pyc
235${PYSITELIB}/foolscap/test/test_negotiate.pyo 259${PYSITELIB}/foolscap/test/test_negotiate.pyo
236${PYSITELIB}/foolscap/test/test_observer.py 260${PYSITELIB}/foolscap/test/test_observer.py
237${PYSITELIB}/foolscap/test/test_observer.pyc 261${PYSITELIB}/foolscap/test/test_observer.pyc
238${PYSITELIB}/foolscap/test/test_observer.pyo 262${PYSITELIB}/foolscap/test/test_observer.pyo
239${PYSITELIB}/foolscap/test/test_pb.py 263${PYSITELIB}/foolscap/test/test_pb.py

cvs diff -r1.12 -r1.13 pkgsrc/net/py-foolscap/distinfo (expand / switch to unified diff)

--- pkgsrc/net/py-foolscap/distinfo 2016/04/13 18:19:49 1.12
+++ pkgsrc/net/py-foolscap/distinfo 2016/09/01 16:54:32 1.13
@@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
1$NetBSD: distinfo,v 1.12 2016/04/13 18:19:49 wiz Exp $ 1$NetBSD: distinfo,v 1.13 2016/09/01 16:54:32 wiz Exp $
2 2
3SHA1 (foolscap-0.11.0.tar.gz) = 0cad5bc18cabffe2c2723c13ce4a268fd2757e41 3SHA1 (foolscap-0.12.2.tar.gz) = 9a2cd49df608ad7e4df58ab66370ce6a118ecfb7
4RMD160 (foolscap-0.11.0.tar.gz) = 1830713de8ea02b4c9bcec84275019a95dccd9d8 4RMD160 (foolscap-0.12.2.tar.gz) = 38bedb4218510a2fc54cee311651808f18716f5f
5SHA512 (foolscap-0.11.0.tar.gz) = 577cd15e7f9207a9675999590cb1189edbdd77a2daee5cab80d66d40b1343bcb338a064eedf372ca7f8a102ed1cef0770923d6dea27dd6c3b37c0717cdc912e8 5SHA512 (foolscap-0.12.2.tar.gz) = fbc66d62fb3828975011c6b6ee9e7caa2d9377859ca214436412b475b20323d5b072c50b7617a0fa603f3c854c06f1871ac830b4228b99feded04e8256c88596
6Size (foolscap-0.11.0.tar.gz) = 491916 bytes 6Size (foolscap-0.12.2.tar.gz) = 505663 bytes