]x @sIddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z dd l m Z mZdd l mZy2ddlZdd lmZmZmZmZWn*ek r"ejd krdZYnXd ZdZejZdZdgZeedrldZedg7Zejd krdZedg7ZeddZddZddZ ddZ!ddZ"GdddZ#erGddde#Z$Gd d!d!e#Z%Gd"dde&Z'ddd#dZ(ejd kr[d$d%dZ)nd$d&dZ)Gd'd(d(e&Z*d)d*Z+ejd krGd+d,d,e&Z,d-d.Z-d/Z.d0Z/d1Z0d2Z1d3d4Z2d5d6Z3Gd7d8d8e&Z4d9d:Z5d;d<Z6Gd=d>d>e'Z7d?d@Z8ejd kr|dAdBZ9ej:ej;hZ<ddCdZ=n?ddl>Z>ee>dDre>j?Z@n e>jAZ@ddEdZ=ejd krdFdGZBdHdIZCe jDe%eBdJdKZEdLdMZFe jDe$eEn(dNdGZBdOdIZCe jDe%eBdS)PClientListenerPipewaitN) reduction)util)AuthenticationErrorBufferTooShort)ForkingPickler) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCstj|S)N)time)timeoutr//opt/alt/python35/lib64/python3.5/connection.py _init_timeout;srcCstj|kS)N)r)trrr_check_timeout>srcCs|dkrd S|dkr8tjdddtjS|dkrptjdd tjttfdd Std dS) Nr localhostrrprefixz listener-dirrz\\.\pipe\pyc-%d-%d-zunrecognized family)rr) tempfilemktempr get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressEs     r(cCsitjdkr+|dkr+td|tjdkre|dkrett|setd|dS)NrrzFamily %s is not recognized.r)sysplatformr&hasattrsocket)r'rrr_validate_familySs r-cCset|tkrdSt|tkr;|jdr;dSt|tkrQdStd|dS)Nrz\\rrzaddress type of %r unrecognized)typetuplestr startswithr&)addressrrr address_type_s!r3c@s!eZdZdZddddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZddddZddZdddZdd d!Zd"d#Zd$d%d&Zd'd(Zd)d*ZdS)+_ConnectionBaseNTcCs]|j}|dkr$td| r>| r>td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r&_handle _readable _writable)selfhandlereadablewritablerrr__init__us      z_ConnectionBase.__init__cCs|jdk r|jdS)N)r6_close)r9rrr__del__sz_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r6OSError)r9rrr _check_closedsz_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r7r@)r9rrr_check_readables z_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r8r@)r9rrr_check_writables z_ConnectionBase._check_writablecCs/|jrd|_n |jtddS)NFzbad message length)r8r7closer@)r9rrr_bad_message_lengths   z#_ConnectionBase._bad_message_lengthcCs |jdkS)N)r6)r9rrrclosedsz_ConnectionBase.closedcCs|jS)N)r7)r9rrrr;sz_ConnectionBase.readablecCs|jS)N)r8)r9rrrr<sz_ConnectionBase.writablecCs|j|jS)N)rAr6)r9rrrfilenos z_ConnectionBase.filenoc Cs.|jdk r*z|jWdd|_XdS)N)r6r>)r9rrrrDsz_ConnectionBase.closercCs|j|jt|}|jdkrAtt|}t|}|dkretd||kr}td|dkr||}n7|dkrtdn|||krtd|j||||dS)Nrrzoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)rArC memoryviewitemsizebyteslenr& _send_bytes)r9bufoffsetsizemnrrr send_bytess"            z_ConnectionBase.send_bytescCs.|j|j|jtj|dS)N)rArCrLr dumps)r9objrrrsends  z_ConnectionBase.sendcCsg|j|j|dk r8|dkr8td|j|}|dkr]|j|jS)Nrznegative maxlength)rArBr& _recv_bytesrEgetvalue)r9 maxlengthrMrrr recv_bytess     z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkrWtdn||krotd|j}|j}|||krt|j |j d|j |||||||SWdQRXdS)Nrznegative offsetzoffset too large) rArBrHrIrKr&rVtellr rWseekreadinto)r9rMrNrPrIbytesizeresultrOrrrrecv_bytes_intos"         z_ConnectionBase.recv_bytes_intocCs3|j|j|j}tj|jS)N)rArBrVr loads getbuffer)r9rMrrrrecvs   z_ConnectionBase.recvgcCs!|j|j|j|S)N)rArB_poll)r9rrrrpolls  z_ConnectionBase.pollcCs|S)Nr)r9rrr __enter__sz_ConnectionBase.__enter__cCs|jdS)N)rD)r9exc_type exc_valueexc_tbrrr__exit__sz_ConnectionBase.__exit__)__name__ __module__ __qualname__r6r=r?rArBrCrEpropertyrFr;r<rGrDrRrUrYr_rbrdrerirrrrr4rs(            r4c@s[eZdZdZejddZddZdddZd d Z d d Z dS) PipeConnectionFcCs||jdS)N)r6)r9Z _CloseHandlerrrr>szPipeConnection._closecCstj|j|dd\}}zJy.|tjkrQtj|jgdt}Wn|jYnXWd|jd\}}XdS)N overlappedTF) _winapiZ WriteFiler6ERROR_IO_PENDINGWaitForMultipleObjectseventrcancelGetOverlappedResult)r9rMoverrwaitresZnwrittenrrrrLs!  zPipeConnection._send_bytesNc Csi|jrd|_tjS|dkr.dn t|d}ytj|j|dd\}}zJy.|tjkrtj|j gdt }Wn|j YnXWd|j d\}}|dkrtj}|j |j|S|tjkr|j||SXWnCtk rX}z#|jtjkrCtnWYdd}~XnXtddS)NFroTrz.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrpReadFiler6rqrrrsrrtruwriteraZERROR_MORE_DATA_get_more_datar@winerrorERROR_BROKEN_PIPEEOFError RuntimeError) r9maxsizeZbsizervrwrxZnreadferrrrV&s6   !     zPipeConnection._recv_bytescCs?|js%tj|jddkr)dStt|g|S)NrT)rzrp PeekNamedPiper6boolr)r9rrrrrcFs zPipeConnection._pollcCs|j}tj}|j|tj|jd}|dk rgt|||krg|jtj |j|dd\}}|j d\}}|j|j|S)NrroT) rar{r|rrprr6rKrEr~ru)r9rvrrMrleftrwZrbytesrrrrLs   " !zPipeConnection._get_more_data) rjrkrlrzrp CloseHandler>rLrVrcrrrrrrn s   rnc@seZdZer9ejddZejZej Z n$e j ddZe j Ze jZ eddZe ddZdd Zd d d Zd dZd S) ConnectioncCs||jdS)N)r6)r9r>rrrr>cszConnection._closecCs||jdS)N)r6)r9r>rrrr>hscCsPt|}x=||j|}||8}|dkr8P||d}qWdS)Nr)rKr6)r9rMr remainingrQrrr_sendms   zConnection._sendcCstj}|j}|}xo|dkr|||}t|}|dkrr||krftn td|j|||8}qW|S)Nrzgot end of file during message)r{r|r6rKrr@r)r9rOreadrMr:rchunkrQrrr_recvvs        zConnection._recvcCs\t|}tjd|}|dkrG|j||j|n|j||dS)Nz!ii@)rKstructpackr)r9rMrQheaderrrrrLs    zConnection._send_bytesNcCsS|jd}tjd|j\}|dk rF||krFdS|j|S)Nz!i)rrunpackrW)r9rrMrOrrrrVs zConnection._recv_bytescCst|g|}t|S)N)rr)r9rrrrrrcszConnection._poll)rjrkrlrp_multiprocessingZ closesocketr>rU_writerb_readr"rDrrrrrLrVrcrrrrr\s       rc@s|eZdZddddddZddZddZed d Zed d Zd d Z ddZ dS)rNrcCs|p|rt|pt}|p-t|}t||dkr[t|||_nt||||_|dk rt|t rt d||_ dS)Nrzauthkey should be a byte string) r3default_familyr(r- PipeListener _listenerSocketListener isinstancerJ TypeError_authkey)r9r2r'backlogauthkeyrrrr=s   zListener.__init__cCsW|jdkrtd|jj}|jrSt||jt||j|S)Nzlistener is closed)rr@acceptrdeliver_challengeanswer_challenge)r9crrrrs  zListener.acceptcCs,|j}|dk r(d|_|jdS)N)rrD)r9listenerrrrrDs   zListener.closecCs |jjS)N)r_address)r9rrrszListener.cCs |jjS)N)r_last_accepted)r9rrrrscCs|S)Nr)r9rrrreszListener.__enter__cCs|jdS)N)rD)r9rfrgrhrrrriszListener.__exit__) rjrkrlr=rrDrmr2 last_acceptedrerirrrrrs    cCs|pt|}t||dkr7t|}n t|}|dk rkt|t rktd|dk rt||t|||S)Nrzauthkey should be a byte string) r3r- PipeClient SocketClientrrJrrr)r2r'rrrrrrs       TcCs|rYtj\}}|jd|jdt|j}t|j}n6tj\}}t|dd}t|dd}||fS)NTr<Fr;)r, socketpair setblockingrdetachr"pipe)duplexs1s2c1c2fd1fd2rrrrs  c CsAtd}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } t|d|} t|d|} | | fS)NrrrroTr<r;)r(rpPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperurn) rr2ZopenmodeaccessZobsizeZibsizeZh1Zh2ro_rwrrrrrrs2        c@s7eZdZdddZddZddZdS) rrcCstjtt||_yqtjdkrI|jjtjtjd|jjd|jj ||jj ||jj |_ Wn"t k r|jjYnX||_d|_|dkrtj|tjd|fdd|_n d|_dS)NposixrTrargs exitpriorityr)r,getattr_socketr"name setsockopt SOL_SOCKET SO_REUSEADDRrbindlisten getsocknamerr@rD_familyrrFinalizeunlink_unlink)r9r2r'rrrrr=8s$      $zSocketListener.__init__cCs5|jj\}|_|jdt|jS)NT)rrrrrr)r9srrrrPs zSocketListener.acceptc Cs>z|jjWd|j}|dk r9d|_|XdS)N)rrDr)r9rrrrrDUs    zSocketListener.closeN)rjrkrlr=rrDrrrrr4s  rc Cs\t|}tjtt|1}|jd|j|t|jSWdQRXdS)NT)r3r,rrconnectrr)r2r'rrrrr_s    rc@sLeZdZdddZdddZddZed d ZdS) rNcCsq||_|jddg|_d|_tjd|jtj|tjd|j|jfdd|_ dS)NfirstTz listener created with address=%rrrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrD)r9r2rrrrr=ss   zPipeListener.__init__Fc CsbtjtjB}|r#|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rprrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r9rflagsrrrr~s    zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn:tk r}}z|jtjkrkWYdd}~XnbXzHytj |j gdt }Wn"|j tj |YnXWd|jd\}}Xt|S)NrroTF)rappendrpoprprr@rZ ERROR_NO_DATArrrsrrtrrurn)r9r:rvrresrrwrrrrs"   zPipeListener.acceptcCs2tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrpr)queuer2r:rrrrs z$PipeListener._finalize_pipe_listener)rjrkrlr=rr staticmethodrrrrrros   rcCst}xyKtj|dtj|tjtjBdtjtjtjtj}WnOt k r}z/|j tj tj fkst |rWYdd}~Xq XPq Wtj|tjddt|S)Nir)rrpZ WaitNamedPiperrrrrrr@rZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrn)r2rhrrrrrs"  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}tjt}|jt||j||dj}|jd}||krr|jt n|jt t ddS)Nrmd5zdigest received was wrong) hmacr"urandomMESSAGE_LENGTHrR CHALLENGEnewdigestrYWELCOMEFAILUREr ) connectionrrmessagerresponserrrrs   rcCsddl}|jd}|ttd}|j||dj}|j||jd}|tkrtddS)Nrrrzdigest sent was rejected) rrYrKrrrrRrr )rrrrrrrrrrs   rc@s4eZdZddZddZddZdS)ConnectionWrappercCsO||_||_||_x-dD]%}t||}t|||q"WdS)NrGrDrdrYrR)rGrDrdrYrR)_conn_dumps_loadsrsetattr)r9connrSr`attrrTrrrr=s     zConnectionWrapper.__init__cCs#|j|}|jj|dS)N)rrrR)r9rTrrrrrUszConnectionWrapper.sendcCs|jj}|j|S)N)rrYr)r9rrrrrbszConnectionWrapper.recvN)rjrkrlr=rUrbrrrrrs   rcCs%tj|fddddjdS)Nrzutf-8) xmlrpclibrSencode)rTrrr _xml_dumpssrcCs%tj|jd\\}}|S)Nzutf-8)rr`decode)rrTmethodrrr _xml_loadss!rc@seZdZddZdS) XmlListenercCs.ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r9rTrrrrszXmlListener.acceptN)rjrkrlrrrrrrs rcOs(ddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClientsr cCst|}g}x|rtj|d|}|tkr@Pnrt|koatt|knrs|t8}n?t|kott|knr|t8}n td|j||||dd}d}qW|S)NFzShould not get hererr) listrprrrr rKr rr)ZhandlesrLreadyrrrr_exhaustive_waits   & &   r c .s |dkrt}n)|dkr*d}nt|dd}t|}ig}tt}zxy|D]q}yt|d}Wn"tk r||jrszwait..cs"g|]}|kr|qSrr)ro) ready_objectsrr ss zwait..)rr)rintr setrAttributeErrorr5rpr~r@r _ready_errorsrqrrsr)Zgetwindowsversionrur+rzaddr keysrtZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrGrvrwrrr)rrrr'sh         "  "            PollSelectorc Cst}x!|D]}|j|tjqW|dk rLtj|}xV|j|}|rudd|DS|dk rO|tj}|dkrO|SqOWWdQRXdS)NcSsg|]\}}|jqSr)fileobj)rkeyeventsrrrrs zwait..r) _WaitSelectorregister selectors EVENT_READrselect)rrselectorrTdeadliner rrrrs     c Csm|j}tj|tjtj?}ddlm}|j|}t||j |j ffSWdQRXdS)Nr)resource_sharer) rGr,fromfdr SOCK_STREAMrr)Z DupSocketrebuild_connectionr;r<)rr:rr)dsrrrreduce_connections  r.cCs"|j}t|j||S)N)rr)r-r;r<sockrrrr,s r,cCs_|jrtjnd|jr'tjndB}tj|j|}t||j|jffS)Nr) r;rpZFILE_GENERIC_READr<ZFILE_GENERIC_WRITErZ DupHandlerGrebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsr2cCs|j}t|||S)N)rrn)r1r;r<r:rrrr0s r0cCs.tj|j}t||j|jffS)N)rDupFdrGr,r;r<)rdfrrrr.scCs|j}t|||S)N)rr)r4r;r<fdrrrr,s )G__all__r{r"r)r,rrr itertoolsrrrrr r r rpr r rr ImportErrorr*rCONNECTION_TIMEOUTcountr%rfamiliesr+rrr(r-r3r4rnrobjectrrrrrrrrrrrrrrrrrr r rZERROR_NETNAME_DELETEDrrr$rr"SelectSelectorr.r,r#r2r0rrrr s          &         PJ8,+ 8      P