\ds{gdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z ddlmZejZ ddlZddlmZmZmZmZn#e$rejdkrdZYnwxYwd Zd ZejZd Zd gZeed rd Zed gz Zejdkrd Zed gz ZefdZ dZ!dZ"dZ#dZ$GddZ%erGdde%Z&Gdde%Z'Gdde(Z)dd>d3Z?n#ddl@Z@ee@d4re@jAZBne@jCZBd>d5Z?ejdkr0d6ZDd7ZEejFe'eDd8ZGd9ZHejFe&eGdSd:ZDd;ZEejFe'eDdS)?)ClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEc.tj|zSNtime monotonic)timeouts +..\python\lib\multiprocessing\connection.py _init_timeoutr;s >  g %%c0tj|kSrr)ts r_check_timeoutr>s >  a rc|dkrdS|dkr'tjdtjS|dkr>tjdt jt tfzdStd ) z? Return an arbitrary free address for the given family r) localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized family) tempfilemktempr get_temp_dirosgetpidnext _mmap_counter ValueErrorfamilys rarbitrary_addressr/Es 9  kt7H7J7JKKKK 9  &< " T--@-@A'BGIKKK K.///rctjdkr|dkrtd|ztjdkr-|dkr)tt|std|zdSdSdS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr,hasattrsocketr-s r_validate_familyr5Ss |w6Y#6#67&@AAA |w6Y#6#6vv&& F;fDEE E#6#6 F Frc t|tkrdSt|tur|drdSt|tust j|rdSt d|z)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognized)typetuplestr startswithris_abstract_socket_namespacer,)addresss r address_typer=_s}  G}}y g#  '"4"4V"<"< y g#  !B7!K!K y:WDEEErceZdZdZddZdZdZdZdZdZ e d Z e d Z e d Z d Zd ZddZdZddZddZdZddZdZdZdS)_ConnectionBaseNTc|}|dkrtd|s|std||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r,_handle _readable _writable)selfhandlereadablewritables r__init__z_ConnectionBase.__init__usm!!## A::-.. . J JHJJ J !!rc@|j|dSdSrrB_closerEs r__del__z_ConnectionBase.__del__s# < # KKMMMMM $ #rc2|jtddS)Nzhandle is closed)rBOSErrorrMs r _check_closedz_ConnectionBase._check_closeds! < ,-- - rc2|jstddS)Nzconnection is write-only)rCrPrMs r_check_readablez_ConnectionBase._check_readables%~ 6455 5 6 6rc2|jstddS)Nzconnection is read-only)rDrPrMs r_check_writablez_ConnectionBase._check_writables%~ 5344 4 5 5rcf|jrd|_n|td)NFzbad message length)rDrCcloserPrMs r_bad_message_lengthz#_ConnectionBase._bad_message_lengths1 > "DNN JJLLL*+++rc|jduS)z True if the connection is closedNrBrMs rclosedz_ConnectionBase.closeds|t##rc|jS)z"True if the connection is readable)rCrMs rrGz_ConnectionBase.readable ~rc|jS)z"True if the connection is writable)rDrMs rrHz_ConnectionBase.writabler]rc8||jS)z+File descriptor or handle of the connection)rQrBrMs rfilenoz_ConnectionBase.filenos |rch|j* |d|_dS#d|_wxYwdS)zClose the connectionNrKrMs rrWz_ConnectionBase.closesB < # $ # t #### $ #s& /rc||t|}|jdkr|d}|j}|dkrt d||krt d|||z }n-|dkrt d||z|krt d|||||zdS) z,Send the bytes data from a bytes-like objectrBrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rQrU memoryviewitemsizecastnbytesr, _send_bytes)rEbufoffsetsizemns r send_bytesz_ConnectionBase.send_bytess   sOO :>>s A H A::122 2 v::566 6 <v:DD AXX/00 0 d]Q  <== = 6&4-/011111rc|||t|dS)zSend a (picklable) objectN)rQrUrh_ForkingPicklerdumpsrEobjs rsendz_ConnectionBase.sendsN   ..s3344444rc||||dkrtd||}|||S)z7 Receive bytes data as a bytes object. Nrznegative maxlength)rQrSr, _recv_bytesrXgetvalue)rE maxlengthris r recv_bytesz_ConnectionBase.recv_bytess}    Y]]122 2y)) ;  $ $ & & &||~~rcH||t|5}|j}|t |z}|dkrt d||krt d|}|}|||zkr!t| | d| |||z||z|z|cdddS#1swxYwYdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) rQrSrdrelenr,rvtellr rwseekreadinto)rErirjrlrebytesizeresultrks rrecv_bytes_intoz_ConnectionBase.recv_bytes_intosj   __ zH#a&&(Hzz !2333("" !3444%%''F;;==D&4-''$V__%6%6777 KKNNN OOAf0%}9:; < < <!                  sCDDDc|||}t|S)zReceive a (picklable) object)rQrSrvrploads getbuffer)rEris rrecvz_ConnectionBase.recvsS    $$S]]__555rc|||||S)z/Whether there is any input available to be read)rQrS_pollrErs rpollz_ConnectionBase.polls8  zz'"""rc|SrrMs r __enter__z_ConnectionBase.__enter__ rc.|dSrrWrEexc_type exc_valueexc_tbs r__exit__z_ConnectionBase.__exit__ r)TT)rNr)r)r)__name__ __module__ __qualname__rBrIrNrQrSrUrXpropertyr[rGrHr`rWrnrtryrrrrrrrrr?r?rssG " " " "...666555,,,$$X$XX $$$2222(555    2666#### rr?cDeZdZdZdZejfdZdZd dZ dZ dZ dS) PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. Fc&||jdSrrZ)rE _CloseHandles rrLzPipeConnection._closes L & & & & &rctj|j|d\}} |tjkr.tj|jgdt }|tksJn#|xYw| d\}}n#| d\}}wxYw|dksJ|t|ksJdS)NT overlappedFr) _winapi WriteFilerBERROR_IO_PENDINGWaitForMultipleObjectseventrr cancelGetOverlappedResultr{)rErioverrwaitresnwrittens rrhzPipeConnection._send_bytess' cdKKKGB ='222%< E855G"m3333   " 6 6t < < ## 6 6t < < #<<<<!8888s3xx''''''s>A B A77BB-Nc|jrd|_tjS|dnt|d} t j|j|d\}} |tjkr.t j|j gdt}|tksJn#| xYw| d\}}|dkr>>&  OPP PsgF?>BD1B--D10AF? %F?0F?1AF;F?(F;8F?:F;;F?? G+ G&&G+c|js#tj|jddkrdSt t |g|S)NrT)rr PeekNamedPiperBboolrrs rrzPipeConnection._pollEsI' -dl;;A>!CCtdVW--.. .rc|}tj}||t j|jd}|dksJ|*t||z|kr|t j |j|d\}}| d\}}|dksJ||ksJ|||S)NrrTr) rrrrrrrBr{rXrr)rErrrirleftrrbytess rrzPipeConnection._get_more_dataKs,,..C A GGCLLL(66q9D!8888"s3xx$'@'@((***&t|TdKKKGB0066KFC!8888T>>>> GGBLLNN # # #Hrr) rrr__doc__rr CloseHandlerLrhrvrrrrrrr s  #&-&9 ' ' ' ' ( ( ( Q Q Q Q@ / / /     rrceZdZdZerejfdZejZ ej Z ne j fdZe jZ e jZ e fdZe fdZdZd dZd ZdS) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). c&||jdSrrZrErLs rrLzConnection._closeb F4< rc&||jdSrrZrs rrLzConnection._closegrrctt|} ||j|}||z}|dkrdS||d}))NTr)r{rB)rErir remainingrms r_sendzConnection._sendlsNHH  dlC((A NIA~~abb'C  rctj}|j}|}|dkr]|||}t|}|dkr||krtt d||||z}|dk]|S)Nrzgot end of file during message)rrrBr{rrPr)rErkreadrirFrchunkrms r_recvzConnection._recvusjll !mmD++EE AAvv$$"N!"BCCC IIe    NI!mm rct|}|dkrktjdd}tjd|}||||||dStjd|}|dkr,||||dS|||zdS)Ni!i!Qi@)r{structpackr)rErirm pre_headerheaders rrhzConnection._send_bytess HH z>>T2..J[q))F JJz " " " JJv    JJsOOOOO[q))F5yy 6""" 3  6C<(((((rNcD|d}tjd|\}|dkr>|d}tjd|\}|||krdS||S)Nrrr)rrunpackrw)rErrirks rrvzConnection._recv_bytessjjmm dCLLNN33 2::**Q--CM$ 77ED  4'>>4zz$rcBt|g|}t|Sr)rr)rErrs rrzConnection._polls $ ! !Awwrr)rrrrr_multiprocessing closesocketrLrt_writer_readr(rWrrrrrhrvrrrrrr[s   0 < ! ! ! !!& % " ! ! ! !% % ))).    rrc^eZdZdZd dZdZdZedZedZ d Z d Z dS) rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. Nrc8|p|rt|pt}|pt|}t||dkrt |||_nt ||||_|$t|tstd||_ dS)Nrauthkey should be a byte string) r=default_familyr/r5 PipeListener _listenerSocketListener isinstancebytes TypeError_authkey)rEr<r.backlogauthkeys rrIzListener.__init__s#G= W(=(=#" 6.v66   Y  )'7;;DNN+GVWEEDN  z'5'A'A =>> > rc|jtd|j}|jr*t ||jt ||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rrPacceptrdeliver_challengeanswer_challenge)rEcs rrzListener.acceptsa > !.// / N ! ! # # = / a / / / Q . . .rcR|j}|d|_|dSdS)zA Close the bound socket or named pipe of `self`. N)rrW)rElisteners rrWzListener.closes6>  !DN NN      rc|jjSr)r_addressrMs rr<zListener.addresss ~&&rc|jjSr)r_last_acceptedrMs r last_acceptedzListener.last_accepteds ~,,rc|SrrrMs rrzListener.__enter__rrc.|dSrrrs rrzListener.__exit__rr)NNrN) rrrrrIrrWrr<rrrrrrrrs       ''X'--X-rrc |pt|}t||dkrt|}nt|}|$t |t st d| t||t|||S)z= Returns a connection to the address of a `Listener` rNr) r=r5 PipeClient SocketClientrrrrr)r<r.rrs rrrs ,|G,,FV  w    ! !:gu#=#=9:::G$$$!W%%% HrTc|rtj\}}|d|dt|}t|}n8t j\}}t|d}t|d}||fS)L Returns pair of connection objects at either end of a pipe TFrHrG)r4 socketpair setblockingrdetachr(pipe)duplexs1s2c1c2fd1fd2s rrrs  1&((FB NN4 NN4 BIIKK((BBIIKK((BBwyyHCC%000BC%000B2v rc &td}|r4tj}tjtjz}t t }}n!tj}tj}dt }}tj||tjztj ztj tj ztj zd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|d}|d\} } | dksJt)||} t)||} | | fS) rrrrNTrrr)r/rPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperr) r r<openmodeaccessobsizeibsizeh1h2r_rrrs rrrsb$I..  (1H)G,AAF$gFFF2H*FFF  $ X <<  12  %(E E    vvw; L  VQ g.C  (', ' -tT   -bTBBB //553axxxx B 0 0 0 B 0 0 02v rc&eZdZdZddZdZdZdS)rzO Representation of a socket which is bound to an address and listening rctjtt||_ tjdkr0|jtjtjd|jd|j ||j ||j |_ n(#t$r|jwxYw||_d|_|dkr>t#j|s*t#j|tj|fd|_dSd|_dS)NposixrTrrargs exitpriority)r4getattr_socketr(name setsockopt SOL_SOCKET SO_REUSEADDRr bindlisten getsocknamerrPrW_familyrrr;Finalizeunlink_unlink)rEr<r.rs rrIzSocketListener.__init__FsF}WVV%<%<==  w'!! ''(9(.(;Q@@@ L $ $T * * * L  g & & & L   ( ( ( L4466DMM    L     " Y  t'H'Q'Q =biwjqDLLL DLLLs B,C%Dc|j\}|_|dt |S)NT)r4rrr rr rEss rrzSocketListener.accept_sE!%!4!4!6!64  d!((**%%%rc |j|j}|d|_|dSdS#|j}|d|_|wwxYwr)r4rWr?)rEr>s rrWzSocketListener.closedsr  L   \F!# "!\F!# "s 9AN)r)rrrrrIrrWrrrrrBsP    2&&& rrc8t|}tjtt|5}|d||t |cdddS#1swxYwYdS)zO Return a connection object connected to the socket given by `address` TN)r=r4r3r connectrr )r<r.rBs rrrns' " "F // 1 1&Q d '!((**%%&&&&&&&&&&&&&&&&&&sA BBBc>eZdZdZddZd dZdZedZdS) rz0 Representation of a named pipe Nc||_|dg|_d|_t jd|jt j|tj|j|jfd|_ dS)NT)firstz listener created with address=%rrr0) r _new_handle _handle_queuerr sub_debugr=r_finalize_pipe_listenerrW)rEr<rs rrIzPipeListener.__init__su#DM"&"2"2"2">">!?D "&D  N=t} M M Ml:($-8qDJJJrFc .tjtjz}|r|tjz}tj|j|tjtjztjztj tttj tj Sr) rrrrrrrrrPIPE_UNLIMITED_INSTANCESrr r!)rErHflagss rrIzPipeListener._new_handlesp.1MME ?>>* u)G,II!"0'7,gl  rcd|j||jd} t j|d} t j|jgdt}n.#| t j |xYw | d\}}|dksJnR#| d\}}|dksJwxYw#t$r }|j tjkrYd}~nd}~wwxYwt|S)NrTrF)rJappendrIpoprr%rrrrrrrPr ERROR_NO_DATAr)rErFrresr,rrs rrzPipeListener.acceptsT   % %d&6&6&8&8 9 9 9'++A..F $-fFFF $!8 E855CCIIKKK'///  33D99FAs!88888 33D99FAs!88888888   :!66676666  "&)) )s6C6!BC+B,,C"C36 D DD cbtjd||D]}tj|dS)Nz closing listener with address=%r)rrKrr)queuer<rFs rrLz$PipeListener._finalize_pipe_listenersB N=w G G G , ,#F++++ , ,rr)F) rrrrrIrIr staticmethodrLrrrrr~sp           * * *.  , ,  , , ,rrc t} tj|dtj|tjtjzdtjtjtjtj}nG#t$r9}|j tj tj fvst|rYd}~nd}~wwxYwtj|tjddt!|S)zU Return a connection object connected to the pipe given by `address` rrN)rr WaitNamedPiper"rrr!r#rrPrERROR_SEM_TIMEOUTERROR_PIPE_BUSYrr$rr)r<rhrs rrrs  OO  %gt444&W1G4IIw|W%:0',    :g&?&-&=&???BPQRBSBS??????  " ' w,dD   a   sA.B C /B>>Cs #CHALLENGE#s #WELCOME#s #FAILURE#cddl}t|ts/tdt |t jt}| t|z| ||d }| d}||kr| tdS| tt!d)Nr Authkey must be bytes, not {0!s}md5zdigest received was wrong)hmacrrr,formatr7r(urandomMESSAGE_LENGTHrn CHALLENGEnewdigestryWELCOMEFAILUREr  connectionrrcmessageriresponses rrrsKKK gu % %F . 5 5d7mm D DFF Fj((G)g-... XXgw . . 5 5 7 7F$$S))H6g&&&&&g&&&!"=>>>rc6ddl}t|ts/tdt ||d}|dtttks Jd|z|ttd}| ||d }| ||d}|tkrtddS)Nrr`rbz message = %rrazdigest sent was rejected)rcrrr,rdr7ryr{rgrhrirnrjr rls rrrsKKK gu % %F . 5 5d7mm D DFF F##C((G ?C NN? #y 0 0 0.72J 0 0 0c)nnoo&G XXgw . . 5 5 7 7F&!!!$$S))H7!"<===rc eZdZdZdZdZdS)ConnectionWrapperc|||_||_||_dD]#}t||}t |||$dS)N)r`rWrryrn)_conn_dumps_loadsr3setattr)rEconnrqrattrrss rrIzConnectionWrapper.__init__sT   K % %D$%%C D$ $ $ $ $ % %rcd||}|j|dSr)rurtrn)rErsrBs rrtzConnectionWrapper.sends/ KK   a     rc^|j}||Sr)rtryrvrAs rrzConnectionWrapper.recvs% J ! ! # #{{1~~rN)rrrrIrtrrrrrrrrsA%%%!!!rrrcft|fdddddS)Nrutf-8) xmlrpclibrqencode)rss r _xml_dumpsr s, ??C64tQ 7 7 > >w G GGrcjt|d\\}}|S)Nr})r~rdecode)rBrsmethods r _xml_loadsrs*__QXXg%6%677NFSF JrceZdZdZdS) XmlListenercxddlmat|}t |t tSNr) xmlrpc.clientclientr~rrrrrrrrs rrzXmlListener.accepts7))))))ood## j*===rN)rrrrrrrrrs#>>>>>rrcXddlmatt |i|t t Sr)rrr~rrrrr)r1kwdss r XmlClientrs3%%%%%% VT2T22J K KKrct|}g}|rtj|d|}|tkrnt|cxkrtt |zkrnn |tz}nDt |cxkrt t |zkrnn |t z}ntd|||||dzd}d}||S)NFzShould not get hererr) listrrrr r{r rrQ)handlesrLreadyrTs r_exhaustive_waitr$s MM 0E7CCCl""#>>>> A(>>>>>>}$!SDDDD+;c!ff+DDDDDD''"#8999 LL3 #a%&& AG  rc |t}n|dkrd}nt|dzdz}t|}i g}t t} |D]B} t |d} t j|dd\}}n*#t$r}d|j}}|tvrYd}~nd}~wwxYw|t j kr | || |j <|rptjdddkrQ |d \} }n#t$r}|j}Yd}~nd}~wwxYw|st!|d rd|_ |d}#t&$r| |<Y@wxYwt+ |}|D]}||D]} |d\} }n(#t$r}|j}|tvrYd}~nd}~wwxYw|t jkr? |j } ||dkrt!|d rd|_n#|D]}||D]} |d\} }n(#t$r}|j}|tvrYd}~nd}~wwxYw|t jkr? |j } ||dkrt!|d rd|_wxYw  fd |D fd |DS) Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. NrrYg?r`T)rFrc3(K|] }|V dSrr).0r]waithandle_to_objs r zwait..s)IIa.q1IIIIIIrcg|]}|v| Srr)ro ready_objectss r zwait..s#===a!}*<*<*<*<*-C-C-E-EwOOM    8 833D99FAss*C-//0////'999)"(3A!%%a(((axx#1&:;;837A0 8     8 833D99FAss*C-//0////'999)"(3A!%%a(((axx#1&:;;837A0 8 IIII=IIIIII====;====sI3!E92!BI3 B;B61I36B;;AI3D)(I3) E3D?:I3?E5I39!FI3F%I3!G:: HHH3L$J+*L$+ K 5K L$ K AL$ PollSelectorcnt5}|D]"}||tj#|t j|z} ||}|rd|DcdddS|*|t jz }|dkr|cdddS\#1swxYwYdS)rNTc"g|] \}}|j Sr)fileobj)rkeyeventss rrzwait..sCCCMS&CKCCCrr) _WaitSelectorregister selectors EVENT_READrrselect)rrselectorrsdeadliners rrrs4 __ )" = =!!#y';<<<<">++g5 ) 00)CCUCCC ) ) ) ) ) ) ) )*"*T^-=-="="Q;;#( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )sA!B*=B*)B**B.1B.c|}tj|tjtj5}ddlm}||}t||j |j ffcdddS#1swxYwYdS)Nr)resource_sharer) r`r4fromfdr SOCK_STREAMr$r DupSocketrebuild_connectionrGrH)rxrFrBrdss rreduce_connectionrs ]66>63E F F J! ) ) ) ) ) ) **1--B%DM4='II J J J J J J J J J J J J J J J J J Js1A==BBcp|}t|||Srr r)rrGrHsocks rrrs)yy{{$++--8<<rs 3 2 2 11111111*NNNOOOOOOOOOOOOO |w GGG  !!  ; 769N  H<7N  H-&&&&    0 0 0 F F F F F F&TTTTTTTTn OMMMMMMMM`MMMMMMMMh:::::v:::z    *<7&&&&&X)))))V)))X&&&<76,6,6,6,6,v6,6,6,p!!!>    ? ? ? > > >$        HHH>>>>>(>>>LLL<7(.0MNML>L>L>L>L>` wy.))1!. !0 ))))6<7JJJ ===Iz#4555KKK :::I~'=>>>>>FFF222Iz#455555sAA,+A,