ó ū^‚Rc@sˆdddgZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z mZmZmZddlmZmZdZd Zd ZejƒZd Zd gZeed ƒrd Zed g7Znejd kr4dZedg7Zned„Zd„Zd„Zd„Z de!fd„ƒYZ"ddd„Z$ejd krže%d„Z&nddlm'Z'e%d„Z&de!fd„ƒYZ(d„Z)ejd kr de!fd„ƒYZ*d„Z+ndZ,dZ-d Z.d!Z/d"„Z0d#„Z1d$„Z2d%e!fd&„ƒYZ3d'„Z4d(„Z5d)e"fd*„ƒYZ6d+„Z7dS(,tClienttListenertPipei’’’’N(tcurrent_processtAuthenticationError(t get_temp_dirtFinalizet sub_debugtdebug(t duplicatetclosei g4@tsha256tAF_INETtAF_UNIXtwin32tAF_PIPEcCstjƒ|S(N(ttime(ttimeout((s0/usr/lib/python2.7/multiprocessing/connection.pyt _init_timeoutMscCstjƒ|kS(N(R(tt((s0/usr/lib/python2.7/multiprocessing/connection.pyt_check_timeoutPscCsw|dkrd S|dkr5tjdddtƒƒS|dkrgtjdd tjƒtjƒfƒStd ƒ‚d S( s? Return an arbitrary free address for the given family R t localhostiR tprefixs listener-tdirRs\\.\pipe\pyc-%d-%d-sunrecognized familyN(Ri(ttempfiletmktempRtostgetpidt _mmap_countertnextt ValueError(tfamily((s0/usr/lib/python2.7/multiprocessing/connection.pytarbitrary_addressWs    cCset|ƒtkrdSt|ƒtkr;|jdƒr;dSt|ƒtkrQdStd|ƒ‚dS(s] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' R s\\RR saddress type of %r unrecognizedN(ttypettupletstrt startswithR(taddress((s0/usr/lib/python2.7/multiprocessing/connection.pyt address_typefs!cBsSeZdZddddd„Zd„Zd„Zed„ƒZed„ƒZ RS(s• Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. icCs›|p|rt|ƒpt}|p-t|ƒ}|dkrQt||ƒ|_nt|||ƒ|_|dk rŽt|tƒ rŽt d‚n||_ dS(NRsauthkey should be a byte string( R&tdefault_familyR t PipeListenert _listenertSocketListenertNonet isinstancetbytest TypeErrort_authkey(tselfR%Rtbacklogtauthkey((s0/usr/lib/python2.7/multiprocessing/connection.pyt__init__€s  cCs?|jjƒ}|jr;t||jƒt||jƒn|S(sz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. (R)tacceptR/tdeliver_challengetanswer_challenge(R0tc((s0/usr/lib/python2.7/multiprocessing/connection.pyR4s  cCs |jjƒS(sA Close the bound socket or named pipe of `self`. (R)R (R0((s0/usr/lib/python2.7/multiprocessing/connection.pyR ›scCs |jjS(N(R)t_address(R0((s0/usr/lib/python2.7/multiprocessing/connection.pyt”scCs |jjS(N(R)t_last_accepted(R0((s0/usr/lib/python2.7/multiprocessing/connection.pyR9¢sN( t__name__t __module__t__doc__R+R3R4R tpropertyR%t last_accepted(((s0/usr/lib/python2.7/multiprocessing/connection.pyRys  cCsŽ|pt|ƒ}|dkr-t|ƒ}n t|ƒ}|dk rat|tƒ ratd‚n|dk rŠt||ƒt||ƒn|S(s= Returns a connection to the address of a `Listener` Rsauthkey should be a byte stringN( R&t PipeClientt SocketClientR+R,R-R.R6R5(R%RR2R7((s0/usr/lib/python2.7/multiprocessing/connection.pyR„s     cCsĖ|r…tjƒ\}}|jtƒ|jtƒtjtj|jƒƒƒ}tjtj|jƒƒƒ}|j ƒ|j ƒn<tj ƒ\}}tj|dt ƒ}tj|dt ƒ}||fS(sL Returns pair of connection objects at either end of a pipe twritabletreadable( tsockett socketpairt setblockingtTruet_multiprocessingt ConnectionRtduptfilenoR tpipetFalse(tduplexts1ts2tc1tc2tfd1tfd2((s0/usr/lib/python2.7/multiprocessing/connection.pyR»s    (Rc CsUtdƒ}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjtj Btj Bd||tj tj ƒ}tj ||dtj tjdtj ƒ}tj|tj ddƒytj|tj ƒWn/tk r }|jdtjkr!‚q!nXtj|d|ƒ} tj|d|ƒ} | | fS(sL Returns pair of connection objects at either end of a pipe RiiRBRCN(R RtPIPE_ACCESS_DUPLEXt GENERIC_READt GENERIC_WRITEtBUFSIZEtPIPE_ACCESS_INBOUNDtCreateNamedPipetPIPE_TYPE_MESSAGEtPIPE_READMODE_MESSAGEt PIPE_WAITtNMPWAIT_WAIT_FOREVERtNULLt CreateFilet OPEN_EXISTINGtSetNamedPipeHandleStateR+tConnectNamedPipet WindowsErrortargstERROR_PIPE_CONNECTEDRHtPipeConnection( RNR%topenmodetaccesstobsizetibsizeth1th2teRQRR((s0/usr/lib/python2.7/multiprocessing/connection.pyRŃs2      $ R*cBs,eZdZdd„Zd„Zd„ZRS(sO Representation of a socket which is bound to an address and listening icCsötjtt|ƒƒ|_yb|jjtjtjdƒ|jjtƒ|jj|ƒ|jj |ƒ|jj ƒ|_ Wn$tj k r£|jj ƒ‚nX||_d|_|dkrét|tjd|fddƒ|_n d|_dS(NiR Ret exitpriorityi(RDtgetattrt_sockett setsockoptt SOL_SOCKETt SO_REUSEADDRRFRGtbindtlistent getsocknameR8terrorR t_familyR+R:RRtunlinkt_unlink(R0R%RR1((s0/usr/lib/python2.7/multiprocessing/connection.pyR3’s     $cCsT|jjƒ\}|_|jtƒt|jƒƒ}tj|ƒ}|j ƒ|S(N( RqR4R:RFRGR RKRHRIR (R0tstfdtconn((s0/usr/lib/python2.7/multiprocessing/connection.pyR4s   cCs-|jjƒ|jdk r)|jƒndS(N(RqR R{R+(R0((s0/usr/lib/python2.7/multiprocessing/connection.pyR s (R;R<R=R3R4R (((s0/usr/lib/python2.7/multiprocessing/connection.pyR*ūs  cCsßt|ƒ}tjtt|ƒƒ}|jtƒtƒ}xsy|j|ƒWnXtjk rØ}|jdt j ks…t |ƒr˜t d|ƒ‚nt jdƒq=XPq=‚t|jƒƒ}tj|ƒ}|jƒ|S(sO Return a connection object connected to the socket given by `address` isfailed to connect to address %sg{®Gįz„?(R&RDRpRFRGRtconnectRxReterrnot ECONNREFUSEDRRRtsleepR RKRHRIR (R%RR|RRnR}R~((s0/usr/lib/python2.7/multiprocessing/connection.pyRA"s$   "  R(cBs2eZdZdd„Zd„Zed„ƒZRS(s0 Representation of a named pipe c Cs ||_tj|tjtjtjBtjBtjtttj tj ƒ}|g|_ d|_ td|jƒt|tjd|j |jfddƒ|_dS(Ns listener created with address=%rReRoi(R8RRZRUR[R\R]tPIPE_UNLIMITED_INSTANCESRXR^R_t _handle_queueR+R:RRR(t_finalize_pipe_listenerR (R0R%R1thandle((s0/usr/lib/python2.7/multiprocessing/connection.pyR3Gs       c CsÅtj|jtjtjtjBtjBtjtttj tj ƒ}|j j |ƒ|j j dƒ}ytj|tj ƒWn8tk r·}|jdtjtjfkrø‚qønXtj|ƒS(Ni(RRZR8RUR[R\R]RƒRXR^R_R„tappendtpopRcRdReRft ERROR_NO_DATARHRg(R0t newhandleR†Rn((s0/usr/lib/python2.7/multiprocessing/connection.pyR4Zs    cCs,td|ƒx|D]}t|ƒqWdS(Ns closing listener with address=%r(RR (tqueueR%R†((s0/usr/lib/python2.7/multiprocessing/connection.pyR…ns  N(R;R<R=R+R3R4t staticmethodR…(((s0/usr/lib/python2.7/multiprocessing/connection.pyR(Cs  cCsČtƒ}x–yHtj|dƒtj|tjtjBdtjtjdtjƒ}WnDtk rš}|j dtj tj fks‘t |ƒrœ‚qœq XPq ‚tj |tjddƒtj|ƒS(sU Return a connection object connected to the pipe given by `address` ičiN(RRt WaitNamedPipeR`RVRWR_RaRdRetERROR_SEM_TIMEOUTtERROR_PIPE_BUSYRRbR\R+RHRg(R%RthRn((s0/usr/lib/python2.7/multiprocessing/connection.pyR@ts  " is #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|tƒS(Ni’’’’(thashlibRptHMAC_DIGEST_NAME(R‘((s0/usr/lib/python2.7/multiprocessing/connection.pytget_digestmod_for_hmac˜s cCs’ddl}tjtƒ}|jt|ƒ|j||tƒƒjƒ}|j dƒ}||kru|jt ƒn|jt ƒt dƒ‚dS(Ni’’’’isdigest received was wrong( thmacRturandomtMESSAGE_LENGTHt send_bytest CHALLENGEtnewR“tdigestt recv_bytestWELCOMEtFAILURER(t connectionR2R”tmessageRštresponse((s0/usr/lib/python2.7/multiprocessing/connection.pyR5œs   cCs„ddl}|jdƒ}|ttƒ}|j||tƒƒjƒ}|j|ƒ|jdƒ}|tkr€t dƒ‚ndS(Ni’’’’isdigest sent was rejected( R”R›tlenR˜R™R“RšR—RœR(RžR2R”RŸRšR ((s0/usr/lib/python2.7/multiprocessing/connection.pyR6©s   tConnectionWrappercBs#eZd„Zd„Zd„ZRS(cCsO||_||_||_x-dD]%}t||ƒ}t|||ƒq"WdS(NRKR tpollR›R—(sfilenoscloseR£s recv_bytess send_bytes(t_connt_dumpst_loadsRptsetattr(R0R~tdumpstloadstattrtobj((s0/usr/lib/python2.7/multiprocessing/connection.pyR3ŗs     cCs#|j|ƒ}|jj|ƒdS(N(R„R¤R—(R0R«R|((s0/usr/lib/python2.7/multiprocessing/connection.pytsendĮscCs|jjƒ}|j|ƒS(N(R¤R›R¦(R0R|((s0/usr/lib/python2.7/multiprocessing/connection.pytrecvÄs(R;R<R3R¬R­(((s0/usr/lib/python2.7/multiprocessing/connection.pyR¢¹s  cCs%tj|fddddƒjdƒS(Nitutf8(t xmlrpclibRØR+tencode(R«((s0/usr/lib/python2.7/multiprocessing/connection.pyt _xml_dumpsČscCs%tj|jdƒƒ\\}}|S(NR®(RÆR©tdecode(R|R«tmethod((s0/usr/lib/python2.7/multiprocessing/connection.pyt _xml_loadsĖs!t XmlListenercBseZd„ZRS(cCs+ddlatj|ƒ}t|ttƒS(Ni’’’’(RÆRR4R¢R±R“(R0R«((s0/usr/lib/python2.7/multiprocessing/connection.pyR4Šs (R;R<R4(((s0/usr/lib/python2.7/multiprocessing/connection.pyRµĻscOs%ddlatt||ŽttƒS(Ni’’’’(RÆR¢RR±R“(Retkwds((s0/usr/lib/python2.7/multiprocessing/connection.pyt XmlClientÖs (8t__all__RtsysRDR€RRt itertoolsRHtmultiprocessingRRtmultiprocessing.utilRRRRtmultiprocessing.forkingR R RXtCONNECTION_TIMEOUTR’tcountRR'tfamiliesthasattrtplatformRRR R&tobjectRR+RRGRRR*RAR(R@R–R˜RœRR“R5R6R¢R±R“RµR·(((s0/usr/lib/python2.7/multiprocessing/connection.pyt#sd        "      , *' 1