3 ­_VjVyã @s ddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZy$ddlZdd lmZmZmZmZWn$ek rÊejd kr‚dZYnXd Zd ZdZejƒZdZdgZe edƒ�rdZedg7Zejd k�rdZedg7Zefdd„Z!dd„Z"dd„Z#dd„Z$dd„Z%Gdd„dƒZ&e�rnGdd„de&ƒZ'Gd d!„d!e&ƒZ(Gd"d„de)ƒZ*dPd#d„Z+ejd k�r°dQd%d„Z,n dRd&d„Z,Gd'd(„d(e)ƒZ-d)d*„Z.ejd k�röGd+d,„d,e)ƒZ/d-d.„Z0d/Z1d0Z2d1Z3d2Z4d3d4„Z5d5d6„Z6Gd7d8„d8e)ƒZ7d9d:„Z8d;d<„Z9Gd=d>„d>e*ƒZ:d?d@„Z;ejd k�rzdAdB„ZhZ?dSdCd„Z@n,ddlAZAe eAdDƒ�r–eAjBZCneAjDZCdTdEd„Z@ejd k�rìdFdG„ZEdHdI„ZFejGe(eEƒdJdK„ZHdLdM„ZIejGe'eHƒndNdG„ZEdOdI„ZFejGe(eEƒdS)UÚClientÚListenerÚPipeÚwaitéNé)Úutil)ÚAuthenticationErrorÚBufferTooShort)Ú reduction)Ú WAIT_OBJECT_0ÚWAIT_ABANDONED_0Ú WAIT_TIMEOUTÚINFINITEÚwin32i g4@Zsha256ÚAF_INETÚAF_UNIXÚAF_PIPEcCs tjƒ|S)N)ÚtimeÚ monotonic)Útimeout©rú2/usr/lib64/python3.6/multiprocessing/connection.pyÚ _init_timeout?srcCs tjƒ|kS)N)rr)ÚtrrrÚ_check_timeoutBsrcCsX|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_addressIsr&cCsJtjdkr|dkrtd|ƒ‚tjdkrF|dkrFtt|ƒsFtd|ƒ‚dS)NrrzFamily %s is not recognized.r)ÚsysÚplatformr$ÚhasattrÚsocket)r%rrrÚ_validate_familyWs   r+cCsJt|ƒtkrdSt|ƒtkr*|jdƒr*dSt|ƒtkr:dStd|ƒ‚dS)Nrz\\rrzaddress type of %r unrecognized)ÚtypeÚtupleÚstrÚ startswithr$)ÚaddressrrrÚ address_typecs  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__ys 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Úpollsz_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_rbrcrgrrrrr2vs(       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)r7rrrrraJszPipeConnection._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~Ps zPipeConnection._get_more_data)N) rhrirjrxrnÚ CloseHandler<rJrUrar~rrrrrls  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<gszConnection._closecCs||jƒdS)N)r4)r7r<rrrr<lscCs<t|ƒ}x.||j|ƒ}||8}|dkr(P||d…}q WdS)Nr)rIr4)r7rKr}Ú remainingrOrrrÚ_sendqs 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Ú_recvzs    zConnection._recvcCsDt|ƒ}tjd|ƒ}|dkr2|j|ƒ|j|ƒn|j||ƒdS)Nz!ii@)rIÚstructZpackrŒ)r7rKrOÚheaderrrrrJŠs    zConnection._send_bytesNcCs:|jdƒ}tjd|jƒƒ\}|dk r0||kr0dS|j|ƒS)Néz!i)r�r�ZunpackrV)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®rrrr s2         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;<s$       zSocketListener.__init__cCs&|jjƒ\}|_|jdƒt|jƒƒS)NT)rÅržr¤r§rŠr¨)r7ÚsrrrržTs zSocketListener.acceptc Cs0z|jjƒWd|j}|dk r*d|_|ƒXdS)N)rÅrBrÉ)r7rÈrrrrBYs zSocketListener.closeN)r)rhrirjr;ržrBrrrrr˜8s r˜c CsDt|ƒ}tjtt|ƒƒ�"}|jdƒ|j|ƒt|jƒƒSQRXdS)NT)r1r*rÄr§ZconnectrŠr¨)r0r%rÊrrrr¦cs   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;wszPipeListener.__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–ss 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||tƒjƒ}|j dƒ}||krP|jt ƒn|jt ƒt dƒ‚dS)Nrézdigest received was wrong) Úhmacr ÚurandomÚMESSAGE_LENGTHrPÚ CHALLENGEÚnewÚHMAC_DIGEST_NAMEÚdigestrWÚWELCOMEÚFAILUREr)Ú connectionr�rØÚmessagerÞÚresponserrrrŸÐs    rŸcCs\ddl}|jdƒ}|ttƒd…}|j||tƒjƒ}|j|ƒ|jdƒ}|tkrXt dƒ‚dS)Nrr×zdigest sent was rejected) rØrWrIrÛrÜ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Ú XmlClient s 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ú vszwait..csg|]}|ˆkr|‘qSrr)rüÚo)Ú ready_objectsrrú wszwait..)rûrú)rÚintröÚsetrÄÚAttributeErrorr3rnr|r>rÚ _ready_errorsrorÑrqr'Zgetwindowsversionrsr)rxÚaddrùÚkeysrrZERROR_OPERATION_ABORTEDÚupdate) Ú object_listrZov_listZ ready_handlesrÿrErtrur…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)JÚ__all__ryr r'r*r�rrÚ itertoolsr”rrrr Úcontextr ZForkingPicklerrQrnr r r rÚ ImportErrorr(r²ZCONNECTION_TIMEOUTrÝÚ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 r ZSelectSelectorrrr rrrrrrÚ s¤           PJ8    ,+ 8    P