ó
[³XMc           @   s¡   d  Z  d d l m Z d d l m Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d e j f d	 „  ƒ  YZ	 d
 e f d „  ƒ  YZ
 d e j f d „  ƒ  YZ d S(   s   
A simple port forwarder.
iÿÿÿÿ(   t   protocol(   t   logt   Proxyc           B   s/   e  Z e Z d Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   peer(   t   selfR   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   setPeer   s    c         C   sO   |  j  d  k	 r+ |  j  j j ƒ  d  |  _  n  |  j rK t j d | f ƒ n  d  S(   Ns   Unable to connect to peer: %s(   R   t   Nonet	   transportt   loseConnectiont   noisyR   t   msg(   R   t   reason(    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   connectionLost   s
    	c         C   s   |  j  j j | ƒ d  S(   N(   R   R   t   write(   R   t   data(    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   dataReceived   s    N(	   t   __name__t
   __module__t   TrueR	   R   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR      s
   		t   ProxyClientc           B   s   e  Z d  „  Z RS(   c         C   s$   |  j  j |  ƒ |  j  j j ƒ  d  S(   N(   R   R   R   t   resumeProducing(   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   connectionMade    s    (   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR      s   t   ProxyClientFactoryc           B   s)   e  Z e Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   server(   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt	   setServer)   s    c         O   s,   t  j j |  | | Ž } | j |  j ƒ | S(   N(   R    t   ClientFactoryt   buildProtocolR   R   (   R   t   argst   kwt   prot(    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR   ,   s    c         C   s   |  j  j j ƒ  d  S(   N(   R   R   R   (   R   t	   connectorR   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   clientConnectionFailed1   s    (   R   R   R   R    R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR   %   s   		t   ProxyServerc           B   s   e  Z e Z d  „  Z RS(   c         C   sY   |  j  j ƒ  |  j ƒ  } | j |  ƒ d d l m } | j |  j j |  j j	 | ƒ d  S(   Niÿÿÿÿ(   t   reactor(
   R   t   pauseProducingt   clientProtocolFactoryR   t   twisted.internetR!   t
   connectTCPt   factoryt   hostt   port(   R   t   clientR!   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR   9   s
    (   R   R   R   R#   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR    5   s   t   ProxyFactoryc           B   s   e  Z d  Z e Z d „  Z RS(   s   Factory for port forwarder.c         C   s   | |  _  | |  _ d  S(   N(   R'   R(   (   R   R'   R(   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   __init__J   s    	(   R   R   t   __doc__R    R    R+   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyR*   E   s   N(   R,   R$   R    t   twisted.pythonR   t   ProtocolR   R   R   R   R    t   FactoryR*   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/protocols/portforward.pyt   <module>   s   