U
    @f                     @   s   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 z
ej
 W n ek
rl   de_
Y nX z
ej W n ek
r   de_Y nX G dd dZG d	d
 d
ejZdddZdddZedkreedi  dS )    )InteractiveConsoleN)hubs)	greenlets	get_errnoz>>> z... c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )	FileProxyc                 C   s
   || _ d S N)f)selfr    r
   K/var/www/html/chatgpt/venv/lib/python3.8/site-packages/eventlet/backdoor.py__init__   s    zFileProxy.__init__c                 C   s   dS )NTr
   r	   r
   r
   r   isatty   s    zFileProxy.isattyc                 C   s   d S r   r
   r   r
   r
   r   flush   s    zFileProxy.flushc              
   O   sZ   z"| j j|f|| | j   W n2 tk
rT } zt|tjkrD W 5 d }~X Y nX d S r   )r   writer   OSErrorr   errnoEPIPE)r	   dataakwer
   r
   r   r      s    zFileProxy.writec                 G   s   | j j| ddS )Nz

)r   readlinereplace)r	   r   r
   r
   r   r   &   s    zFileProxy.readlinec                 C   s   t | j|S r   )getattrr   )r	   attrr
   r
   r   __getattr__)   s    zFileProxy.__getattr__N)	__name__
__module____qualname__r   r   r   r   r   r   r
   r
   r
   r   r      s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )SocketConsolec                 C   s&   || _ || _t|| _tj|  d S r   )hostportlocalsr   descr   greenletr   )r	   r$   r"   r#   r
   r
   r   r   0   s    
zSocketConsole.__init__c                 C   s.   zt| j}|  W 5 |    |   X d S r   )
switch_outfinalizer   r#   Zinteract)r	   consoler
   r
   r   run7   s
    
zSocketConsole.runc                 O   s>   t jt jt jf| _| j t _ t _t _tjj| f|| d S r   )	sysstdinstderrstdoutsavedr$   r   r%   switch)r	   argsr   r
   r
   r   r/   ?   s    zSocketConsole.switchc                 C   s   | j \t_t_t_d S r   )r.   r*   r+   r,   r-   r   r
   r
   r   r&   D   s    zSocketConsole.switch_outc                 C   sF   d | _ t| jdkr:| jd }| jd }td||f  ntd d S )N   r      zbackdoor closed to %s:%szbackdoor closed)r$   lenr"   print)r	   hostportr
   r
   r   r'   G   s    

zSocketConsole.finalizeN)r   r   r    r   r)   r/   r&   r'   r
   r
   r
   r   r!   /   s
   r!   c              
   C   s   |   }| jtjkrd| }n$| jtjkrB|\}}}}d||f }td|f  zld}zNz|  }t|| W n2 t	k
r } zt
|tjkr W 5 d}~X Y nX W 5 |r|d   X qRW 5 |   X dS )aZ   Blocking function that runs a backdoor server on the socket *sock*,
    accepting connections and running backdoor consoles for each client that
    connects.

    The *locals* argument is a dictionary that will be included in the locals()
    of the interpreters.  It can be convenient to stick important application
    variables in here.
    z%s:%szbackdoor server listening on %sNr   )getsocknamefamilysocketAF_INETAF_INET6r4   closeacceptbackdoorr   r   r   r   )sockr#   Zlistening_onipr6   _
socketpairr   r
   r
   r   backdoor_serverR   s$    	
rC   c           
      C   s   | \}}|j tjkr.|\}}td||f  n2|j tjkrX|\}}}}td||f  ntd |d}t|||}t }	|		d|j
 dS )a  Sets up an interactive console on a socket with a single connected
    client.  This does not block the caller, as it spawns a new greenlet to
    handle the console.  This is meant to be called from within an accept loop
    (such as backdoor_server).
    zbackdoor to %s:%szbackdoor openedrwr   N)r8   r9   r:   r4   r;   makefiler!   r   Zget_hubZschedule_call_globalr/   )
Z	conn_infor#   connaddrr5   r6   rA   flr(   Zhubr
   r
   r   r>   v   s    
r>   __main__)z	127.0.0.1i(#  )N)N)coder   r   r9   r*   Zeventletr   Zeventlet.supportr   r   ps1AttributeErrorZps2r   r%   r!   rC   r>   r   listenr
   r
   r
   r   <module>   s(   

#
$
