Source code for txsocksx.tls

# Copyright (c) Aaron Gallagher <>
# See COPYING for details.

"""TLS convenience wrappers for endpoints.


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

[docs]class TLSWrapClientEndpoint(object): """An endpoint which automatically starts TLS. :param contextFactory: A `ContextFactory`__ instance. :param wrappedEndpoint: The endpoint to wrap. __ """ _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. __ """ fac = self._wrapper(self.contextFactory, True, fac) return self.wrappedEndpoint.connect(fac).addCallback(self._unwrapProtocol)
def _unwrapProtocol(self, proto): return proto.wrappedProtocol