o
    bC	                     @   sv   d Z ddlmZ ddlmZ G dd dejZG dd deZG dd	 d	ejZ	G d
d deZ
G dd dejZdS )z
A simple port forwarder.
    )protocol)logc                   @   s,   e Zd ZdZdZdd Zdd Zdd ZdS )	ProxyTNc                 C   
   || _ d S N)peer)selfr    r	   ?/usr/lib/python3/dist-packages/twisted/protocols/portforward.pysetPeer      
zProxy.setPeerc                 C   s>   | j d ur| j j  d | _ d S | jrtd|  d S d S )NzUnable to connect to peer: )r   	transportloseConnectionnoisyr   msg)r   reasonr	   r	   r
   connectionLost   s   

zProxy.connectionLostc                 C   s   | j j| d S r   )r   r   write)r   datar	   r	   r
   dataReceived   s   zProxy.dataReceived)__name__
__module____qualname__r   r   r   r   r   r	   r	   r	   r
   r      s    r   c                   @   s   e Zd Zdd ZdS )ProxyClientc                 C   s@   | j |  | j| j jd | j j| jd | j j  d S )NT)r   r   r   registerProducerresumeProducing)r   r	   r	   r
   connectionMade!   s   zProxyClient.connectionMadeN)r   r   r   r   r	   r	   r	   r
   r       s    r   c                   @   s(   e Zd ZeZdd Zdd Zdd ZdS )ProxyClientFactoryc                 C   r   r   )server)r   r   r	   r	   r
   	setServer3   r   zProxyClientFactory.setServerc                 O   s*   t jj| g|R i |}|| j |S r   )r   ClientFactorybuildProtocolr   r   )r   argskwprotr	   r	   r
   r!   6   s   z ProxyClientFactory.buildProtocolc                 C   s   | j j  d S r   )r   r   r   )r   	connectorr   r	   r	   r
   clientConnectionFailed;   s   z)ProxyClientFactory.clientConnectionFailedN)r   r   r   r   r   r   r!   r&   r	   r	   r	   r
   r   /   s
    r   c                   @   s   e Zd ZeZdZdd ZdS )ProxyServerNc                 C   sT   | j   |  }||  | jd u rddlm} || _| j| jj| jj	| d S )Nr   )reactor)
r   pauseProducingclientProtocolFactoryr   r(   twisted.internet
connectTCPfactoryhostport)r   clientr(   r	   r	   r
   r   D   s   


zProxyServer.connectionMade)r   r   r   r   r*   r(   r   r	   r	   r	   r
   r'   ?   s    r'   c                   @   s   e Zd ZdZeZdd ZdS )ProxyFactoryz%
    Factory for port forwarder.
    c                 C   s   || _ || _d S r   )r.   r/   )r   r.   r/   r	   r	   r
   __init__Z   s   
zProxyFactory.__init__N)r   r   r   __doc__r'   r   r2   r	   r	   r	   r
   r1   S   s    r1   N)r3   r+   r   twisted.pythonr   Protocolr   r   r    r   r'   Factoryr1   r	   r	   r	   r
   <module>   s   