3 Õì2a«xã @sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZy$ddlZdd lmZmZmZmZWn$ek rÊejd kr‚dZYnXd Zd ZejƒZdZdgZeedƒrþdZedg7Zejd k�rdZedg7Zefdd„Z dd„Z!dd„Z"dd„Z#dd„Z$Gdd„dƒZ%e�rhGdd„de%ƒZ&Gdd „d e%ƒZ'Gd!d„de(ƒZ)dOd"d„Z*ejd k�rªdPd$d„Z+n dQd%d„Z+Gd&d'„d'e(ƒZ,d(d)„Z-ejd k�rðGd*d+„d+e(ƒZ.d,d-„Z/d.Z0d/Z1d0Z2d1Z3d2d3„Z4d4d5„Z5Gd6d7„d7e(ƒZ6d8d9„Z7d:d;„Z8Gdd?„Z:ejd k�rtd@dA„Z;ejdRdBd„Z?n,ddl@Z@ee@dCƒ�r�e@jAZBne@jCZBdSdDd„Z?ejd k�rædEdF„ZDdGdH„ZEejFe'eDƒdIdJ„ZGdKdL„ZHejFe&eGƒndMdF„ZDdNdH„ZEejFe'eDƒdS)TÚClientÚListenerÚPipeÚwaitéNé)Úutil)ÚAuthenticationErrorÚBufferTooShort)Ú reduction)Ú WAIT_OBJECT_0ÚWAIT_ABANDONED_0Ú WAIT_TIMEOUTÚINFINITEÚwin32i g4@ÚAF_INETÚAF_UNIXÚAF_PIPEcCs tjƒ|S)N)ÚtimeÚ monotonic)Útimeout©rú//opt/alt/python36/lib64/python3.6/connection.pyÚ _init_timeout;srcCs tjƒ|kS)N)rr)ÚtrrrÚ_check_timeout>srcCsX|dkr d S|dkr&tjdtjƒd�S|dkrLtjdtjƒttƒfd d�Std ƒ‚dS) NrÚ localhostrrz listener-)ÚprefixÚdirrz\\.\pipe\pyc-%d-%d-Úzunrecognized family)rr) ÚtempfileZmktemprZ get_temp_dirÚosÚgetpidÚnextÚ _mmap_counterÚ ValueError)ÚfamilyrrrÚarbitrary_addressEsr&cCsJtjdkr|dkrtd|ƒ‚tjdkrF|dkrFtt|ƒsFtd|ƒ‚dS)NrrzFamily %s is not recognized.r)ÚsysÚplatformr$ÚhasattrÚsocket)r%rrrÚ_validate_familySs   r+cCsJt|ƒtkrdSt|ƒtkr*|jdƒr*dSt|ƒtkr:dStd|ƒ‚dS)Nrz\\rrzaddress type of %r unrecognized)ÚtypeÚtupleÚstrÚ startswithr$)ÚaddressrrrÚ address_type_s  r1c@s¾eZdZdZd+dd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e dd„ƒZ e dd„ƒZ e dd„ƒZ dd„Zdd„Zd,dd„Zdd„Zd-dd„Zd.d d!„Zd"d#„Zd/d%d&„Zd'd(„Zd)d*„ZdS)0Ú_ConnectionBaseNTcCsB|jƒ}|dkrtdƒ‚| r,| r,tdƒ‚||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True)Ú __index__r$Ú_handleÚ _readableÚ _writable)ÚselfÚhandleÚreadableÚwritablerrrÚ__init__us z_ConnectionBase.__init__cCs|jdk r|jƒdS)N)r4Ú_close)r7rrrÚ__del__‚s z_ConnectionBase.__del__cCs|jdkrtdƒ‚dS)Nzhandle is closed)r4ÚOSError)r7rrrÚ _check_closed†s z_ConnectionBase._check_closedcCs|jstdƒ‚dS)Nzconnection is write-only)r5r>)r7rrrÚ_check_readableŠsz_ConnectionBase._check_readablecCs|jstdƒ‚dS)Nzconnection is read-only)r6r>)r7rrrÚ_check_writableŽsz_ConnectionBase._check_writablecCs"|jrd|_n|jƒtdƒ‚dS)NFzbad message length)r6r5Úcloser>)r7rrrÚ_bad_message_length’sz#_ConnectionBase._bad_message_lengthcCs |jdkS)N)r4)r7rrrÚclosed™sz_ConnectionBase.closedcCs|jS)N)r5)r7rrrr9žsz_ConnectionBase.readablecCs|jS)N)r6)r7rrrr:£sz_ConnectionBase.writablecCs|jƒ|jS)N)r?r4)r7rrrÚfileno¨sz_ConnectionBase.filenoc Cs$|jdk r z |jƒWdd|_XdS)N)r4r<)r7rrrrB­s  z_ConnectionBase.closercCs¨|jƒ|jƒt|ƒ}|jdkr.tt|ƒƒ}t|ƒ}|dkrFtdƒ‚||krVtdƒ‚|dkrh||}n&|dkrztdƒ‚n|||krŽtdƒ‚|j||||…ƒdS)Nrrzoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)r?rAÚ memoryviewÚitemsizeÚbytesÚlenr$Ú _send_bytes)r7ÚbufÚoffsetÚsizeÚmÚnrrrÚ send_bytesµs"     z_ConnectionBase.send_bytescCs$|jƒ|jƒ|jtj|ƒƒdS)N)r?rArJÚ_ForkingPicklerÚdumps)r7ÚobjrrrÚsendÊsz_ConnectionBase.sendcCsJ|jƒ|jƒ|dk r(|dkr(tdƒ‚|j|ƒ}|dkrB|jƒ|jƒS)Nrznegative maxlength)r?r@r$Ú _recv_bytesrCÚgetvalue)r7Z maxlengthrKrrrÚ recv_bytesÐs z_ConnectionBase.recv_bytesc Cs¬|jƒ|jƒt|ƒ�Š}|j}|t|ƒ}|dkr>tdƒ‚n||krNtdƒ‚|jƒ}|jƒ}|||krvt|j ƒƒ‚|j dƒ|j ||||||…ƒ|SQRXdS)Nrznegative offsetzoffset too large) r?r@rFrGrIr$rUÚtellr rVÚseekÚreadinto)r7rKrLrNrGZbytesizeÚresultrMrrrÚrecv_bytes_intoÝs"       z_ConnectionBase.recv_bytes_intocCs&|jƒ|jƒ|jƒ}tj|jƒƒS)N)r?r@rUrQÚloadsÚ getbuffer)r7rKrrrÚrecvösz_ConnectionBase.recvçcCs|jƒ|jƒ|j|ƒS)N)r?r@Ú_poll)r7rrrrÚpollýsz_ConnectionBase.pollcCs|S)Nr)r7rrrÚ __enter__sz_ConnectionBase.__enter__cCs |jƒdS)N)rB)r7Úexc_typeÚ exc_valueÚexc_tbrrrÚ__exit__sz_ConnectionBase.__exit__)TT)rN)N)r)r`)Ú__name__Ú __module__Ú __qualname__r4r;r=r?r@rArCÚpropertyrDr9r:rErBrPrTrWr\r_rbrcrgrrrrr2rs(       r2c@s@eZdZdZejfdd„Zdd„Zd dd„Zd d „Z d d „Z dS)ÚPipeConnectionFcCs||jƒdS)N)r4)r7Z _CloseHandlerrrr<szPipeConnection._closecCshtj|j|dd�\}}zÚwinerrorÚERROR_BROKEN_PIPEÚEOFErrorÚ RuntimeError) r7ÚmaxsizeZbsizertrurvZnreadÚfÚerrrrU&s6      zPipeConnection._recv_bytescCs.|jstj|jƒddkrdStt|g|ƒƒS)NrT)rxrnÚ PeekNamedPiper4Úboolr)r7rrrrraFszPipeConnection._pollcCs€|jƒ}tjƒ}|j|ƒtj|jƒd}|dk rJt|ƒ||krJ|jƒtj |j|dd�\}}|j dƒ\}}|j|jƒƒ|S)NrT)rm) r^ryrzr}rnr†r4rIrCr|rs)r7rtrƒrKr„ÚleftruZrbytesrrrr~Ls zPipeConnection._get_more_data)N) rhrirjrxrnÚ CloseHandler<rJrUrar~rrrrrl s  rlc@sxeZdZer(ejfdd„ZejZej Z ne j fdd„Ze j Ze jZ efdd„Ze fdd„Zdd „Zdd d „Zd d„Zd S)Ú ConnectioncCs||jƒdS)N)r4)r7r<rrrr<cszConnection._closecCs||jƒdS)N)r4)r7r<rrrr<hscCs<t|ƒ}x.||j|ƒ}||8}|dkr(P||d…}q WdS)Nr)rIr4)r7rKr}Ú remainingrOrrrÚ_sendms zConnection._sendcCsftjƒ}|j}|}xN|dkr`|||ƒ}t|ƒ}|dkrL||krDt‚ntdƒ‚|j|ƒ||8}qW|S)Nrzgot end of file during message)ryrzr4rIr�r>r})r7rMÚreadrKr8r‹ÚchunkrOrrrÚ_recvvs    zConnection._recvcCsDt|ƒ}tjd|ƒ}|dkr2|j|ƒ|j|ƒn|j||ƒdS)Nz!ii@)rIÚstructÚpackrŒ)r7rKrOÚheaderrrrrJ†s    zConnection._send_bytesNcCs:|jdƒ}tjd|jƒƒ\}|dk r0||kr0dS|j|ƒS)Néz!i)r�r�ÚunpackrV)r7rƒrKrMrrrrU–s  zConnection._recv_bytescCst|g|ƒ}t|ƒS)N)rr‡)r7rÚrrrrra�s zConnection._poll)N)rhrirjrnÚ_multiprocessingZ closesocketr<rTZ_writer_Z_readr rBr}r�rŒr�rJrUrarrrrrŠ\s  rŠc@sNeZdZddd„Zdd„Zdd„Zed d „ƒZed d „ƒZd d „Z dd„Z dS)rNrcCsr|p|rt|ƒpt}|pt|ƒ}t|ƒ|dkr>t||ƒ|_nt|||ƒ|_|dk rht|tƒ rht dƒ‚||_ dS)Nrzauthkey should be a byte string) r1Údefault_familyr&r+Ú PipeListenerÚ _listenerÚSocketListenerÚ isinstancerHÚ TypeErrorÚ_authkey)r7r0r%ÚbacklogÚauthkeyrrrr;­s zListener.__init__cCs>|jdkrtdƒ‚|jjƒ}|jr:t||jƒt||jƒ|S)Nzlistener is closed)r™r>Úacceptr�Údeliver_challengeÚanswer_challenge)r7Úcrrrr ½s    zListener.acceptcCs |j}|dk rd|_|jƒdS)N)r™rB)r7ZlistenerrrrrBËszListener.closecCs|jjS)N)r™Ú_address)r7rrrÚÔszListener.cCs|jjS)N)r™Ú_last_accepted)r7rrrr¥ÕscCs|S)Nr)r7rrrrc×szListener.__enter__cCs |jƒdS)N)rB)r7rdrerfrrrrgÚszListener.__exit__)NNrN) rhrirjr;r rBrkr0Z last_acceptedrcrgrrrrr¦s   cCsj|p t|ƒ}t|ƒ|dkr&t|ƒ}nt|ƒ}|dk rJt|tƒ rJtdƒ‚|dk rft||ƒt||ƒ|S)Nrzauthkey should be a byte string) r1r+Ú PipeClientÚ SocketClientr›rHrœr¢r¡)r0r%rŸr£rrrrÞs    TcCsj|r>tjƒ\}}|jdƒ|jdƒt|jƒƒ}t|jƒƒ}n$tjƒ\}}t|dd�}t|dd�}||fS)NTF)r:)r9)r*Z socketpairÚ setblockingrŠÚdetachr Úpipe)ÚduplexÚs1Ús2Úc1Úc2Zfd1Zfd2rrrrõs       c Csâtdƒ}|r*tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tjƒ}tj||dtjtjtjtjƒ}tj|tj ddƒtj|dd�}|jdƒ\} } t||d�} t||d�} | | fS)NrrrT)rm)r:)r9)r&rnÚPIPE_ACCESS_DUPLEXÚ GENERIC_READÚ GENERIC_WRITEÚBUFSIZEZPIPE_ACCESS_INBOUNDÚCreateNamedPipeÚFILE_FLAG_OVERLAPPEDÚFILE_FLAG_FIRST_PIPE_INSTANCEÚPIPE_TYPE_MESSAGEÚPIPE_READMODE_MESSAGEÚ PIPE_WAITÚNMPWAIT_WAIT_FOREVERÚNULLÚ CreateFileÚ OPEN_EXISTINGÚSetNamedPipeHandleStateÚConnectNamedPipersrl) r¬r0ZopenmodeÚaccessZobsizeZibsizeZh1Zh2rmÚ_rur¯r°rrrrs2         c@s&eZdZd dd„Zdd„Zdd„ZdS) ršrcCs¾tjtt|ƒƒ|_yRtjdkr2|jjtjtjdƒ|jjdƒ|jj |ƒ|jj |ƒ|jj ƒ|_ Wn t k r„|jjƒ‚YnX||_d|_|dkr´tj|tj|fdd�|_nd|_dS)NÚposixrTrr)ÚargsÚ exitpriority)r*ÚgetattrÚ_socketr ÚnameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRr©ZbindZlistenZ getsocknamer¤r>rBZ_familyr¦rÚFinalizeÚunlinkÚ_unlink)r7r0r%ržrrrr;8s$       zSocketListener.__init__cCs&|jjƒ\}|_|jdƒt|jƒƒS)NT)rÇr r¦r©rŠrª)r7Úsrrrr Ps zSocketListener.acceptc Cs0z|jjƒWd|j}|dk r*d|_|ƒXdS)N)rÇrBrË)r7rÊrrrrBUs zSocketListener.closeN)r)rhrirjr;r rBrrrrrš4s ršc CsDt|ƒ}tjtt|ƒƒ�"}|jdƒ|j|ƒt|jƒƒSQRXdS)NT)r1r*rÆr©ZconnectrŠrª)r0r%rÌrrrr¨_s   r¨c@s4eZdZd dd„Zd dd„Zdd„Zed d „ƒZdS) r˜NcCsL||_|jdd�g|_d|_tjd|jƒtj|tj|j|jfdd�|_ dS)NT)Úfirstz listener created with address=%rr)rÄrÅ) r¤Ú _new_handleÚ _handle_queuer¦rÚ sub_debugrÉr˜Ú_finalize_pipe_listenerrB)r7r0ržrrrr;sszPipeListener.__init__Fc CsHtjtjB}|r|tjO}tj|j|tjtjBtjBtj t t tj tj ƒS)N) rnr±r¶r·rµr¤r¸r¹rºZPIPE_UNLIMITED_INSTANCESr´r»r¼)r7rÍÚflagsrrrrÎ~s   zPipeListener._new_handlecCs¶|jj|jƒƒ|jjdƒ}ytj|dd�}Wn0tk r^}z|jtjkrN‚WYdd}~XnPXzrZ ERROR_NO_DATArprqrrrr‰rsrl)r7r8rtr…ÚresrÂrurrrr Šs"    zPipeListener.acceptcCs(tjd|ƒx|D]}tj|ƒqWdS)Nz closing listener with address=%r)rrÐrnr‰)Zqueuer0r8rrrrÑ¡s  z$PipeListener._finalize_pipe_listener)N)F)rhrirjr;rÎr Ú staticmethodrÑrrrrr˜os r˜cCs tƒ}x~y6tj|dƒtj|tjtjBdtjtjtjtjƒ}Wn>t k r|}z"|j tj tj fksjt |ƒrl‚WYdd}~XqXPqW‚tj|tjddƒt|ƒS)Nièr)rrnZ WaitNamedPiper½r²r³r¼r¾r¶r>rZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrr¿r¹rl)r0rÚhr…rrrr§§s"   r§és #CHALLENGE#s #WELCOME#s #FAILURE#cCsfddl}tjtƒ}|jt|ƒ|j||dƒjƒ}|jdƒ}||krP|jt ƒn|jt ƒt dƒ‚dS)NrÚmd5ézdigest received was wrong) Úhmacr ÚurandomÚMESSAGE_LENGTHrPÚ CHALLENGEÚnewÚdigestrWÚWELCOMEÚFAILUREr)Ú connectionrŸrÛÚmessageràÚresponserrrr¡Ìs    r¡cCs\ddl}|jdƒ}|ttƒd…}|j||dƒjƒ}|j|ƒ|jdƒ}|tkrXtdƒ‚dS)NrrÚrÙzdigest sent was rejected) rÛrWrIrÞrßràrPrár)rãrŸrÛräràrårrrr¢Ùs   r¢c@s$eZdZdd„Zdd„Zdd„ZdS)ÚConnectionWrappercCs:||_||_||_x"dD]}t||ƒ}t|||ƒqWdS)NrErBrbrWrP)rErBrbrWrP)Ú_connÚ_dumpsÚ_loadsrÆÚsetattr)r7ÚconnrRr]ÚattrrSrrrr;ês   zConnectionWrapper.__init__cCs|j|ƒ}|jj|ƒdS)N)rèrçrP)r7rSrÌrrrrTñs zConnectionWrapper.sendcCs|jjƒ}|j|ƒS)N)rçrWré)r7rÌrrrr_ôs zConnectionWrapper.recvN)rhrirjr;rTr_rrrrræésræcCstj|fddddƒjdƒS)Nrzutf-8)Ú xmlrpclibrRÚencode)rSrrrÚ _xml_dumpsøsrïcCstj|jdƒƒ\\}}|S)Nzutf-8)rír]Údecode)rÌrSÚmethodrrrÚ _xml_loadsûsròc@seZdZdd„ZdS)Ú XmlListenercCs ddljatj|ƒ}t|ttƒS)Nr)Ú xmlrpc.clientÚclientrírr rærïrò)r7rSrrrr s  zXmlListener.acceptN)rhrirjr rrrrróÿsrócOsddljatt||ŽttƒS)Nr)rôrõrírærrïrò)rÄÚkwdsrrrÚ XmlClients r÷cCs²t|ƒ}g}x |r¬tj|d|ƒ}|tkr,Pn\t|koFtt|ƒknrV|t8}n2t|koptt|ƒknr€|t8}ntdƒ‚|j||ƒ||dd…}d}qW|S)NFzShould not get hererr) Úlistrnrpr r rIr r‚rÓ)ZhandlesrÚLÚreadyrÕrrrÚ_exhaustive_waits    rûc .sn|dkrt}n|dkrd}nt|ddƒ}t|ƒ}i‰g}tƒ‰tƒ}�zH�x2|D�](}yt|dƒ}Wn tk rˆ|ˆ|jƒ<YqTXytj|ƒddƒ\}}Wn8t k rÚ}zd|j }}|t krÊ‚WYdd}~XnX|tj krü|j |ƒ|ˆ|j<qT|�rptjƒdd…dk�rpy|jdƒ\} }Wn*t k �rT}z |j }WYdd}~XnX| �rpt|d ƒ�rpd|_ˆj|ƒd}qTWtˆjƒ|ƒ}Wdx|D]}|jƒ�qšWx”|D]Œ}y|jdƒ\} }Wn6t k �rþ}z|j }|t k�rî‚WYdd}~XnX|tjk�r²ˆ|j}ˆj|ƒ|dk�r²t|d ƒ�r²d|_�q²WXˆj‡fd d „|Dƒƒ‡fd d „|DƒS)Nriègà?rETééFrxc3s|]}ˆ|VqdS)Nr)Ú.0r×)Úwaithandle_to_objrrú rszwait..csg|]}|ˆkr|‘qSrr)rþÚo)Ú ready_objectsrrú sszwait..)rýrü)rÚintrøÚsetrÆÚAttributeErrorr3rnr|r>rÚ _ready_errorsrorÓrqr'Zgetwindowsversionrsr)rxÚaddrûÚkeysrrZERROR_OPERATION_ABORTEDÚupdate) Ú object_listrZov_listZ ready_handlesrrErtrur…rÂr)rrÿrr'sh             Ú PollSelectorc Csˆtƒ�x}x|D]}|j|tjƒqW|dk r8tjƒ|}x@|j|ƒ}|rVdd„|DƒS|dk r:|tjƒ}|dkr:|Sq:WWdQRXdS)NcSsg|]\}}|j‘qSr)Zfileobj)rþÚkeyZeventsrrrr‘szwait..r)Ú _WaitSelectorÚregisterÚ selectorsZ EVENT_READrrZselect)r rZselectorrSZdeadlinerúrrrr�s    c CsN|jƒ}tj|tjtjƒ�*}ddlm}|j|ƒ}t||j |j ffSQRXdS)Nr)Úresource_sharer) rEr*ZfromfdrZ SOCK_STREAMrrZ DupSocketÚrebuild_connectionr9r:)rër8rÌrÚdsrrrÚreduce_connection�s   rcCs|jƒ}t|jƒ||ƒS)N)rªrŠ)rr9r:Zsockrrrr£srcCsB|jr tjnd|jrtjndB}tj|jƒ|ƒ}t||j|jffS)Nr) r9rnZFILE_GENERIC_READr:ZFILE_GENERIC_WRITEr Z DupHandlerEÚrebuild_pipe_connection)rërÁÚdhrrrÚreduce_pipe_connection¨srcCs|jƒ}t|||ƒS)N)rªrl)rr9r:r8rrrr­srcCs tj|jƒƒ}t||j|jffS)N)r ZDupFdrErr9r:)rëÚdfrrrr³scCs|jƒ}t|||ƒS)N)rªrŠ)rr9r:Úfdrrrr¶s)NN)T)T)N)N)IÚ__all__ryr r'r*r�rrÚ itertoolsr–rrrr Úcontextr ZForkingPicklerrQrnr r r rÚ ImportErrorr(r´ZCONNECTION_TIMEOUTÚcountr#r—Zfamiliesr)rrr&r+r1r2rlrŠÚobjectrrrršr¨r˜r§rÝrÞrárâr¡r¢rærïròrór÷rûr€ZERROR_NETNAME_DELETEDrrrr rZSelectSelectorrrrrrrrrrÚ s¢           PJ8    ,+ 8    P