ó
L]c           @  sµ   d  Z  d d l m Z d d l Z d d l Z y d d l Z Wn e k
 r] d d l Z n Xe j d ƒ Z	 d e j
 f d „  ƒ  YZ d e j f d „  ƒ  YZ d	 „  Z d
 g Z d S(   s  
Sample script showing how to do local port forwarding over paramiko.

This script connects to the requested SSH server and sets up local port
forwarding (the openssh -L option) from a local port through a tunneled
connection to a destination reachable from the SSH server machine.
iÿÿÿÿ(   t   print_functionNt   ssht   ForwardServerc           B  s   e  Z e Z e Z RS(    (   t   __name__t
   __module__t   Truet   daemon_threadst   allow_reuse_address(    (    (    s.   lib/python2.7/site-packages/zmq/ssh/forward.pyR   '   s   t   Handlerc           B  s   e  Z d  „  Z RS(   c         C  s·  y1 |  j  j d |  j |  j f |  j j ƒ  ƒ } Wn: t k
 rm } t j d |  j |  j t	 | ƒ f ƒ d  SX| d  k r› t j d |  j |  j f ƒ d  St j d |  j j ƒ  | j ƒ  |  j |  j f f ƒ x¼ t rŽt j |  j | g g  g  ƒ \ } } } |  j | k rG|  j j d ƒ } t | ƒ d k r7Pn  | j | ƒ n  | | k rÓ | j d ƒ } t | ƒ d k rxPn  |  j j | ƒ qÓ qÓ W| j ƒ  |  j j ƒ  t j d ƒ d  S(   Ns   direct-tcpips$   Incoming request to %s:%d failed: %ss9   Incoming request to %s:%d was rejected by the SSH server.s&   Connected!  Tunnel open %r -> %r -> %ri   i    s   Tunnel closed (   t   ssh_transportt   open_channelt
   chain_hostt
   chain_portt   requestt   getpeernamet	   Exceptiont   loggert   debugt   reprt   NoneR   t   selectt   recvt   lent   sendt   close(   t   selft   chant   et   rt   wt   xt   data(    (    s.   lib/python2.7/site-packages/zmq/ssh/forward.pyt   handle.   s<    	 	'
(   R   R   R    (    (    (    s.   lib/python2.7/site-packages/zmq/ssh/forward.pyR   ,   s   c           s?   d t  f ‡  ‡ ‡ f d †  ƒ  Y} t d |  f | ƒ j ƒ  d  S(   Nt	   SubHanderc             s   e  Z ˆ  Z ˆ Z ˆ Z RS(    (   R   R   R   R   R	   (    (   t   remote_hostt   remote_portt	   transport(    s.   lib/python2.7/site-packages/zmq/ssh/forward.pyR!   T   s   s	   127.0.0.1(   R   R   t   serve_forever(   t
   local_portR"   R#   R$   R!   (    (   R"   R#   R$   s.   lib/python2.7/site-packages/zmq/ssh/forward.pyt   forward_tunnelP   s    "R'   (   t   __doc__t
   __future__R    t   loggingR   t   socketservert   ImportErrort   SocketServert	   getLoggerR   t   ThreadingTCPServerR   t   BaseRequestHandlerR   R'   t   __all__(    (    (    s.   lib/python2.7/site-packages/zmq/ssh/forward.pyt   <module>   s   $	