o
    "if_                     @  s  U d Z ddlmZ ddlZddlZddlmZ zddlZW n ey(   dZY nw er7ddl	m
Z
 ddl	mZ dZdZerNedd	ZejejfZe e_e_d'ddZed d'ddZd(ddZd)d*ddZedkrddlZeejdkr|ejd ZndZddl	mZ ed ZeeeZeed!d" dS ed#kre d$ Z d%e!d&< e j"jZe # Z$e%e$e&e'fsJ ee$eZ(e() Z*e +e* ee( dS dS )+z
start socket based minimal readline exec server

it can exeuted in 2 modes of operation

1. as normal script, that listens for new connections

2. via existing_gateway.remote_exec (as imported module)

    )annotationsN)TYPE_CHECKING)Channel)	ExecModelzsocket_readline_exec_server-1.2z/tmp/execnet-socket-pyout.logwreturnNonec                  G  s   t ddd | D  d S )N c                 s  s    | ]}t |V  qd S )N)str).0arg r   T/var/www/html/corbot_env/lib/python3.10/site-packages/execnet/script/socketserver.py	<genexpr>*   s    zprint_.<locals>.<genexpr>)printjoin)argsr   r   r   print_)   s   r   z/def exec_(source, locs):
    exec(source, locs)c              	   C  s   t td|   |  \}}t tdj|  |d}t d |  }|  ||t	d}t
|}|rVt|d dd}t td	 zt|| W t td
 d S t td
 w d S )NzEntering Accept loopzgot new connection from {} {}rbzreading line)
clientsockaddress	execmodel
z<socket server>execzcompiled source, executingzfinished executing code)r   prognamegetsocknameacceptformatmakefilereadlinerstripcloser   evalcompileexec_)
serversockr   r   
clientfilesourcegcor   r   r   exec_from_one_connection3   s    

r*   hostportstr | tuple[str, int]r   r   c                 C  s   |j }t| tr| d\}}|t|f} | |j|j}ttdr8t|	 tj
}t|	 tj|tjB  tjdkrKtjdkrK||j|jd ||  |d |S )N:
FD_CLOEXECposixcygwin      )socket
isinstancer
   splitintAF_INETSOCK_STREAMhasattrfcntlfilenoF_GETFDF_SETFDr.   osnamesysplatform
setsockopt
SOL_SOCKETSO_REUSEADDRbindlisten)r+   r   r3   hostportr%   oldr   r   r   bind_and_listenI   s   



rJ   Floopboolc              
   C  s   t  }zH	 zt|  W n+ ttfy     ty7 } ztr(dd l}|  nt	d| W Y d }~nd }~ww t 
| |s@nqW t	d | d d S t	d | d w )Nr1   r   zgot exceptionzleaving socketserver execloop   )r>   getcwdr*   KeyboardInterrupt
SystemExitBaseExceptiondebug	traceback	print_excr   chdirshutdown)r%   rK   execute_pathexcrS   r   r   r   startserver\   s.   


rY   __main__r1   z:8888)get_execmodelthreadT)rK   __channelexec__channelr   chan)r   r   )r+   r,   r   r   )F)rK   rL   r   r   ),__doc__
__future__r   r>   r@   typingr   r:   ImportErrorexecnet.gateway_baser   r   r   rR   openfstdoutstderrrI   r   r   r*   rJ   rY   __name__lenargvr+   r[   r   r%   globalsr_   __annotations__gatewayreceivebindnamer4   r
   tuplesockr   rH   sendr   r   r   r   <module>   sZ   






