3 \�i�@sdZddlZddlZddlZddlZddlZy ddlZWnek rTddlZYnXddl m Z ddl m Z ddddd d d d d g Z eed�r�e jdddg�eed�r�e jddddg�eed�r�ejZnejZGdd�d�ZGdd�de�ZGdd�de�Zeed��rGdd�d�ZGdd �d �Zeed��rXGdd�dee�ZGdd�dee�ZGdd�dee�ZGd d �d ee�Zeed��r�Gd!d�de�ZGd"d�de�ZGd#d�dee�ZGd$d�dee�ZGd%d �d �Z Gd&d �d e �Z!Gd'd(�d(e �Z"Gd)d �d e �Z#dS)*z0.4�N)�BufferedIOBase)� monotonic� BaseServer� TCPServer� UDPServer�ThreadingUDPServer�ThreadingTCPServer�BaseRequestHandler�StreamRequestHandler�DatagramRequestHandler�ThreadingMixIn�fork�ForkingUDPServer�ForkingTCPServer� ForkingMixIn�AF_UNIX�UnixStreamServer�UnixDatagramServer�ThreadingUnixStreamServer�ThreadingUnixDatagramServer� PollSelectorc@s�eZdZdZdd�Zdd�Zd%dd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�ZdS)&rNcCs ||_||_tj�|_d|_dS)NF)�server_address�RequestHandlerClass� threadingZEvent�_BaseServer__is_shut_down�_BaseServer__shutdown_request)�selfrr�r�$/usr/lib64/python3.6/socketserver.py�__init__�s zBaseServer.__init__cCsdS)Nr)rrrr�server_activate�szBaseServer.server_activate��?cCsx|jj�zVt��F}|j|tj�x0|jsR|j|�}|jrrrrr8QszBaseServer.verify_requestcCs|j||�|j|�dS)N)�finish_requestr<)rr=r>rrrr9Ys zBaseServer.process_requestcCsdS)Nr)rrrr� server_closebszBaseServer.server_closecCs|j|||�dS)N)r)rr=r>rrrr?jszBaseServer.finish_requestcCs|j|�dS)N)� close_request)rr=rrrr<nszBaseServer.shutdown_requestcCsdS)Nr)rr=rrrrArszBaseServer.close_requestcCsHtddtjd�td|tjd�ddl}|j�tddtjd�dS)N�-�()�filez4Exception happened during processing of request fromr)�print�sys�stderr� traceback� print_exc)rr=r>rHrrrr;vs  zBaseServer.handle_errorcCs|S)Nr)rrrr� __enter__�szBaseServer.__enter__cGs |j�dS)N)r@)r�argsrrr�__exit__�szBaseServer.__exit__)r!)�__name__� __module__� __qualname__r1rr r-r/r)r5r(r4r8r9r@r?r<rAr;rJrLrrrrr�s$-    c@sbeZdZejZejZdZdZ ddd�Z dd�Z dd �Z d d �Z d d �Zdd�Zdd�Zdd�ZdS)r�FTc CsTtj|||�tj|j|j�|_|rPy|j�|j�Wn|j��YnXdS)N)rrr0�address_family� socket_type� server_bindr r@)rrrZbind_and_activaterrrr�s  zTCPServer.__init__cCs8|jr|jjtjtjd�|jj|j�|jj�|_dS)N�)�allow_reuse_addressr0� setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrZ getsockname)rrrrrS�szTCPServer.server_bindcCs|jj|j�dS)N)r0Zlisten�request_queue_size)rrrrr �szTCPServer.server_activatecCs|jj�dS)N)r0�close)rrrrr@�szTCPServer.server_closecCs |jj�S)N)r0�fileno)rrrrrY�szTCPServer.filenocCs |jj�S)N)r0Zaccept)rrrrr6�szTCPServer.get_requestc Cs4y|jtj�Wntk r$YnX|j|�dS)N)r/r0ZSHUT_WRr7rA)rr=rrrr<�s zTCPServer.shutdown_requestcCs |j�dS)N)rX)rr=rrrrAszTCPServer.close_requestN)T)rMrNrOr0ZAF_INETrQZ SOCK_STREAMrRrWrUrrSr r@rYr6r<rArrrrr�s/   c@s:eZdZdZejZdZdd�Zdd�Z dd�Z d d �Z d S) rFi cCs |jj|j�\}}||jf|fS)N)r0Zrecvfrom�max_packet_size)r�dataZ client_addrrrrr6szUDPServer.get_requestcCsdS)Nr)rrrrr szUDPServer.server_activatecCs|j|�dS)N)rA)rr=rrrr<szUDPServer.shutdown_requestcCsdS)Nr)rr=rrrrAszUDPServer.close_requestN) rMrNrOrUr0Z SOCK_DGRAMrRrZr6r r<rArrrrrscsReZdZdZdZdZdZdd�dd�Zdd �Zd d �Z d d �Z �fdd�Z �Z S)ri,NrCF)�blockingc Cs�|jdkrdSxht|j�|jkrvy tjdd�\}}|jj|�Wqtk r^|jj�Yqtk rrPYqXqWxt|jj �D]f}y.|r�dntj }tj||�\}}|jj|�Wq�tk r�|jj|�Yq�tk r�Yq�Xq�WdS)NrTr�����) �active_children�len� max_children�os�waitpid�discard�ChildProcessErrorr"r7�copy�WNOHANG)rr\�pid�_�flagsrrr�collect_children,s&  zForkingMixIn.collect_childrencCs |j�dS)N)rj)rrrrr4OszForkingMixIn.handle_timeoutcCs |j�dS)N)rj)rrrrr)VszForkingMixIn.service_actionscCs�tj�}|r8|jdkrt�|_|jj|�|j|�dSd}z:y|j||�d}Wn tk rr|j||�YnXWdz|j |�Wdtj |�XXdS)NrTr) rar r^r*�addrAr?r:r;r<�_exit)rr=r>rgZstatusrrrr9]s     zForkingMixIn.process_requestcst�j�|j|jd�dS)N)r\)�superr@rj�_block_on_close)r)� __class__rrr@vs zForkingMixIn.server_close) rMrNrOr1r^r`rnrjr4r)r9r@� __classcell__rr)rorr#s#cs8eZdZdZdZdZdd�Zdd�Z�fdd�Z�Z S) r FNcCsHz6y|j||�Wn tk r2|j||�YnXWd|j|�XdS)N)r?r:r;r<)rr=r>rrr�process_request_thread�s z%ThreadingMixIn.process_request_threadcCsRtj|j||fd�}|j|_|j rF|jrF|jdkr:g|_|jj|�|j�dS)N)�targetrK) rZThreadrq�daemon_threadsZdaemonrn�_threads�append�start)rr=r>�trrrr9�s   zThreadingMixIn.process_requestcs:t�j�|jr6|j}d|_|r6x|D] }|j�q&WdS)N)rmr@rnrt�join)rZthreadsZthread)rorrr@�s  zThreadingMixIn.server_close) rMrNrOrsrnrtrqr9r@rprr)rorr {s   c@s eZdZdS)rN)rMrNrOrrrrr�sc@s eZdZdS)rN)rMrNrOrrrrr�sc@s eZdZdS)rN)rMrNrOrrrrr�sc@s eZdZdS)rN)rMrNrOrrrrr�sc@seZdZejZdS)rN)rMrNrOr0rrQrrrrr�sc@seZdZejZdS)rN)rMrNrOr0rrQrrrrr�sc@s eZdZdS)rN)rMrNrOrrrrr�sc@s eZdZdS)rN)rMrNrOrrrrr�sc@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) r c Cs6||_||_||_|j�z |j�Wd|j�XdS)N)r=r>�server�setup�handle�finish)rr=r>ryrrrr�s zBaseRequestHandler.__init__cCsdS)Nr)rrrrrz�szBaseRequestHandler.setupcCsdS)Nr)rrrrr{�szBaseRequestHandler.handlecCsdS)Nr)rrrrr|�szBaseRequestHandler.finishN)rMrNrOrrzr{r|rrrrr �s c@s,eZdZd ZdZdZdZdd�Zdd�ZdS) r rTrNFcCsz|j|_|jdk r |jj|j�|jr:|jjtjtjd�|jj d|j �|_ |j dkrdt |j�|_n|jj d|j �|_dS)NT�rbr�wb)r=Z connectionr1Z settimeout�disable_nagle_algorithmrVr0Z IPPROTO_TCPZ TCP_NODELAY�makefile�rbufsize�rfile�wbufsize� _SocketWriter�wfile)rrrrrz�s    zStreamRequestHandler.setupc CsF|jjs.y|jj�Wntjk r,YnX|jj�|jj�dS)N)r��closed�flushr0�errorrXr�)rrrrr| s zStreamRequestHandler.finishr]) rMrNrOr�r�r1rrzr|rrrrr �s   c@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) r�cCs ||_dS)N)�_sock)rZsockrrrrsz_SocketWriter.__init__cCsdS)NTr)rrrr�writablesz_SocketWriter.writablec Cs&|jj|�t|��}|jSQRXdS)N)r�Zsendall� memoryview�nbytes)r�bZviewrrr�write"s  z_SocketWriter.writecCs |jj�S)N)r�rY)rrrrrY'sz_SocketWriter.filenoN)rMrNrOrr�r�rYrrrrr�sr�c@seZdZdd�Zdd�ZdS)r cCs2ddlm}|j\|_|_||j�|_|�|_dS)Nr)�BytesIO)�ior�r=Zpacketr0r�r�)rr�rrrrz.s  zDatagramRequestHandler.setupcCs|jj|jj�|j�dS)N)r0Zsendtor��getvaluer>)rrrrr|4szDatagramRequestHandler.finishN)rMrNrOrzr|rrrrr *s)$� __version__r0r%ra�errnorFr� ImportErrorZdummy_threadingr�rr3r�__all__�hasattr�extendrr#ZSelectSelectorrrrrr rrrrrrrrr r r�r rrrr�{sZ      n~ X.  .-