On 10:02 am, [email protected] wrote:


Greetings,

My goal is to get Brian Warner's foolscap library ported to Twisted
endpoints instead of the older Twisted api interfaces it currently
uses (ClientFactory and IConnector).

This effort has been documented in foolscap trac ticket #203:
http://foolscap.lothar.com/trac/ticket/203

and also part of Tahoe-LAFS trac ticket #517 - make tahoe Tor- and I2P- friendly:
https://tahoe-lafs.org/trac/tahoe-lafs/ticket/517

My question is this:

Since Foolscap's TubConnectorClientFactory does rely
on clientConnectionFailed... What is the equivalent to this for the new
interfaces?

I have tried to braindump all my foolscap twisted endpoint thoughts to
foolscap trac ticket #203 :
http://foolscap.lothar.com/trac/ticket/203#comment:30
http://foolscap.lothar.com/trac/ticket/203#comment:31

If we look at line 1223 of
https://github.com/warner/foolscap/blob/master/foolscap/negotiate.py
(at 0395476c7cb154f925d67abf6858a8200126352b)

we see that there's this TubConnectorClientFactory:
class TubConnectorClientFactory(protocol.ClientFactory, object):

and later at line 1384 it is used with connectTCP like this:
           f = TubConnectorClientFactory(self, host, lp)
           c = reactor.connectTCP(host, port, f)

It looks like TubConnector is the primary intended user of TubConnectorClientFactory. In this case, you can simply move the logic from TubConnector.clientConnectionFailed to an errback on the Deferred returned by IStreamClientEndpoint.connect. Or you can leave it where it is an just make clientConnectionFailed be that errback.

For example:

   f = TubConnectorClientFactory(self, host, lp)
   d = endpoint.connect(f)
   d.addErrback(self.clientConnectionFailed)

(removing the connector argument from clientConnectionFailed, of course).

You may want to apply a similar transformation to the *success* case here as well. That is, move the code that initiates protocol actions on the connection to a callback on this Deferred instead of automatically starting those actions in buildProtocol (this gives greater flexibility in how the protocol is used - if you want to change the details of initialization you can do so by using a different callback on the endpoint's Deferred instead of having to mess around with the factory or the protocol to disable this stuff).

Jean-Paul

_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to