U e5d9�ã @sddlmZmZmZmZmZddlmZddlm Z ddl m Z ddl Z ddlZ ddlZddlZddlZddlZddlZddlZz 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(ƒz e' -¡Wn(e.k �rþe,d)ƒe /d¡YnXW5QRXdS)+é)ÚFaultÚdumpsÚloadsÚ gzip_encodeÚ gzip_decode)ÚBaseHTTPRequestHandler)Úpartial)Ú signatureNTcCsF|r| d¡}n|g}|D]&}| d¡r6td|ƒ‚qt||ƒ}q|S)NÚ.Ú_z(attempt to access private attribute "%s")ÚsplitÚ startswithÚAttributeErrorÚgetattr)ÚobjÚattrÚallow_dotted_namesZattrsÚi©rú%/usr/lib64/python3.8/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..)ÚdirrrrrÚ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©Núutf-8)ÚfuncsÚinstanceÚ allow_noneÚencodingÚuse_builtin_types©Úselfr#r$r%rrrÚ__init__¥s  zSimpleXMLRPCDispatcher.__init__cCs||_||_dS©N)r"r)r'r"rrrrÚ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)r!r.Úsystem_multicallr2rrrÚregister_multicall_functionsìsz3SimpleXMLRPCDispatcher.register_multicall_functionsc CsàzPt||jd�\}}|dk r(|||ƒ}n | ||¡}|f}t|d|j|jd�}Wn€tk r„}zt||j|jd�}W5d}~XYnNt ¡\}} } z$ttdd|| fƒ|j|jd�}W5d}} } XYnX|  |jd¡S)N)r%é)Zmethodresponser#r$)r#r$ú%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ôs0   ÿ ÿþ z*SimpleXMLRPCDispatcher._marshaled_dispatchcCs^t|j ¡ƒ}|jdk rVt|jdƒr8|t|j ¡ƒO}nt|jdƒsV|tt|jƒƒO}t|ƒS)NÚ _listMethodsr:)Úsetr!Úkeysr"ÚhasattrrIrÚsorted)r'Úmethodsrrrr/s   z)SimpleXMLRPCDispatcher.system_listMethodscCsdS)Nzsignatures not supportedr)r'Ú method_namerrrr0/s z-SimpleXMLRPCDispatcher.system_methodSignaturecCsŒd}||jkr|j|}nX|jdk rrt|jdƒr<|j |¡St|jdƒsrzt|j||jƒ}Wntk rpYnX|dkr~dSt |¡SdS)NÚ _methodHelpr:Ú) r!r"rLrPrrrÚpydocÚgetdoc)r'rOrBrrrr1<s$      ýz(SimpleXMLRPCDispatcher.system_methodHelpc Cs¶g}|D]¨}|d}|d}z| | ||¡g¡Wqtk rj}z| |j|jdœ¡W5d}~XYqt ¡\}}} z| dd||fdœ¡W5d}}} XYqXq|S)NZ methodNamerA)Ú faultCodeÚ faultStringr6r7)Úappendr:rrTrUr;r<) r'Z call_listÚresultsZcallrOrArDrErFrGrrrr4[s, ÿÿ ÿÿz'SimpleXMLRPCDispatcher.system_multicallcCs®z|j|}Wntk r"YnX|dk r4||ŽStd|ƒ‚|jdk ržt|jdƒrd|j ||¡Szt|j||jƒ}Wntk rŒYnX|dk rž||ŽStd|ƒ‚dS)Nzmethod "%s" is not supportedr:) r!ÚKeyErrorÚ Exceptionr"rLr:rrr)r'rBrAÚfuncrrrr:s*   ýz SimpleXMLRPCDispatcher._dispatch)FNF)F)NN)NN)r-Ú __module__Ú __qualname__r(r*r,r3r5rHr/r0r1r4r:rrrrrœ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 cCs^i}|j dd¡}| d¡D]<}|j |¡}|r| d¡}|rFt|ƒnd}||| d¡<q|S)NzAccept-EncodingrQú,égð?r6)ÚheadersÚgetr Ú aepatternÚmatchÚgroupÚfloat)r'ÚrZaeÚereÚvrrrÚaccept_encodingsËs  z+SimpleXMLRPCRequestHandler.accept_encodingscCs|jr|j|jkSdSdS)NT)Ú rpc_pathsr@r2rrrÚis_rpc_path_validÖs z,SimpleXMLRPCRequestHandler.is_rpc_path_validc CsÜ| ¡s| ¡dSz’d}t|jdƒ}g}|rht||ƒ}|j |¡}|sLqh| |¡|t|dƒ8}q,d  |¡}|  |¡}|dkrŠWdS|j   |t |ddƒ|j¡}Wn�tk �r6}zp| d¡t|j dƒ�r|j j�r| dt|ƒ¡t ¡} t|  d d ¡d ƒ} | d | ¡| d d ¡| ¡W5d}~XYn¢X| d¡| dd¡|jdk �r°t|ƒ|jk�r°| ¡ dd¡} | �r°zt|ƒ}| dd¡Wntk �r®YnX| d tt|ƒƒ¡| ¡|j |¡dS)Ni zcontent-lengthr_ór:iôÚ_send_traceback_headerz X-exceptionÚASCIIÚbackslashreplacez X-tracebackúContent-lengthÚ0éÈú Content-typeztext/xmlÚgziprzContent-Encoding) rmÚ report_404ÚintrbÚminZrfileÚreadrVÚlenÚjoinÚdecode_request_contentÚserverrHrr@rYÚ send_responserLroÚ send_headerÚstrÚ tracebackÚ format_excr=Ú end_headersÚencode_thresholdrkrcrÚNotImplementedErrorÚwfileÚwrite) r'Zmax_chunk_sizeZsize_remainingÚLZ chunk_sizeÚchunkr>rCriZtraceÚqrrrÚdo_POSTÝs`      ÿ ÿ     z"SimpleXMLRPCRequestHandler.do_POSTcCsž|j dd¡ ¡}|dkr|S|dkrvz t|ƒWStk rT| dd|¡Yq†tk rr| dd¡Yq†Xn| dd|¡| dd ¡| ¡dS) Nzcontent-encodingZidentityrviõzencoding %r not supportedé�zerror decoding gzip contentrrrs) rbrcÚlowerrr†rÚ ValueErrorr€r„)r'r>r$rrrr}$s  z1SimpleXMLRPCRequestHandler.decode_request_contentcCsF| d¡d}| dd¡| dtt|ƒƒ¡| ¡|j |¡dS)Ni”s No such pageruz text/plainrr)rr€r�r{r„r‡rˆ©r'rCrrrrw5s   z%SimpleXMLRPCRequestHandler.report_404ú-cCs|jjrt |||¡dSr))r~Ú logRequestsrÚ log_request)r'ÚcodeÚsizerrrr“>sz&SimpleXMLRPCRequestHandler.log_requestN)r‘r‘)r-r[r\rlr…ZwbufsizeZdisable_nagle_algorithmÚreÚcompileÚVERBOSEÚ IGNORECASErdrkrmrŒr}rwr“rrrrr]²s  ý G r]c@s*eZdZdZdZedddddfdd„ZdS)ÚSimpleXMLRPCServerTFNcCs,||_t ||||¡tj ||||¡dSr))r’rr(Ú socketserverÚ TCPServer©r'ZaddrZrequestHandlerr’r#r$Zbind_and_activater%rrrr(WszSimpleXMLRPCServer.__init__)r-r[r\Zallow_reuse_addressror]r(rrrrršDs þršc@s<eZdZedddddfdd„Zdd„Zdd „Zd d d „ZdS) ÚMultiPathXMLRPCServerTFNc Cs2t ||||||||¡i|_||_|p*d|_dSr)ršr(Ú dispatchersr#r$r�rrrr(hsÿzMultiPathXMLRPCServer.__init__cCs||j|<|Sr)©rŸ)r'r@Ú dispatcherrrrÚadd_dispatcherrs z$MultiPathXMLRPCServer.add_dispatchercCs |j|Sr)r )r'r@rrrÚget_dispatchervsz$MultiPathXMLRPCServer.get_dispatcherc Cs|z|j| |||¡}Wn^t ¡dd…\}}z2ttdd||fƒ|j|jd�}| |jd¡}W5d}}XYnX|S)Nér6r7r8r9) rŸrHr;r<rrr$r#r=)r'r>r?r@rCrErFrrrrHys" ÿþz)MultiPathXMLRPCServer._marshaled_dispatch)NN)r-r[r\r]r(r¢r£rHrrrrrž`sþ ržc@s0eZdZd dd„Zdd„Zdd„Zd d d „ZdS) ÚCGIXMLRPCRequestHandlerFNcCst ||||¡dSr))rr(r&rrrr(�sz CGIXMLRPCRequestHandler.__init__cCsP| |¡}tdƒtdt|ƒƒtƒtj ¡tjj |¡tjj ¡dS)NzContent-Type: text/xmlúContent-Length: %d)rHÚprintr{r;ÚstdoutÚflushÚbufferrˆ)r'Ú request_textrCrrrÚ 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)Nr�)r”ÚmessageÚexplainr z Status: %d %szContent-Type: %sr¦)rZ responsesÚhttpr~ZDEFAULT_ERROR_MESSAGEr=r§ZDEFAULT_ERROR_CONTENT_TYPEr{r;r¨r©rªrˆ)r'r”r­r®rCrrrÚ handle_getžs ýÿ  z"CGIXMLRPCRequestHandler.handle_getc Csz|dkr$tj dd¡dkr$| ¡nRzttj dd¡ƒ}Wnttfk rVd}YnX|dkrltj  |¡}|  |¡dS)NZREQUEST_METHODZGETZCONTENT_LENGTHr_) ÚosÚenvironrcr°rxr�Ú TypeErrorr;Ústdinrzr¬)r'r«ZlengthrrrÚhandle_request·sÿ   z&CGIXMLRPCRequestHandler.handle_request)FNF)N)r-r[r\r(r¬r°rµrrrrr¥Œs  r¥c@s:eZdZdiiifdd„Zdiiidfdd„Zdd„ZdS)Ú ServerHTMLDocNcCsZ|p|j}g}d}t d¡}| ||¡} | s0�q:|  ¡\} } | |||| …ƒ¡|  ¡\} } }}}}| rŽ|| ƒ dd¡}| d||f¡n¦|r¶dt|ƒ}| d||| ƒf¡n~|rÞdt|ƒ}| d||| ƒf¡nV|| | d…d k�r | |  ||||¡¡n(|�r"| d |¡n| |  ||¡¡| }q| |||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/r6ú(zself.%srQ) Úescaper–r—ÚsearchÚspanrVÚgroupsÚreplacerxZnamelinkr|)r'Útextr¹r!ÚclassesrNrWÚhereÚpatternreÚstartÚendÚallZschemeZrfcZpepZselfdotr+ZurlrrrÚmarkupÔs6      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) NrQr‘z$%sz(...)rr6z'%sz
%s
z
%s
%s
) r-r¹rr�r Ú isinstanceÚtuplerRrSZgreyrÅÚ preformat)r'Úobjectr+Úmodr!r¿rNZclZanchorZnoteÚtitleZargspecZ docstringZdeclÚdocrrrÚ docroutineýs2ÿ   ÿÿ zServerHTMLDoc.docroutinec CsÈi}| ¡D] \}}d|||<||||<q | |¡}d|}| |dd¡}| ||j|¡} | ohd| } |d| }g} t| ¡ƒ} | D]\}}|  |j|||d�¡qŠ|| ddd d   | ¡¡}|S) Nz#-z)%sz#ffffffz#7799eez %sz

%s

)r!ZMethodsz#eeaa77rQ) Úitemsr¹ZheadingrÅrÈrMrVrÍZ bigsectionr|) r'Ú server_nameZpackage_documentationrNZfdictÚkeyÚvalueÚheadÚresultrÌÚcontentsZ method_itemsrrrÚ docservers*      ÿzServerHTMLDoc.docserver)r-r[r\rÅ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_titler2rrrr(:sÿzXMLRPCDocGenerator.__init__cCs ||_dSr))rØ)r'rØrrrÚset_server_titleBsz#XMLRPCDocGenerator.set_server_titlecCs ||_dSr))rÏ)r'rÏrrrÚset_server_nameGsz"XMLRPCDocGenerator.set_server_namecCs ||_dSr))r×)r'r×rrrÚset_server_documentationLsz+XMLRPCDocGenerator.set_server_documentationc Csúi}| ¡D]À}||jkr&|j|}nž|jdk rÄddg}t|jdƒrT|j |¡|d<t|jdƒrp|j |¡|d<t|ƒ}|dkr†|}qÄt|jdƒs¾zt|j|ƒ}WqÂtk rº|}YqÂXqÄ|}n|||<q t ƒ}|  |j |j |¡}|  t |j¡|¡S)NÚ_get_method_argstringrrPr6)NNr:)r/r!r"rLrÜrPrÇrrr¶rÕrÏr×ZpageÚhtmlr¹rØ)r'rNrOrBZ method_infoZ documenterZ documentationrrrÚgenerate_html_documentationQs<        þ  ýz.XMLRPCDocGenerator.generate_html_documentationN)r-r[r\r(rÙrÚrÛrÞrrrrrÖ3s rÖc@seZdZdd„ZdS)ÚDocXMLRPCRequestHandlercCsf| ¡s| ¡dS|j ¡ d¡}| d¡| dd¡| dtt|ƒƒ¡|  ¡|j   |¡dS)Nr rtruz text/htmlrr) rmrwr~rÞr=rr€r�r{r„r‡rˆr�rrrÚdo_GETŽs  zDocXMLRPCRequestHandler.do_GETN)r-r[r\ràrrrrrß„s rßc@s"eZdZedddddfdd„ZdS)ÚDocXMLRPCServerTFNc Cs&t ||||||||¡t |¡dSr))ršr(rÖr�rrrr(¨s þzDocXMLRPCServer.__init__)r-r[r\rßr(rrrrrá sþrác@seZdZdd„Zdd„ZdS)ÚDocCGIXMLRPCRequestHandlercCsT| ¡ d¡}tdƒtdt|ƒƒtƒtj ¡tjj |¡tjj ¡dS)Nr zContent-Type: text/htmlr¦) rÞr=r§r{r;r¨r©rªrˆr�rrrr°µs z%DocCGIXMLRPCRequestHandler.handle_getcCst |¡t |¡dSr))r¥r(rÖr2rrrr(Ås z#DocCGIXMLRPCRequestHandler.__init__N)r-r[r\r°r(rrrrrâ°srâÚ__main__c@s"eZdZdd„ZGdd„dƒZdS)ÚExampleServicecCsdS)NZ42rr2rrrÚgetDataÎszExampleService.getDatac@seZdZedd„ƒZdS)zExampleService.currentTimecCs tj ¡Sr))ÚdatetimeZnowrrrrÚgetCurrentTimeÒsz)ExampleService.currentTime.getCurrentTimeN)r-r[r\Ú staticmethodrçrrrrÚ currentTimeÑsréN)r-r[r\rårérrrrräÍsrä)Z localhosti@cCs||Sr)r)ÚxÚyrrrÚØrnrìÚ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›r;r±r–rRr‚ZfcntlÚ ImportErrorrrrr]rœršržr¥ZHTMLDocr¶rÖrßrárâr-rærär~r,Úpowr*r5r§Z serve_foreverÚKeyboardInterruptÚexitrrrrÚksf      ÿ,EbQ ÿ ÿ