from __future__ import (absolute_import, print_function, division) from ..exceptions import ProtocolException from .. import platform from .layer import Layer, ServerConnectionMixin from .auto import AutoLayer class TransparentProxy(Layer, ServerConnectionMixin): def __init__(self, ctx): super(TransparentProxy, self).__init__(ctx) self.resolver = platform.resolver() def __call__(self): try: self.server_address = self.resolver.original_addr(self.client_conn.connection) except Exception as e: raise ProtocolException("Transparent mode failure: %s" % repr(e), e) layer = AutoLayer(self) for message in layer(): if not self._handle_server_message(message): yield message