Source code for txsocksx.tls

# Copyright (c) Aaron Gallagher <_@habnab.it>
# See COPYING for details.

"""TLS convenience wrappers for endpoints.

"""


from twisted.protocols import tls
from twisted.internet import interfaces
from zope.interface import implementer


@implementer(interfaces.IStreamClientEndpoint)
[docs]class TLSWrapClientEndpoint(object): """An endpoint which automatically starts TLS. :param contextFactory: A `ContextFactory`__ instance. :param wrappedEndpoint: The endpoint to wrap. __ http://twistedmatrix.com/documents/current/api/twisted.internet.protocol.ClientFactory.html """ _wrapper = tls.TLSMemoryBIOFactory def __init__(self, contextFactory, wrappedEndpoint): self.contextFactory = contextFactory self.wrappedEndpoint = wrappedEndpoint
[docs] def connect(self, fac): """Connect to the wrapped endpoint, then start TLS. The TLS negotiation is done by way of wrapping the provided factory with `TLSMemoryBIOFactory`__ during connection. :returns: A ``Deferred`` which fires with the same ``Protocol`` as ``wrappedEndpoint.connect(fac)`` fires with. If that ``Deferred`` errbacks, so will the returned deferred. __ http://twistedmatrix.com/documents/current/api/twisted.protocols.tls.html """ fac = self._wrapper(self.contextFactory, True, fac) return self.wrappedEndpoint.connect(fac).addCallback(self._unwrapProtocol)
def _unwrapProtocol(self, proto): return proto.wrappedProtocol