
                             S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrSrSr	S r
SrS r " S S5      r " S S	\R                  5      rg)
    N   i   
   c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                 T   > U R                   (       a  [        S5      eT" U /UQ70 UD6$ )Nz1Can not reuse socket after connection was closed.)_closedRuntimeError)selfargskwargsfs      /lib/third_party/docker/transport/npipesocket.pywrappedcheck_closed.<locals>.wrapped   s1    <<C  ''''    )	functoolswraps)r   r   s   ` r   check_closedr      s%    __Q( ( Nr   c                   T   \ rS rSrSrSS jrS rS rS r\	S S j5       r
\	S	 5       r\	S
 5       r\	S 5       rS rS rSS jrS rS rS!S jr\	S S j5       r\	S S j5       r\	S"S j5       r\	S S j5       r\	S S j5       r\	S S j5       r\	S 5       rS rS rS rS r\	S 5       rSr g)#NpipeSocket   zPartial implementation of the socket API over windows named pipes.
This implementation is only designed to be used as a client socket,
and server-specific methods (bind, listen, accept...) are not
implemented.
Nc                 H    [         R                  U l        Xl        SU l        g NF)	win32pipeNMPWAIT_USE_DEFAULT_WAIT_timeout_handler   )r	   handles     r   __init__NpipeSocket.__init__$   s    !::r   c                     [        5       eNNotImplementedErrorr	   s    r   acceptNpipeSocket.accept)       !##r   c                     [        5       er!   r"   r	   addresss     r   bindNpipeSocket.bind,   r'   r   c                 F    U R                   R                  5         SU l        g NT)r   Closer   r$   s    r   closeNpipeSocket.close/   s    r   c           	          [         R                  " U[         R                  [         R                  -  SS [         R                  [
        [        -  [         R                  -  S5      n[        R                   " U5      S   U l        X0l        Xl        g ! [        R                   aV  nUR                  [        :X  a;  US-   nU[        :  a,  [        R                  " S5        U R                  X5      s S nA$ UeS nAff = f)Nr      )	win32file
CreateFileGENERIC_READGENERIC_WRITEOPEN_EXISTINGcSECURITY_ANONYMOUScSECURITY_SQOS_PRESENTFILE_FLAG_OVERLAPPEDr   errorwinerrorcERROR_PIPE_BUSYMAXIMUM_RETRY_COUNTtimesleepconnectGetNamedPipeInfoflagsr   _address)r	   r*   retry_countr   es        r   rB   NpipeSocket.connect3   s    	))&&)@)@@''$,-445 
F0 //7:
!  	 zz-- *Ao"55JJqM<<==G	s%   A%B C<&A	C7/C<5C77C<c                 $    U R                  U5      $ r!   )rB   r)   s     r   
connect_exNpipeSocket.connect_exS   s    ||G$$r   c                 (    SU l         U R                  $ r.   )r   r   r$   s    r   detachNpipeSocket.detachW   s    ||r   c                 ,    [        U R                  5      $ r!   )r   r   r$   s    r   dupNpipeSocket.dup\   s    4<<((r   c                     U R                   $ r!   rE   r$   s    r   getpeernameNpipeSocket.getpeername`       }}r   c                     U R                   $ r!   rS   r$   s    r   getsocknameNpipeSocket.getsocknamec   rV   r   c                     [        5       er!   r"   )r	   leveloptnamebuflens       r   
getsockoptNpipeSocket.getsockoptf   r'   r   c                     [        5       er!   r"   )r	   controloptions      r   ioctlNpipeSocket.ioctli   r'   r   c                     [        5       er!   r"   )r	   backlogs     r   listenNpipeSocket.listenl   r'   r   c                     UR                  S5      S:w  a
  [        5       e[        U 5      nUb  US::  a  [        R                  n[        R
                  " X2S9$ )Nbrr   )buffer_size)stripr#   NpipeFileIOBaseioDEFAULT_BUFFER_SIZEBufferedReader)r	   modebufsizerawios       r   makefileNpipeSocket.makefileo   sL    ::c?c!%''%?gl,,G  <<r   c                 L    [         R                  " U R                  U5      u  p4U$ r!   )r4   ReadFiler   )r	   rs   rD   errdatas        r   recvNpipeSocket.recvw   s    &&t||W=	r   c                 >    U R                  X5      nX0R                  4$ r!   )r{   rE   )r	   rs   rD   rz   s       r   recvfromNpipeSocket.recvfrom|   s    yy(mm$$r   c                 >    U R                  XU5      U R                  4$ r!   )	recv_intorE   )r	   bufnbytesrD   s       r   recvfrom_intoNpipeSocket.recvfrom_into   s    ~~c514==@@r   c                 j   Un[        U[        5      (       d  [        U5      n[        R                  " S SSS 5      n [        R
                  " 5       nXEl        [        R                  " U R                  U(       a  US U OUU5      u  pg[        R                  " X@R                  5      nU[        R                  :X  a&  [        R                  " U R                  5        [        e[        R                  " U R                  US5      [         R"                  " U5        $ ! [         R"                  " U5        f = fNTr   )
isinstance
memoryview
win32eventCreateEvent
pywintypes
OVERLAPPEDhEventr4   rx   r   WaitForSingleObjectr   WAIT_TIMEOUTCancelIoTimeoutErrorGetOverlappedResultwin32apiCloseHandle)	r	   r   r   readbufevent
overlappedry   rz   wait_results	            r   r   NpipeSocket.recv_into   s    #z** oG&&tT4>	(#..0J %!**$* IC
 %88NKj555""4<<0""00z1M  'H  's   CD D2c                    [         R                  " S SSS 5      n [        R                  " 5       nX4l        [
        R                  " U R                  X5        [         R                  " X0R                  5      nU[         R                  :X  a&  [
        R                  " U R                  5        [        e[
        R                  " U R                  US5      [        R                  " U5        $ ! [        R                  " U5        f = fr   )r   r   r   r   r   r4   	WriteFiler   r   r   r   r   r   r   r   r   )r	   stringrD   r   r   r   s         r   sendNpipeSocket.send   s    &&tT4>
	(#..0J %fA$88NKj555""4<<0""00z1M  'H  's   B7C) )Dc                 $    U R                  X5      $ r!   )r   )r	   r   rD   s      r   sendallNpipeSocket.sendall   s    yy''r   c                 F    U R                  U5        U R                  U5      $ r!   )rB   r   )r	   r   r*   s      r   sendtoNpipeSocket.sendto   s    Wyy  r   c                 T    U(       a  U R                  S 5      $ U R                  S5      $ )Nr   )
settimeout)r	   flags     r   setblockingNpipeSocket.setblocking   s#    ??4((q!!r   c                     Uc  [         R                  U l        g [        U[        [
        45      (       a  US:  a  [        S5      e[        US-  5      U l        g )Nr   zTimeout value out of rangei  )r   INFINITEr   r   floatint
ValueError)r	   values     r   r   NpipeSocket.settimeout   sI    =&//DMEE3<00EAI9::  -DMr   c                     U R                   $ r!   )r   r$   s    r   
gettimeoutNpipeSocket.gettimeout   rV   r   c                     [        5       er!   r"   )r	   r[   r\   r   s       r   
setsockoptNpipeSocket.setsockopt   r'   r   c                 "    U R                  5       $ r!   )r0   )r	   hows     r   shutdownNpipeSocket.shutdown   s    zz|r   )rE   r   r   r   rD   r!   )r   )NN)r   r   )!__name__
__module____qualname____firstlineno____doc__r   r%   r+   r0   r   rB   rJ   rM   rP   rT   rX   r^   rc   rg   ru   r{   r~   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r   r   r   r      s?   
$$    > % %   ) )$$$=   % % A A ( (, ( ( ( ( ! !"
.$  r   r   c                   R   ^  \ rS rSrS rU 4S jrS rS rS rS r	S r
S	 rS
rU =r$ )rn      c                     Xl         g r!   sock)r	   npipe_sockets     r   r   NpipeFileIOBase.__init__   s     	r   c                 0   > [         TU ]  5         S U l        g r!   )superr0   r   )r	   	__class__s    r   r0   NpipeFileIOBase.close   s    	r   c                 6    U R                   R                  5       $ r!   )r   filenor$   s    r   r   NpipeFileIOBase.fileno   s    yy!!r   c                     gr   r   r$   s    r   isattyNpipeFileIOBase.isatty       r   c                     gr.   r   r$   s    r   readableNpipeFileIOBase.readable   s    r   c                 8    U R                   R                  U5      $ r!   )r   r   )r	   r   s     r   readintoNpipeFileIOBase.readinto   s    yy""3''r   c                     gr   r   r$   s    r   seekableNpipeFileIOBase.seekable   r   r   c                     gr   r   r$   s    r   writableNpipeFileIOBase.writable   r   r   r   )r   r   r   r   r   r0   r   r   r   r   r   r   r   __classcell__)r   s   @r   rn   rn      s0    !"( r   rn   )r   r@   ro   r4   r   r   r   r   r>   r:   r9   r?   r   r   	RawIOBasern   r   r   r   <module>r      sW      	      !   n nbbll r   