B YI~d9�� @sddlmZmZmZmZmZddlmZddlm Z ddl m Z ddl Z ddlZ ddlZddlZddlZddlZddlZddlZy ddlZWnek r�dZYnXd*dd�Zd d �ZGd d �d �ZGd d�de�ZGdd�deje�ZGdd�de�ZGdd�de�ZGdd�dej�ZGdd�d�Z Gdd�de�Z!Gdd�dee �Z"Gdd�dee �Z#e$dk�r ddl%Z%Gd d!�d!�Z&ed"��~Z'e'�(e)�e'�(d#d$�d%�e'j*e&�dd&�e'�+�e,d'�e,d(�y e'�-�Wn(e.k �r�e,d)�e�/d�YnXWdQRXdS)+�)�Fault�dumps�loads� gzip_encode� gzip_decode)�BaseHTTPRequestHandler)�partial)� signatureNTcCsJ|r|�d�}n|g}x.|D]&}|�d�r8td|��qt||�}qW|S)N�.�_z(attempt to access private attribute "%s")�split� startswith�AttributeError�getattr)�obj�attr�allow_dotted_namesZattrs�i�r�2/opt/alt/python37/lib64/python3.7/xmlrpc/server.py�resolve_dotted_attribute|s     rcs�fdd�t��D�S)Ncs(g|] }|�d�stt�|��r|�qS)r )r �callabler)�.0�member)rrr� �s z'list_public_methods..)�dir)rr)rr�list_public_methods�src@sleZdZddd�Zddd�Zddd�Zd d �Zd d �Zdd d�Zdd�Z dd�Z dd�Z dd�Z dd�Z dS)�SimpleXMLRPCDispatcherFNcCs&i|_d|_||_|pd|_||_dS)Nzutf-8)�funcs�instance� allow_none�encoding�use_builtin_types)�selfr r!r"rrr�__init__�s  zSimpleXMLRPCDispatcher.__init__cCs||_||_dS)N)rr)r#rrrrr�register_instance�s!z(SimpleXMLRPCDispatcher.register_instancecCs2|dkrt|j|d�S|dkr$|j}||j|<|S)N)�name)r�register_function�__name__r)r#Zfunctionr&rrrr'�s  z(SimpleXMLRPCDispatcher.register_functioncCs|j�|j|j|jd��dS)N)zsystem.listMethodszsystem.methodSignaturezsystem.methodHelp)r�update�system_listMethods�system_methodSignature�system_methodHelp)r#rrr� register_introspection_functions�s z7SimpleXMLRPCDispatcher.register_introspection_functionscCs|j�d|ji�dS)Nzsystem.multicall)rr)�system_multicall)r#rrr�register_multicall_functions�sz3SimpleXMLRPCDispatcher.register_multicall_functionsc Cs�yPt||jd�\}}|dk r(|||�}n |�||�}|f}t|d|j|jd�}Wn�tk r�}zt||j|jd�}Wdd}~XYnNt��\}} } z$ttdd|| f�|j|jd�}Wdd}} } XYnX|� |jd�S)N)r"�)Zmethodresponser r!)r r!z%s:%s)r!r �xmlcharrefreplace) rr"� _dispatchrr r!r�sys�exc_info�encode) r#�data�dispatch_method�path�params�method�response�fault�exc_type� exc_value�exc_tbrrr�_marshaled_dispatch�s&   z*SimpleXMLRPCDispatcher._marshaled_dispatchcCs^t|j���}|jdk rVt|jd�r8|t|j���O}nt|jd�sV|tt|j��O}t|�S)N� _listMethodsr2)�setr�keysr�hasattrrAr�sorted)r#�methodsrrrr*s   z)SimpleXMLRPCDispatcher.system_listMethodscCsdS)Nzsignatures not supportedr)r#� method_namerrrr+/s z-SimpleXMLRPCDispatcher.system_methodSignaturecCs�d}||jkr|j|}nX|jdk rrt|jd�r<|j�|�St|jd�sryt|j||j�}Wntk rpYnX|dkr~dSt�|�SdS)N� _methodHelpr2�) rrrDrHrrr�pydoc�getdoc)r#rGr:rrrr,<s"       z(SimpleXMLRPCDispatcher.system_methodHelpc Cs�g}x�|D]�}|d}|d}y|�|�||�g�Wq tk rl}z|�|j|jd��Wdd}~XYq t��\}}} z|�dd||fd��Wdd}}} XYq Xq W|S)NZ methodNamer9)� faultCode� faultStringr0z%s:%s)�appendr2rrLrMr3r4) r#Z call_list�resultsZcallrGr9r<r=r>r?rrrr.[s$  z'SimpleXMLRPCDispatcher.system_multicallcCs�y|j|}Wntk r"YnX|dk r4||�Std|��|jdk r�t|jd�rd|j�||�Syt|j||j�}Wntk r�YnX|dk r�||�Std|��dS)Nzmethod "%s" is not supportedr2) r�KeyError� ExceptionrrDr2rrr)r#r:r9�funcrrrr2s(    z SimpleXMLRPCDispatcher._dispatch)FNF)F)NN)NN)r(� __module__� __qualname__r$r%r'r-r/r@r*r+r,r.r2rrrrr�s   $   ) $rc@sbeZdZdZdZdZdZe�dej ej B�Z dd�Z dd �Z d d �Zd d �Zdd�Zddd�ZdS)�SimpleXMLRPCRequestHandler)�/z/RPC2ix�����Tz� \s* ([^\s;]+) \s* #content-coding (;\s* q \s*=\s* ([0-9\.]+))? #q cCsbi}|j�dd�}xJ|�d�D]<}|j�|�}|r|�d�}|rHt|�nd}|||�d�<qW|S)NzAccept-EncodingrI�,�g�?r0)�headers�getr � aepattern�match�group�float)r#�rZae�er]�vrrr�accept_encodings�s  z+SimpleXMLRPCRequestHandler.accept_encodingscCs|jr|j|jkSdSdS)NT)� rpc_pathsr8)r#rrr�is_rpc_path_valid�s z,SimpleXMLRPCRequestHandler.is_rpc_path_validc Cs�|��s|��dSy�d}t|jd�}g}x>|rjt||�}|j�|�}|sNP|�|�|t|d�8}q.Wd� |�}|� |�}|dkr�dS|j � |t |dd�|j�}Wn�tk �r8}zp|�d�t|j d��r|j j�r|�dt|��t��} t| �d d �d �} |�d | �|�d d �|��Wdd}~XYn�X|�d�|�dd�|jdk �r�t|�|jk�r�|���dd�} | �r�yt|�}|�dd�Wntk �r�YnX|�d tt|���|��|j�|�dS)Ni�zcontent-lengthrW�r2i��_send_traceback_headerz X-exception�ASCII�backslashreplacez X-tracebackzContent-length�0��z Content-typeztext/xml�gziprzContent-Encoding) re� report_404�intrZ�minZrfile�readrN�len�join�decode_request_content�serverr@rr8rQ� send_responserDrg� send_header�str� traceback� format_excr5� end_headers�encode_thresholdrcr[r�NotImplementedError�wfile�write) r#Zmax_chunk_sizeZsize_remaining�LZ chunk_size�chunkr6r;raZtrace�qrrr�do_POST�sX            z"SimpleXMLRPCRequestHandler.do_POSTcCs�|j�dd���}|dkr|S|dkrtyt|�Stk rR|�dd|�Yq�tk rp|�dd�Yq�Xn|�dd|�|�dd �|��dS) Nzcontent-encoding�identityrli�zencoding %r not supportedi�zerror decoding gzip contentzContent-lengthrj) rZr[�lowerrr|ru� ValueErrorrvrz)r#r6r!rrrrs$s z1SimpleXMLRPCRequestHandler.decode_request_contentcCsF|�d�d}|�dd�|�dtt|���|��|j�|�dS)Ni�s No such pagez Content-typez text/plainzContent-length)rurvrwrqrzr}r~)r#r;rrrrm5s   z%SimpleXMLRPCRequestHandler.report_404�-cCs|jjrt�|||�dS)N)rt� logRequestsr� log_request)r#�code�sizerrrr�>sz&SimpleXMLRPCRequestHandler.log_requestN)r�r�)r(rSrTrdr{ZwbufsizeZdisable_nagle_algorithm�re�compile�VERBOSE� IGNORECASEr\rcrer�rsrmr�rrrrrU�s  G rUc@s*eZdZdZdZedddddfdd�ZdS)�SimpleXMLRPCServerTFNcCs,||_t�||||�tj�||||�dS)N)r�rr$� socketserver� TCPServer)r#�addr�requestHandlerr�r r!�bind_and_activater"rrrr$WszSimpleXMLRPCServer.__init__)r(rSrTZallow_reuse_addressrgrUr$rrrrr�Ds  r�c@s<eZdZedddddfdd�Zdd�Zdd �Zd d d �ZdS) �MultiPathXMLRPCServerTFNc Cs2t�||||||||�i|_||_|p*d|_dS)Nzutf-8)r�r$� dispatchersr r!)r#r�r�r�r r!r�r"rrrr$hs  zMultiPathXMLRPCServer.__init__cCs||j|<|S)N)r�)r#r8Z dispatcherrrr�add_dispatcherrs z$MultiPathXMLRPCServer.add_dispatchercCs |j|S)N)r�)r#r8rrr�get_dispatchervsz$MultiPathXMLRPCServer.get_dispatcherc Cs|y|j|�|||�}Wn^t��dd�\}}z2ttdd||f�|j|jd�}|�|jd�}Wdd}}XYnX|S)N�r0z%s:%s)r!r r1) r�r@r3r4rrr!r r5)r#r6r7r8r;r=r>rrrr@ys z)MultiPathXMLRPCServer._marshaled_dispatch)NN)r(rSrTrUr$r�r�r@rrrrr�`s r�c@s0eZdZd dd�Zdd�Zdd�Zd d d �ZdS) �CGIXMLRPCRequestHandlerFNcCst�||||�dS)N)rr$)r#r r!r"rrrr$�sz CGIXMLRPCRequestHandler.__init__cCsP|�|�}td�tdt|��t�tj��tjj�|�tjj��dS)NzContent-Type: text/xmlzContent-Length: %d)r@�printrqr3�stdout�flush�bufferr~)r#� request_textr;rrr� handle_xmlrpc�s  z%CGIXMLRPCRequestHandler.handle_xmlrpccCs�d}tj|\}}tjj|||d�}|�d�}td||f�tdtjj�tdt|��t�t j � �t j j � |�t j j � �dS)Ni�)r��message�explainzutf-8z Status: %d %szContent-Type: %szContent-Length: %d)rZ responses�httprtZDEFAULT_ERROR_MESSAGEr5r�ZDEFAULT_ERROR_CONTENT_TYPErqr3r�r�r�r~)r#r�r�r�r;rrr� handle_get�s   z"CGIXMLRPCRequestHandler.handle_getc Csz|dkr$tj�dd�dkr$|��nRyttj�dd��}Wnttfk rVd}YnX|dkrltj� |�}|� |�dS)NZREQUEST_METHODZGETZCONTENT_LENGTHrW) �os�environr[r�rnr�� TypeErrorr3�stdinrpr�)r#r��lengthrrr�handle_request�s   z&CGIXMLRPCRequestHandler.handle_request)FNF)N)r(rSrTr$r�r�r�rrrrr��s  r�c@s:eZdZdiiifdd�Zdiiidfdd�Zdd�ZdS)� ServerHTMLDocNcCs^|p|j}g}d}t�d�}�x|�||�} | s2P| ��\} } |�|||| ���| ��\} } }}}}| r�|| ��dd�}|�d||f�n�|r�dt|�}|�d||| �f�n~|r�dt|�}|�d||| �f�nV|| | d�d k�r|�|� ||||��n(|�r$|�d |�n|�|� ||��| }q W|�|||d���d � |�S) NrzM\b((http|ftp)://\S+[\w/]|RFC[- ]?(\d+)|PEP[- ]?(\d+)|(self\.)?((?:\w|\.)+))\b�"z"z%sz'http://www.rfc-editor.org/rfc/rfc%d.txtz(http://www.python.org/dev/peps/pep-%04d/r0�(zself.%srI) �escaper�r��search�spanrN�groups�replacernZnamelinkrr)r#�textr�r�classesrFrO�here�patternr]�start�end�allZschemeZrfcZpepZselfdotr&Zurlrrr�markup�s8      zServerHTMLDoc.markupcCs�|r |jp dd|}d} d|�|�|�|�f} t|�rHtt|��} nd} t|t�rp|dp`| } |dpld} n t�|�} | | | o�|� d| �} |� | |j |||�}|o�d|}d | |fS) NrIr�z$%sz(...)rr0z'%sz
%s
z
%s
%s
) r(r�rrwr � isinstance�tuplerJrKZgreyr�� preformat)r#�objectr&�modrr�rFZclZanchorZnote�titleZargspecZ docstringZdecl�docrrr� docroutine�s"     zServerHTMLDoc.docroutinec Cs�i}x,|��D] \}}d|||<||||<qW|�|�}d|}|�|dd�}|�||j|�} | old| } |d| }g} t|���} x&| D]\}}| �|j|||d��q�W||�ddd d � | ��}|S) Nz#-z)%sz#ffffffz#7799eez %sz

%s

)rZMethodsz#eeaa77rI) �itemsr��headingr�r�rErNr�Z bigsectionrr) r#� server_nameZpackage_documentationrFZfdict�key�value�head�resultr��contentsZ method_itemsrrr� docservers"     zServerHTMLDoc.docserver)r(rSrTr�r�r�rrrrr��s)r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd S) �XMLRPCDocGeneratorcCsd|_d|_d|_dS)NzXML-RPC Server DocumentationzGThis server exports the following methods through the XML-RPC protocol.)r��server_documentation� server_title)r#rrrr$:szXMLRPCDocGenerator.__init__cCs ||_dS)N)r�)r#r�rrr�set_server_titleBsz#XMLRPCDocGenerator.set_server_titlecCs ||_dS)N)r�)r#r�rrr�set_server_nameGsz"XMLRPCDocGenerator.set_server_namecCs ||_dS)N)r�)r#r�rrr�set_server_documentationLsz+XMLRPCDocGenerator.set_server_documentationc Cs�i}x�|��D]�}||jkr(|j|}n�|jdk r�ddg}t|jd�rV|j�|�|d<t|jd�rr|j�|�|d<t|�}|dkr�|}q�t|jd�s�yt|j|�}Wq�tk r�|}Yq�Xq�|}n|||<qWt �}|� |j |j |�}|� t�|j�|�S)N�_get_method_argstringrrHr0)NNr2)r*rrrDr�rHr�rrr�r�r�r�Zpage�htmlr�r�)r#rFrGr:Z method_infoZ documenterZ documentationrrr�generate_html_documentationQs8          z.XMLRPCDocGenerator.generate_html_documentationN)r(rSrTr$r�r�r�r�rrrrr�3s r�c@seZdZdd�ZdS)�DocXMLRPCRequestHandlercCsf|��s|��dS|j���d�}|�d�|�dd�|�dtt|���|� �|j � |�dS)Nzutf-8rkz Content-typez text/htmlzContent-length) rermrtr�r5rurvrwrqrzr}r~)r#r;rrr�do_GET�s  zDocXMLRPCRequestHandler.do_GETN)r(rSrTr�rrrrr��s r�c@s"eZdZedddddfdd�ZdS)�DocXMLRPCServerTFNc Cs&t�||||||||�t�|�dS)N)r�r$r�)r#r�r�r�r r!r�r"rrrr$�s zDocXMLRPCServer.__init__)r(rSrTr�r$rrrrr��sr�c@seZdZdd�Zdd�ZdS)�DocCGIXMLRPCRequestHandlercCsT|���d�}td�tdt|��t�tj��tjj�|�tjj��dS)Nzutf-8zContent-Type: text/htmlzContent-Length: %d) r�r5r�rqr3r�r�r�r~)r#r;rrrr��s z%DocCGIXMLRPCRequestHandler.handle_getcCst�|�t�|�dS)N)r�r$r�)r#rrrr$�s z#DocCGIXMLRPCRequestHandler.__init__N)r(rSrTr�r$rrrrr��sr��__main__c@s"eZdZdd�ZGdd�d�ZdS)�ExampleServicecCsdS)NZ42r)r#rrr�getData�szExampleService.getDatac@seZdZedd��ZdS)zExampleService.currentTimecCs tj��S)N)�datetimeZnowrrrr�getCurrentTime�sz)ExampleService.currentTime.getCurrentTimeN)r(rSrT� staticmethodr�rrrr� currentTime�sr�N)r(rSrTr�r�rrrrr��sr�)Z localhosti@cCs||S)Nr)�x�yrrr��rfr��add)rz&Serving XML-RPC on localhost port 8000zKIt is advisable to run this example server within a secure, closed network.z& Keyboard interrupt received, exiting.)T)0Z xmlrpc.clientrrrrrZ http.serverr� functoolsr�inspectr r�r�r�r3r�r�rJrxZfcntl� ImportErrorrrrrUr�r�r�r�ZHTMLDocr�r�r�r�r�r(r�r�rtr'�powr%r/r�Z serve_forever�KeyboardInterrupt�exitrrrr�ks`      ,EbQ