a 쑐c|@sZddlZddlZddlZddlmZddlmZmZddlm Z ddl m Z z ddl Z ddl mZmZmZWn*eyddlmZ eZeZeZYn0dZdZGd d d eZGd d d e jZGd ddeZGdddeZGdddeZGdddZd%ddZ d&ddZ!GdddZ"GdddZ#d'dd Z$d(d!d"Z%e#Z&Gd#d$d$Z'dS))N) connections)sstrbstr)SmartIO) UserDictCase)IntType StringTypeListTypez2.8.62.8.6-8.el98.el9c@s eZdZdS) NotProcessedN)__name__ __module__ __qualname__rr2/usr/lib/python3.9/site-packages/rhn/transports.pyr $sr c@seZdZdeZd'ddZd(ddZd d Zd d Zd dZ d)ddZ ddZ ddZ ddZ ddZddZddZd*ddZdd Zd!d"Zd#d$Zd%d&ZdS)+ Transportzrhn.rpclib.py/%srNcCszd|_ddd|_|j||dt|_d|_d|_d|_d|_||_ ||_ d|_ d|_ d|_ d|_d|_||_||_dS)NFrtransferencodingPOST@)Z_use_builtin_types_transport_flagsset_transport_flagsr_headersverbose connectionmethod_langrefreshCallbackprogressCallback bufferSize headers_inresponse_statusresponse_reason _redirectedZ _use_datetimetimeout)selfrrrrZ use_datetimer%rrr__init__*s" zTransport.__init__rcCs||_||_dSNrr )r&rr rrrset_progress_callback?szTransport.set_progress_callbackcCs ||_dSr()r)r&rrrrset_refresh_callbackDszTransport.set_refresh_callbackcCs|dur d}||_dS)Nrr )r&r rrrset_buffer_sizeJszTransport.set_buffer_sizecCs|dvrtd|||_dS)N)ZGETrzUnknown request method %s)IOErrorr)r&rrrr set_methodRs zTransport.set_methodcKs<|j||dur||jd<|dur0||jd<|dS)Nrr)rupdatevalidate_transport_flagsr&rrkwargsrrrrXs    zTransport.set_transport_flagscCs |jSr()rcopyr&rrrget_transport_flagscszTransport.get_transport_flagscCsH|jd}t|dd}||jd<|jd}t|dd}||jd<dS)Nr)strictr)rgetlookupTransferlookupEncoding)r&rrrrrr1fs      z"Transport.validate_transport_flagscCs@t|tgtdfvr.dd|D|j|<nt||j|<dS)NrcSsg|] }t|qSr)str).0arrr tz(Transport.set_header..)typerr<r&nameargrrr set_headerqszTransport.set_headercCsF||jvr&|j|}t|ts4|g}ng}|j|<|t|dSr()r isinstancer appendr<)r&rCrDZvlistrrr add_headerxs    zTransport.add_headercCs|jdSr()rclearr5rrr clear_headersszTransport.clear_headerscCs8|jrtd|f|jr*tj||jdSt|SdS)NzConnecting via http to %s)r%)rprintr%rHTTPConnectionr&hostrrrget_connections zTransport.get_connectioncCsP||_||\}}}|sg}||}||j|jrJ||jdt||jd}|jfi|j | d|jt |j |D]\} } | | | q| dd||dD]} || q|||\} } |jr td| D]\} } td| | fq| jd vr.| d |_| j|_dS| |_| j|_| j|_|| |S) Nr7)rrz User-Agent Content-Typeztext/xml)Content-LengthZHostzIncoming headers:z %s : %si-i.ZLocation)r get_host_inforOZset_user_agent user_agentZset_debuglevelOutputrrrrElistritemsprocess clear_header send_httprKstatusr$r"r!reasonr#_process_response)r&rNhandlerZ request_bodyr extra_headersx509rZreqheadervaluehheadersfdrrrrequests<       zTransport.requestcCsbt|j|j|jd}||}t|trPt|j|j |j |j|jd}|j |_ |S| | |S)Nr)r r) Inputr!rr decoderF InputStreamFilerelengthrCcloseparse_response)r&rerZrespfrrrr]s   zTransport._process_responsecCs|jSr()r$r5rrr redirectedszTransport.redirectedcCsb|\}}|d}|sqJ|jr*||jr>tdt|||q |||S)Nzbody:)Z getparserreadrrrKreprZfeedrm)r&ropuresponserrrrns   zTransport.parse_responsecCs ||_dSr()r)r&langrrrsetlangszTransport.setlang)rrNNNN)r)NN)r)r r r __version__rTr'r*r+r-r/rr6r1rErHrJrOrfr]rprnrxrrrrr's(      8rc@s&eZdZd ddZddZddZdS) SafeTransportrNcCs8tj||||||dg|_|p"gD]}||q$dSN)rrr%)rr' trusted_certsadd_trusted_cert)r&rrrrr|r%certfilerrrr's  zSafeTransport.__init__cCs*t|tjstd||j|dSNz%Certificate file %s is not accessibleosaccessR_OK ValueErrorr|rGr&r~rrrr}s zSafeTransport.add_trusted_certcCsR||\}}}|jr$td|f|jr>tj||j|jdStj||jdSdS)NzConnecting via https to %s)r|r%)r|)rSrrKr%rZHTTPSConnectionr|)r&rNr_r`rrrrO szSafeTransport.get_connection)rrNNNNr r rr'r}rOrrrrrzs  rzc@seZdZdddZddZdS)ProxyTransportNrc Cs,tj||||||d||_||_||_dSr{)rr'_proxy_proxy_username_proxy_password) r&proxy proxyUsername proxyPasswordrrrrr%rrrr's zProxyTransport.__init__cCs^|jr td||j|j|jf|jrBtj|j||j|j|jdStj|j||j|jdSdS)Nz8Connecting via http to %s proxy %s, username %s, pass %s)usernamepasswordr%)rr)rrKrrrr%rZHTTPProxyConnectionrMrrrrO#s  zProxyTransport.get_connection)NNrrNNN)r r rr'rOrrrrrs  rc@s&eZdZd ddZddZddZdS) SafeProxyTransportNrc Cs>tj||||||||| d g|_|p(gD]} || q*dS)N)rrrrrrr%)rr'r|r}) r&rrrrrrrr|r%r~rrrr'0s zSafeProxyTransport.__init__cCs*t|tjstd||j|dSrrrrrrr}=s z#SafeProxyTransport.add_trusted_certcCsf|jr td||j|j|jf|jrFtj|j||j|j|j|jdStj|j||j|j|jdSdS)Nz9Connecting via https to %s proxy %s, username %s, pass %s)rrr|r%)rrr|) rrKrrrr%rZHTTPSProxyConnectionr|rMrrrrOBs  z!SafeProxyTransport.get_connection)NNrrNNNNrrrrrr/s  rc@s:eZdZd ddZejfddZejfdd Zd d ZdS) rhNrqrc Csd|_d|_d|_d|_d|_d|_||_||_||_|sdt j vrTt j d |_dt j vrnt j d |_dt j vrt j d |_dt j vrt t j d|_dt j vrt j d|_d t j vrt j d |_n| D]}||}| }|d kr"zt ||_Wntyd|_Yn0q|d kr8| |_q|d krN| |_q|d krd| |_q|dkrz| |_q|dkr||_qd|_dS)NrCZHTTP_CONTENT_TRANSFER_ENCODINGZHTTP_CONTENT_ENCODINGz CONTENT-TYPEZCONTENT_LENGTHZHTTP_ACCEPT_LANGUAGEZHTTP_X_PACKAGE_FILENAMEzcontent-lengthzcontent-transfer-encodingzcontent-encodingz content-typezaccept-languagezx-package-filename)rrrArlrwrCrr max_mem_sizerenvironlowerintkeysrio)r&rdrr rrarbrcrrrr'hsR                 zInput.__init__cCs|jdkrdS|jr2t||j|j|j|jd|_n t||_|jrL|jdkrPdS|jdkrddl }|j}| ddt |jd|_| ||jn t |jdS)Napplication/octet-stream)r rrbinarybase64rr)rArl _smart_readr rrr_smart_total_readrrseekrriNotImplementedError)r&rerZold_iorrrrrs$     z Input.readcCs\|jdkr t||j|j|jdS|js0||t|drB||jrR|jdkrTn|jdvrddl }| }|j dd| |j| }~t||_t|jd|_|j|n|jdvrddl}|j dd|jd t|jd }|}t||_t|jd|_|j|n*|jd kr:t|j|jnt|j|j|j dd|jS) Nrrmrm__plain)x-zlibdeflaterr)x-gzipgziprbmode compresslevelZfileobjx-gpg)rArjrlrCrmrrrhasattrrzlib decompressobjr decompressflushlenrrwriterGzipFileCOMPRESS_LEVELrr)r&rerobjdatargzrrrris@        z Input.decodecCs|jSr()rwr5rrrgetlangsz Input.getlang)NNrqr) r r rr'sysstdinrrrirrrrrrhgs  80rhrqrcCs*t|d}||}|sq&||q |S)z Tries to read data from the supplied stream, and puts the results into a StmartIO object. The data will be in memory or in a temporary file, depending on how much it's been read Returns a SmartIO object r)rrrr)rer rrchunkrrrrs    rcCst}|}t|d}|}|dkrt} t||} || } t| } | sLq|| }|| |durhq| |dks||dkr| }t||} | | |d} |dkrd}n|| }|| || |q|dd|S)Nrrr7gư>)timerminrrrrfloatr)reamtr rrZ startTimeZlastTimebufZorigsizeZcurTimelrZ bytesReadZspeedZsecsrrrrs2      rc@seZdZdddZddZdS)rj NcCs ||_t||_||_||_dSr()rerrlrCrm)r&rerlrCrmrrrr'=s zInputStream.__init__cCsd|j|jfS)Nz0Input data is a stream of %d bytes for file %s. )rlrCr5rrr__repr__CszInputStream.__repr__)rN)r r rr'rrrrrrj<s rjc@seZdZdZdZdZdZdZdZdZ ddgddgd d gd ggZ gd Z dddZ ddZ ddZddZd ddZd!ddZddZddZdS)" BaseOutputrr7Nrrrrrr)NrrrcCs|rt|tjstd||_||_d|_t|_d|_ d|_ i|_ d|_ d|_ d|_d|_d|_d|_|j||dd|_dS)Nz&Expected an HTTPConnection type objectrr)rFrrL Exceptionr _connectionrrrdrrtransport_flagsrr_hostZ_handlerZ _http_typeZ _protocolr_BaseOutput__processed)r&rrrrrrrr'cs$ zBaseOutput.__init__cCsBt|tgtdfvr0dtt||j|<nt||j|<dS)Nr,)rAjoinmapr<rdrBrrrrEs zBaseOutput.set_headercCs||jvr|j|=dSr()rd)r&rCrrrrYs zBaseOutput.clear_headerc Cs||_|j|jkrddl}|j|jd}|d|tdd}|jdt|d}t j ddkrn| t |n| t ||||_|n|j|jkrddl}|j|jd}|d||t}||||_n8|j|jkr t|j|j|j|jd}|d||j|jkrT|j|j}|d||d d nH|j|jkrddl} |j|j}|d||d d | |j|_|d t|jt} ttdkrtd} |d d| d|_ dS)NrzContent-Encodingr7)Z force_memwbrrzContent-Transfer-EncodingrPzapplication/binaryz text/base64rQzX-Transport-Infoz=Extended Capabilities Transport (C) Red Hat, Inc (version %s))!rr ENCODE_GZIPr encodingsrErrrr version_inforrrrmgetvalue ENCODE_ZLIBr compressobjcompressr ENCODE_GPGrrTRANSFER_BINARY transfersTRANSFER_BASE64rZ encodestringrrysplitr) r&rrZ encoding_namerorrrZ transfer_namerZ rpc_versionrrrrXsZ               zBaseOutput.processcKs||_||_|j|dSr()rrrr0r2rrrrszBaseOutput.set_transport_flags/RPC2cCs|js t||_|jdur"td|j|jj|j|t|j |j d|j }| |s~t d|j|f|j|j|j|j|fS)NzNo connection object found)bodyrdz%s %s)rr rrrZconnectrfrrrrdZ getresponseresponse_acceptable xmlrpclibZ ProtocolErrorr[r\msg)r&rNr^rvrrrrZs     zBaseOutput.send_httpcCsP|jdkrdS|jdvrdS|jdkr*dS|jds:dS|jddkrLdSdS) z*Returns true if the response is acceptabler7rRrZallow_partial_contentrPr)r[rr9r)r&rvrrrrs    zBaseOutput.response_acceptablecCs|jr|jd|_dSr()rrmr5rrrrms zBaseOutput.close)rrNr)rr)r)r r rZ ENCODE_NONErrrZ TRANSFER_NONErrrrr'rErYrXrrZrrmrrrrrIs* 8  rcCs|dur dSt|tr8d|kr0ttjkr8nn|St|trptttjD]}tj||krP|SqP|rtd|dS)zTGiven a string or numeric representation of a transfer, return the transfer codeNrzUnsupported transfer %s) rFrrrUrrrangerr)rr8irrrr:s(   r:cCs|dur dSt|tr8d|kr0ttjkr8nn|St|trptttjD]}|tj|vrP|SqP|rtd|dS)zUGiven a string or numeric representation of an encoding, return the encoding codeNrzUnsupported encoding %s) rFrrrUrrrrr)rr8rrrrr;s(   r;c@s@eZdZdddZddZddd Zd d Zd d ZddZdS)rkrNrcCsF||_||_|j|_||_d|_|r<||ddd|_||_dS)Nr/r7)rlfile_objrmr rCrfindr)r&rrlrCrr rrrr'&sz File.__init__cCs|jSr()rlr5rrr__len__1sz File.__len__cCs$|dur|}|S|j|Sr() _get_filerrr)r&rrerrrrr4sz File.readcCsL|}||j}|sqHtjddkr8|t|q|t|q|S)zHCopies the contents of this File object into another file objectrr)rrrr rrrrr)r&filererrrr read_to_file<s zFile.read_to_filecCsL|jr,t|j|j|j|jd}|ddnt|j|jd}|dd|S)zRead everything into a temporary file and call the progress callbacks if the file length is defined, or just reads till EOFrgrr,)rlrrr rrr)r&rrrrrJs  zFile._get_filecCs|jr|d|_dSr(rr5rrr__del__Xsz File.__del__)rNNr)N) r r rr'rrrrrrrrrrrk%s  rk)rqr)rqNr)r)r)(rrrZrhnrZrhn.i18nrrZ rhn.SmartIOrZrhn.UserDictCaserrtypesrrr ImportErrorZ xmlrpc.clientZclientrbytesrVryrrr rrzrrrhrrrjrr:r;rUrkrrrr sF      V8  < 8