o ?Og@ @s6 ddlmZmZmZmZmZddlmZddlm Z ddl m Z ddl Z ddlZ ddlZddlZddlZddlZddlZddlZzddlZWn eyRdZYnwd*ddZd d ZGd d d ZGd ddeZGdddejeZGdddeZGdddeZGdddejZGdddZ GdddeZ!Gdddee Z"Gdddee Z#e$dkrddl%Z%Gd d!d!Z&ed"KZ'e'(e)e'(d#d$d%e'j*e&dd&e'+e,d'e,d(ze'-Wne.ye,d)e/dYn wWddSWddS1swYdSdS)+)Faultdumpsloads gzip_encode gzip_decode)BaseHTTPRequestHandler)partial) signatureNTcCsF |r |d}n|g}|D]}|drtd|t||}q|S)N._z(attempt to access private attribute "%s")split startswithAttributeErrorgetattr)objattrallow_dotted_namesZattrsir4/opt/alt/python310/lib64/python3.10/xmlrpc/server.pyresolve_dotted_attribute|s   rcs fddtDS)Ncs(g|]}|dstt|r|qS)r )r callabler).0memberrrr s   z'list_public_methods..)dirrrrrlist_public_methodssrc@sreZdZ  dddZdddZdddZd d Zd d Zdd dZddZ ddZ ddZ ddZ ddZ dS)SimpleXMLRPCDispatcherFNcCs&i|_d|_||_|p d|_||_dSNutf-8)funcsinstance allow_noneencodinguse_builtin_typesselfr#r$r%rrr__init__s   zSimpleXMLRPCDispatcher.__init__cCs ||_||_dSN)r"r)r'r"rrrrregister_instances z(SimpleXMLRPCDispatcher.register_instancecCs4 |dur t|j|dS|dur|j}||j|<|S)N)name)rregister_function__name__r!)r'Zfunctionr+rrrr,s z(SimpleXMLRPCDispatcher.register_functioncCs |j|j|j|jddS)N)zsystem.listMethodszsystem.methodSignaturezsystem.methodHelp)r!updatesystem_listMethodssystem_methodSignaturesystem_methodHelpr'rrr register_introspection_functionss   z7SimpleXMLRPCDispatcher.register_introspection_functionscCs |jd|jidS)Nzsystem.multicall)r!r.system_multicallr2rrrregister_multicall_functionssz3SimpleXMLRPCDispatcher.register_multicall_functionsc Cs z(t||jd\}}|dur|||}n|||}|f}t|d|j|jd}WnEtyD}zt||j|jd}WYd}~n/d}~wt\}} } zttdd|| f|j|jd}Wd}} } nd}} } wY| |jdS)N)r%)Zmethodresponser#r$)r#r$%s:%sr$r#xmlcharrefreplace) rr% _dispatchrr#r$rsysexc_infoencode) r'datadispatch_methodpathparamsmethodresponsefaultexc_type exc_valueexc_tbrrr_marshaled_dispatchs0    z*SimpleXMLRPCDispatcher._marshaled_dispatchcCsf t|j}|jdur/t|jdr |t|jO}t|St|jds/|tt|jO}t|S)N _listMethodsr:)setr!keysr"hasattrrIrsorted)r'methodsrrrr/s   z)SimpleXMLRPCDispatcher.system_listMethodscCs dS)Nzsignatures not supportedr)r' method_namerrrr0/s z-SimpleXMLRPCDispatcher.system_methodSignaturecCs d}||jvr|j|}n+|jdur9t|jdr|j|St|jds9z t|j||j}Wn ty8Ynw|dur?dSt|S)N _methodHelpr:) r!r"rLrPrrrpydocgetdoc)r'rOrBrrrr1<s(        z(SimpleXMLRPCDispatcher.system_methodHelpc Cs g}|D]Y}|d}|d}z ||||gWqty7}z||j|jdWYd}~qd}~wt\}}} z|dd||fdWd}}} nd}}} wYq|S)NZ methodNamerA) faultCode faultStringr6r7)appendr:rrTrUr;r<) r'Z call_listresultsZcallrOrArDrErFrGrrrr4[s0   z'SimpleXMLRPCDispatcher.system_multicallcCs z|j|}Wn tyYnw|dur||Std||jdurNt|jdr2|j||Sz t|j||j}Wn tyEYn w|durN||Std|)Nzmethod "%s" is not supportedr:) r!KeyError Exceptionr"rLr:rrr)r'rBrAfuncrrrr:s0      z SimpleXMLRPCDispatcher._dispatchFNF)FNN)r- __module__ __qualname__r(r*r,r3r5rHr/r0r1r4r:rrrrrs  $ )  $rc@sdeZdZ dZdZdZdZedej ej BZ ddZ dd Z d d Zd d ZddZdddZdS)SimpleXMLRPCRequestHandler)/z/RPC2ixTz \s* ([^\s;]+) \s* #content-coding (;\s* q \s*=\s* ([0-9\.]+))? #q cCs^i}|jdd}|dD]}|j|}|r,|d}|r#t|nd}|||d<q|S)NzAccept-EncodingrQ,g?r6)headersgetr aepatternmatchgroupfloat)r'rZaeergvrrraccept_encodingss  z+SimpleXMLRPCRequestHandler.accept_encodingscCs|jr |j|jvSdS)NT) rpc_pathsr@r2rrris_rpc_path_valids z,SimpleXMLRPCRequestHandler.is_rpc_path_validc Cs |s |dSzJd}t|jd}g}|r6t||}|j|}|s'n|||t|d8}|sd |}| |}|durGWdS|j |t |dd|j}WnGty}z;|dt|j dr|j jr|dt|t} t| d d d } |d | |d d |WYd}~dSd}~ww|d|dd|jdurt||jkr|dd} | rz t|}|ddWn tyYnw|d tt|||j|dS)Nizcontent-lengthrar:i_send_traceback_headerz X-exceptionASCIIbackslashreplacez X-tracebackContent-length0 Content-typeztext/xmlgziprzContent-Encoding) ro report_404intrdminZrfilereadrVlenjoindecode_request_contentserverrHrr@rY send_responserLrq send_headerstr traceback format_excr= end_headersencode_thresholdrmrerNotImplementedErrorwfilewrite) r'Zmax_chunk_sizeZsize_remainingLZ chunk_sizechunkr>rCrkZtraceqrrrdo_POSTsf             z"SimpleXMLRPCRequestHandler.do_POSTcCs|jdd}|dkr|S|dkr8zt|WSty)|dd|Ynty7|ddYn w|dd||dd |dS) Nzcontent-encodingZidentityrxizencoding %r not supportedzerror decoding gzip contentrtru) rdrelowerrrr ValueErrorrr)r'r>r$rrrr$s     z1SimpleXMLRPCRequestHandler.decode_request_contentcCsF|dd}|dd|dtt|||j|dS)Nis No such pagerwz text/plainrt)rrrr}rrrr'rCrrrry5s  z%SimpleXMLRPCRequestHandler.report_404-cCs |jjrt|||dSdSr))r logRequestsr log_request)r'codesizerrrr>sz&SimpleXMLRPCRequestHandler.log_requestN)rr)r-r]r^rnrZwbufsizeZdisable_nagle_algorithmrecompileVERBOSE IGNORECASErfrmrorrryrrrrrr_s  G r_c@s,eZdZ dZdZedddddfddZdS)SimpleXMLRPCServerTFNcCs,||_t||||tj||||dSr))rrr( socketserver TCPServerr'ZaddrZrequestHandlerrr#r$Zbind_and_activater%rrrr(WszSimpleXMLRPCServer.__init__)r-r]r^Zallow_reuse_addressrqr_r(rrrrrDs rc@s>eZdZ edddddfddZddZdd Zd d d ZdS) MultiPathXMLRPCServerTFNc Cs2t||||||||i|_||_|pd|_dSr)rr( dispatchersr#r$rrrrr(hs zMultiPathXMLRPCServer.__init__cCs||j|<|Sr)r)r'r@ dispatcherrrradd_dispatcherrs z$MultiPathXMLRPCServer.add_dispatchercCs |j|Sr)r)r'r@rrrget_dispatchervs z$MultiPathXMLRPCServer.get_dispatcherc Csz |j||||}W|Stdd\}}zttdd||f|j|jd}||jd}Wd}}Y|Sd}}w)Nr6r7r8r9) rrHr;r<rrr$r#r=)r'r>r?r@rCrErFrrrrHys    z)MultiPathXMLRPCServer._marshaled_dispatchr\)r-r]r^r_r(rrrHrrrrr`s  rc@s2eZdZ d ddZddZddZd d d ZdS) CGIXMLRPCRequestHandlerFNcCst||||dSr))rr(r&rrrr(sz CGIXMLRPCRequestHandler.__init__cCsR ||}tdtdt|ttjtjj|tjjdS)NzContent-Type: text/xmlContent-Length: %d)rHprintr}r;stdoutflushbufferr)r' request_textrCrrr handle_xmlrpcs  z%CGIXMLRPCRequestHandler.handle_xmlrpccCs d}tj|\}}tjj|||d}|d}td||ftdtjjtdt|tt j t j j |t j j dS)Nr)rmessageexplainr z Status: %d %szContent-Type: %sr)rZ responseshttprZDEFAULT_ERROR_MESSAGEr=rZDEFAULT_ERROR_CONTENT_TYPEr}r;rrrr)r'rrrrCrrr handle_gets"  z"CGIXMLRPCRequestHandler.handle_getc Cs| |durtjdddkr|dSz ttjdd}Wn ttfy,d}Ynw|dur7tj |}| |dS)NZREQUEST_METHODZGETZCONTENT_LENGTHra) osenvironrerrzr TypeErrorr;stdinr|r)r'rZlengthrrrhandle_requests  z&CGIXMLRPCRequestHandler.handle_requestr[r))r-r]r^r(rrrrrrrrs   rc@s<eZdZ diiifddZdiiidfddZddZdS) ServerHTMLDocNcCsX |p|j}g}d}td} |||} | sn| \} } ||||| | \} } }}}}| rH|| dd}|d||fnQ|r\dt|}|d||| fn=|rpdt|}|d||| fn)|| | dd kr|| ||||n|r|d |n || ||| }q||||dd |S) NrzS\b((http|https|ftp)://\S+[\w/]|RFC[- ]?(\d+)|PEP[- ]?(\d+)|(self\.)?((?:\w|\.)+))\br6"z"z%sz'http://www.rfc-editor.org/rfc/rfc%d.txtz)https://www.python.org/dev/peps/pep-%04d/(zself.%srQ) escaperrsearchspanrVgroupsreplacerzZnamelinkr~)r'textrr!classesrNrWherepatternrgstartendallZschemeZrfcZpepZselfdotr+Zurlrrrmarkups:       zServerHTMLDoc.markupcCs |r|jpdd|}d} d||||f} t|r%tt|} nd} t|tr9|dp1| } |dp7d} nt|} | | | oI| d| } | | |j |||}|oZd|}d | |fS) NrQrz$%sz(...)rr6z'%sz
%s
z
%s
%s
) r-rrrr isinstancetuplerRrSZgreyr preformat)r'objectr+modr!rrNZclZanchorZnotetitleZargspecZ docstringZdecldocrrr docroutines*      zServerHTMLDoc.docroutinec Cs i}|D]\}}d|||<||||<q||}d|}||dd}|||j|} | o5d| } |d| }g} t|} | D]\}}| |j|||dqF||ddd d | }|S) Nz#-z)%sz#ffffffz#7799eez %sz

%s

)r!ZMethodsz#eeaa77rQ) itemsrZheadingrrrMrVrZ bigsectionr~) r' server_nameZpackage_documentationrNZfdictkeyvalueheadresultrcontentsZ method_itemsrrr docservers&      zServerHTMLDoc.docserver)r-r]r^rrrrrrrrs) rc@s6eZdZ ddZddZddZddZd d Zd S) XMLRPCDocGeneratorcCsd|_d|_d|_dS)NzXML-RPC Server DocumentationzGThis server exports the following methods through the XML-RPC protocol.)rserver_documentation server_titler2rrrr(:s zXMLRPCDocGenerator.__init__cC ||_dSr))r)r'rrrrset_server_titleB z#XMLRPCDocGenerator.set_server_titlecCrr))r)r'rrrrset_server_nameGrz"XMLRPCDocGenerator.set_server_namecCrr))r)r'rrrrset_server_documentationLrz+XMLRPCDocGenerator.set_server_documentationc Cs i}|D]]}||jvr|j|}nL|jdur`ddg}t|jdr+|j||d<t|jdr9|j||d<t|}|dkrD|}nt|jds^zt|j|}Wn ty]|}Ynw|}|||<qt }| |j |j |}| t|j|S)N_get_method_argstringrrPr6r\r:)r/r!r"rLrrPrrrrrrrZpagehtmlrr)r'rNrOrBZ method_infoZ documenterZ documentationrrrgenerate_html_documentationQs@         z.XMLRPCDocGenerator.generate_html_documentationN)r-r]r^r(rrrrrrrrr3s rc@seZdZ ddZdS)DocXMLRPCRequestHandlercCsh |s |dS|jd}|d|dd|dtt|| |j |dS)Nr rvrwz text/htmlrt) roryrrr=rrrr}rrrrrrrdo_GETs  zDocXMLRPCRequestHandler.do_GETN)r-r]r^rrrrrrs rc@s$eZdZ edddddfddZdS)DocXMLRPCServerTFNc Cs&t||||||||t|dSr))rr(rrrrrr(s zDocXMLRPCServer.__init__)r-r]r^rr(rrrrrs rc@seZdZ ddZddZdS)DocCGIXMLRPCRequestHandlercCsV |d}tdtdt|ttjtjj|tjjdS)Nr zContent-Type: text/htmlr) rr=rr}r;rrrrrrrrrs z%DocCGIXMLRPCRequestHandler.handle_getcCst|t|dSr))rr(rr2rrrr(s z#DocCGIXMLRPCRequestHandler.__init__N)r-r]r^rr(rrrrrs r__main__c@s"eZdZddZGdddZdS)ExampleServicecCsdS)NZ42rr2rrrgetDataszExampleService.getDatac@seZdZeddZdS)zExampleService.currentTimecCs tjSr))datetimeZnowrrrrgetCurrentTimes z)ExampleService.currentTime.getCurrentTimeN)r-r]r^ staticmethodrrrrr currentTimesrN)r-r]r^rrrrrrrsr)Z localhosti@cCs||Sr)r)xyrrrsradd)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 functoolsrinspectr rrrr;rrrRrZfcntl ImportErrorrrrr_rrrrZHTMLDocrrrrrr-rrrr,powr*r5rZ serve_foreverKeyboardInterruptexitrrrrsxj      ,EbQ       $