Ñò
$8Zc           @   s  d  d d g Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k	 l
 Z
 l Z d d k l Z l Z l Z l Z d d k l Z l Z d Z d	 Z e i ƒ  Z d
 Z d
 g Z e e d ƒ o d Z e d g 7Z n e i d j o d Z e d g 7Z n e d „ Z d „  Z d „  Z d „  Z d e  f d „  ƒ  YZ! d d d „ Z# e i d j o e$ d „ Z% n d d k l& Z& e$ d „ Z% d e  f d „  ƒ  YZ' d „  Z( e i d j o# d e  f d „  ƒ  YZ) d „  Z* n d Z+ d Z, d Z- d  Z. d! „  Z/ d" „  Z0 d# e  f d$ „  ƒ  YZ1 d% „  Z2 d& „  Z3 d' e! f d( „  ƒ  YZ4 d) „  Z5 d S(*   t   Clientt   Listenert   PipeiÿÿÿÿN(   t   current_processt   AuthenticationError(   t   get_temp_dirt   Finalizet	   sub_debugt   debug(   t	   duplicatet   closei    g      4@t   AF_INETt   AF_UNIXt   win32t   AF_PIPEc         C   s   t  i  ƒ  |  S(   N(   t   time(   t   timeout(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   _init_timeout/   s    c         C   s   t  i  ƒ  |  j S(   N(   R   (   t   t(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   _check_timeout2   s    c         C   s}   |  d j o d S|  d j o t  i d d d t ƒ  ƒ S|  d j o' t  i d d	 t i ƒ  t i ƒ  f ƒ St d
 ƒ ‚ d S(   s?   
    Return an arbitrary free address for the given family
    R   t	   localhosti    R   t   prefixs	   listener-t   dirR   s   \\.\pipe\pyc-%d-%d-s   unrecognized familyN(   R   i    (   t   tempfilet   mktempR   t   ost   getpidt   _mmap_countert   nextt
   ValueError(   t   family(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   arbitrary_address9   s    c         C   sl   t  |  ƒ t j o d St  |  ƒ t j o |  i d ƒ o d St  |  ƒ t j o d St d |  ƒ ‚ d S(   s]   
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    R   s   \\R   R   s   address type of %r unrecognizedN(   t   typet   tuplet   strt
   startswithR   (   t   address(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   address_typeH   s    #c           B   sS   e  Z d  Z d d d d d „ Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ 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.
    i   c         C   s¤   | p | o t  | ƒ p t } | p
 t | ƒ } | d j o t | | ƒ |  _ n t | | | ƒ |  _ | d  j	 o t | t ƒ o t	 d ‚ n | |  _
 d  S(   NR   s   authkey should be a byte string(   R%   t   default_familyR   t   PipeListenert	   _listenert   SocketListenert   Nonet
   isinstancet   bytest	   TypeErrort   _authkey(   t   selfR$   R   t   backlogt   authkey(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   __init__b   s    c         C   sA   |  i  i ƒ  } |  i o$ t | |  i ƒ t | |  i ƒ n | S(   sz   
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        (   R(   t   acceptR.   t   deliver_challenget   answer_challenge(   R/   t   c(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR3   q   s
    
c         C   s   |  i  i ƒ  S(   sA   
        Close the bound socket or named pipe of `self`.
        (   R(   R
   (   R/   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR
   }   s    c         C   s
   |  i  i S(    (   R(   t   _address(   R/   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   <lambda>ƒ   s    c         C   s
   |  i  i S(    (   R(   t   _last_accepted(   R/   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR8   „   s    N(
   t   __name__t
   __module__t   __doc__R*   R2   R3   R
   t   propertyR$   t   last_accepted(    (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR   [   s   		c         C   s–   | p
 t  |  ƒ } | d j o t |  ƒ } n t |  ƒ } | d j	 o t | t ƒ o t d ‚ n | d j	 o t | | ƒ t | | ƒ n | S(   s=   
    Returns a connection to the address of a `Listener`
    R   s   authkey should be a byte stringN(	   R%   t
   PipeClientt   SocketClientR*   R+   R,   R-   R5   R4   (   R$   R   R1   R6   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR    ‡   s    c         C   s³   |  of t  i ƒ  \ } } t i t i | i ƒ  ƒ ƒ } t i t i | i ƒ  ƒ ƒ } | i ƒ  | i ƒ  n= t i ƒ  \ } } t i | d t	 ƒ} t i | d t	 ƒ} | | f S(   sL   
        Returns pair of connection objects at either end of a pipe
        t   writablet   readable(
   t   sockett
   socketpairt   _multiprocessingt
   ConnectionR   t   dupt   filenoR
   t   pipet   False(   t   duplext   s1t   s2t   c1t   c2t   fd1t   fd2(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR      s    
(   R   c      	   C   s[  t  d ƒ } |  o* t i } t i t i B} t t } } n  t i } t i } d t } } t i | | t i t i	 Bt i
 Bd | | t i t i ƒ } t i | | d t i t i d t i ƒ } t i | t i	 d d ƒ y t i | t i ƒ Wn3 t j
 o' } | i d t i j o ‚  q'n Xt i | d |  ƒ}	 t i | d |  ƒ}
 |	 |
 f S(   sL   
        Returns pair of connection objects at either end of a pipe
        R   i    i   RA   RB   N(   R   R   t   PIPE_ACCESS_DUPLEXt   GENERIC_READt   GENERIC_WRITEt   BUFSIZEt   PIPE_ACCESS_INBOUNDt   CreateNamedPipet   PIPE_TYPE_MESSAGEt   PIPE_READMODE_MESSAGEt	   PIPE_WAITt   NMPWAIT_WAIT_FOREVERt   NULLt
   CreateFilet   OPEN_EXISTINGt   SetNamedPipeHandleStateR*   t   ConnectNamedPipet   WindowsErrort   argst   ERROR_PIPE_CONNECTEDRE   t   PipeConnection(   RK   R$   t   openmodet   accesst   obsizet   ibsizet   h1t   h2t   eRN   RO   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR   ²   s2    			$R)   c           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   sO   
    Representation of a socket which is bound to an address and listening
    i   c         C   s½   t  i  t t  | ƒ ƒ |  _ |  i i t  i t  i d ƒ |  i i | ƒ |  i i | ƒ |  i i ƒ  |  _	 | |  _
 d  |  _ | d j o( t |  t i d | f d d ƒ|  _ n
 d  |  _ d  S(   Ni   R   Rb   t   exitpriorityi    (   RC   t   getattrt   _sockett
   setsockoptt
   SOL_SOCKETt   SO_REUSEADDRt   bindt   listent   getsocknameR7   t   _familyR*   R9   R   R   t   unlinkt   _unlink(   R/   R$   R   R0   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR2   à   s    		%c         C   sG   |  i  i ƒ  \ } |  _ t | i ƒ  ƒ } t i | ƒ } | i ƒ  | S(   N(   Rn   R3   R9   R	   RH   RE   RF   R
   (   R/   t   st   fdt   conn(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR3   ð   s
    
c         C   s/   |  i  i ƒ  |  i d  j	 o |  i ƒ  n d  S(   N(   Rn   R
   Rw   R*   (   R/   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR
   ÷   s    (   R:   R;   R<   R2   R3   R
   (    (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR)   Ü   s   	c         C   s×   t  |  ƒ } t i t t | ƒ ƒ } t ƒ  } xx y | i |  ƒ Wn] t i j
 oN } | i d t i j p t	 | ƒ o t
 d |  ƒ ‚  n t i d ƒ q0 XPq0 ‚  t | i ƒ  ƒ } t i | ƒ } | i ƒ  | S(   sO   
    Return a connection object connected to the socket given by `address`
    i    s   failed to connect to address %sg{®Gáz„?(   R%   RC   Rm   R   t   connectt   errorRb   t   errnot   ECONNREFUSEDR   R   R   t   sleepR	   RH   RE   RF   R
   (   R$   R   Rx   R   Rk   Ry   Rz   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR@   ý   s"    	$
R'   c           B   s2   e  Z d  Z d d „ Z d „  Z e d „  ƒ Z RS(   s0   
        Representation of a named pipe
        c      	   C   s    | |  _  t i | t i t i t i Bt i Bt i t t t i	 t i
 ƒ } | g |  _ d  |  _ t d |  i  ƒ t |  t i d |  i |  i  f d d ƒ|  _ d  S(   Ns    listener created with address=%rRb   Rl   i    (   R7   R   RW   RR   RX   RY   RZ   t   PIPE_UNLIMITED_INSTANCESRU   R[   R\   t   _handle_queueR*   R9   R   R   R'   t   _finalize_pipe_listenerR
   (   R/   R$   R0   t   handle(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR2   !  s    			c      	   C   sÀ   t  i |  i t  i t  i t  i Bt  i Bt  i t t t  i	 t  i
 ƒ } |  i i | ƒ |  i i d ƒ } y t  i | t  i
 ƒ Wn3 t j
 o' } | i d t  i j o ‚  q³ n Xt i | ƒ S(   Ni    (   R   RW   R7   RR   RX   RY   RZ   R€   RU   R[   R\   R   t   appendt   popR`   Ra   Rb   Rc   RE   Rd   (   R/   t	   newhandleRƒ   Rk   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR3   4  s    c         C   s,   t  d | ƒ x |  D] } t | ƒ q Wd  S(   Ns    closing listener with address=%r(   R   R
   (   t   queueR$   Rƒ   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR‚   E  s     N(   R:   R;   R<   R*   R2   R3   t   staticmethodR‚   (    (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR'     s   	c         C   sÍ   t  ƒ  } x› yH t i |  d ƒ t i |  t i t i Bd t i t i d t i ƒ } WnI t j
 o= } | i	 d t i
 t i f j p t | ƒ o ‚  q¡ q XPq ‚  t i | t i d d ƒ t i | ƒ S(   sU   
        Return a connection object connected to the pipe given by `address`
        iè  i    N(   R   R   t   WaitNamedPipeR]   RS   RT   R\   R^   Ra   Rb   t   ERROR_SEM_TIMEOUTt   ERROR_PIPE_BUSYR   R_   RY   R*   RE   Rd   (   R$   R   t   hRk   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR?   K  s     	"i   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c         C   s¥   d d  k  } t | t ƒ p t ‚ t i t ƒ } |  i t | ƒ | i	 | | ƒ i
 ƒ  } |  i d ƒ } | | j o |  i t ƒ n |  i t ƒ t d ƒ ‚ d  S(   Niÿÿÿÿi   s   digest received was wrong(   t   hmacR+   R,   t   AssertionErrorR   t   urandomt   MESSAGE_LENGTHt
   send_bytest	   CHALLENGEt   newt   digestt
   recv_bytest   WELCOMEt   FAILURER   (   t
   connectionR1   R   t   messageR”   t   response(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR4   o  s    c         C   s¼   d d  k  } t | t ƒ p t ‚ |  i d ƒ } | t t ƒ  t j p t d | ‚ | t t ƒ } | i | | ƒ i ƒ  } |  i	 | ƒ |  i d ƒ } | t
 j o t d ƒ ‚ n d  S(   Niÿÿÿÿi   s   message = %rs   digest sent was rejected(   R   R+   R,   RŽ   R•   t   lenR’   R“   R”   R‘   R–   R   (   R˜   R1   R   R™   R”   Rš   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR5   |  s    %t   ConnectionWrapperc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sO   | |  _  | |  _ | |  _ x- d D]% } t | | ƒ } t |  | | ƒ q" Wd  S(   NRH   R
   t   pollR•   R‘   (   s   filenos   closeR   s
   recv_bytess
   send_bytes(   t   _connt   _dumpst   _loadsRm   t   setattr(   R/   Rz   t   dumpst   loadst   attrt   obj(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR2     s    			 c         C   s#   |  i  | ƒ } |  i i | ƒ d  S(   N(   RŸ   Rž   R‘   (   R/   R¥   Rx   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   send”  s    c         C   s   |  i  i ƒ  } |  i | ƒ S(   N(   Rž   R•   R    (   R/   Rx   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   recv—  s    (   R:   R;   R2   R¦   R§   (    (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyRœ   Œ  s   		c         C   s%   t  i |  f d  d  d  d ƒ i d ƒ S(   Ni   t   utf8(   t	   xmlrpclibR¢   R*   t   encode(   R¥   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt
   _xml_dumps›  s    c         C   s%   t  i |  i d ƒ ƒ \ \ } } | S(   NR¨   (   R©   R£   t   decode(   Rx   R¥   t   method(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt
   _xml_loadsž  s    !t   XmlListenerc           B   s   e  Z d  „  Z RS(   c         C   s+   d d  k  a  t i |  ƒ } t | t t ƒ S(   Niÿÿÿÿ(   R©   R   R3   Rœ   R«   R®   (   R/   R¥   (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR3   £  s    (   R:   R;   R3   (    (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyR¯   ¢  s   c          O   s%   d d  k  a  t t |  | Ž  t t ƒ S(   Niÿÿÿÿ(   R©   Rœ   R    R«   R®   (   Rb   t   kwds(    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt	   XmlClient©  s    (6   t   __all__R   t   sysRC   R}   R   R   t	   itertoolsRE   t   multiprocessingR   R   t   multiprocessing.utilR   R   R   R   t   multiprocessing.forkingR	   R
   RU   t   CONNECTION_TIMEOUTt   countR   R&   t   familiest   hasattrt   platformR   R   R   R%   t   objectR   R*   R    t   TrueR   R   R)   R@   R'   R?   R   R’   R–   R—   R4   R5   Rœ   R«   R®   R¯   R±   (    (    (    s0   /usr/lib/python2.6/multiprocessing/connection.pyt   <module>	   s`   "				,*!	.				