
    2.a[                         d dl Z d dlZd dlZd dlZd dlZdZdZd ZdZd Z	 G d d      Z
 G d d	ej                        Zy)
    N   i   
   c                 B     t        j                          fd       }|S )Nc                 J    | j                   rt        d       | g|i |S )Nz1Can not reuse socket after connection was closed.)_closedRuntimeError)selfargskwargsfs      >/usr/lib/python3/dist-packages/docker/transport/npipesocket.pywrappedzcheck_closed.<locals>.wrapped   s1    <<C  ''''    )	functoolswraps)r   r   s   ` r   check_closedr      s%    __Q( ( Nr   c                   >   e Zd ZdZddZd Zd Zd Zedd       Z	ed        Z
ed	        Zed
        Zd Zd ZddZd Zd Zd dZedd       Zedd       Zed!d       Zedd       Zd Zedd       Zedd       Zed        Zd Zd Zd Zd Zed        Zy)"NpipeSocketz Partial 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                 J    t         j                  | _        || _        d| _        y NF)	win32pipeNMPWAIT_USE_DEFAULT_WAIT_timeout_handler   )r	   handles     r   __init__zNpipeSocket.__init__!   s    !::r   c                     t               NNotImplementedErrorr	   s    r   acceptzNpipeSocket.accept&       !##r   c                     t               r   r   r	   addresss     r   bindzNpipeSocket.bind)   r#   r   c                 F    | j                   j                          d| _        y NT)r   Closer   r!   s    r   closezNpipeSocket.close,   s    r   c           	         	 t        j                  |t         j                  t         j                  z  dd t         j                  t
        t        z  d      }t        j                  |      d   | _        || _        || _        y # t        j                  $ rT}|j                  t        k(  r:|dz   }|t        k  r,t        j                  d       | j                  ||      cY d }~S |d }~ww xY w)Nr      )	win32file
CreateFileGENERIC_READGENERIC_WRITEOPEN_EXISTINGcSECURITY_ANONYMOUScSECURITY_SQOS_PRESENTr   errorwinerrorcERROR_PIPE_BUSYMAXIMUM_RETRY_COUNTtimesleepconnectGetNamedPipeInfoflagsr   _address)r	   r&   retry_countr   es        r   r;   zNpipeSocket.connect0   s    	))&&)@)@@''#&<<F, //7:
!  	 zz-- *Ao"55JJqM<<==G	s%   AB C(AC#C(!C##C(c                 $    | j                  |      S r   )r;   r%   s     r   
connect_exzNpipeSocket.connect_exN   s    ||G$$r   c                 (    d| _         | j                  S r)   )r   r   r!   s    r   detachzNpipeSocket.detachR   s    ||r   c                 ,    t        | j                        S r   )r   r   r!   s    r   dupzNpipeSocket.dupW   s    4<<((r   c                     | j                   S r   r>   r!   s    r   getpeernamezNpipeSocket.getpeername[       }}r   c                     | j                   S r   rH   r!   s    r   getsocknamezNpipeSocket.getsockname^   rJ   r   c                     t               r   r   )r	   leveloptnamebuflens       r   
getsockoptzNpipeSocket.getsockopta   r#   r   c                     t               r   r   )r	   controloptions      r   ioctlzNpipeSocket.ioctld   r#   r   c                     t               r   r   )r	   backlogs     r   listenzNpipeSocket.listeng   r#   r   c                     |j                  d      dk7  r
t               t        |       }||dk  rt        j                  }t        j
                  ||      S )Nbrr   )buffer_size)stripr    NpipeFileIOBaseioDEFAULT_BUFFER_SIZEBufferedReader)r	   modebufsizerawios       r   makefilezNpipeSocket.makefilej   sN    ::c?c!%''%?gl,,G  G<<r   c                 L    t        j                  | j                  |      \  }}|S r   )r.   ReadFiler   )r	   rc   r=   errdatas        r   recvzNpipeSocket.recvr   s!    &&t||W=	Tr   c                 B    | j                  ||      }|| j                  fS r   )rj   r>   )r	   rc   r=   ri   s       r   recvfromzNpipeSocket.recvfromw   s!    yy%(dmm$$r   c                 @    | j                  |||      | j                  fS r   )	recv_intor>   )r	   bufnbytesr=   s       r   recvfrom_intozNpipeSocket.recvfrom_into|   s    ~~c6514==@@r   c                     |}t        |t              st        |      }t        j                  | j                  |r|d | n|      \  }}t        |      S r   )
isinstance
memoryviewr.   rg   r   len)r	   ro   rp   readbufrh   ri   s         r   rn   zNpipeSocket.recv_into   sO    #z* oG&&LL &GGVG
	T 4yr   c                     t        j                  | j                  |xs t        |            \  }}t        |      }||d | |S r   )r.   rg   r   ru   )r	   ro   rp   rh   ri   ns         r   _recv_into_py2zNpipeSocket._recv_into_py2   s>    &&t||V5Gs3xH	TIBQr   c                 L    t        j                  | j                  |      \  }}|S r   )r.   	WriteFiler   )r	   stringr=   rh   rp   s        r   sendzNpipeSocket.send   s!    ))$,,?Vr   c                 &    | j                  ||      S r   )r}   )r	   r|   r=   s      r   sendallzNpipeSocket.sendall   s    yy''r   c                 F    | j                  |       | j                  |      S r   )r;   r}   )r	   r|   r&   s      r   sendtozNpipeSocket.sendto   s    Wyy  r   c                 J    |r| j                  d       S | j                  d      S )Nr   )
settimeout)r	   flags     r   setblockingzNpipeSocket.setblocking   s#    ??4((q!!r   c                     |t         j                  | _        y t        |t        t
        f      r|dk  rt        d      |dk(  rt         j                  | _        y |dz  | _        y )Nr   zTimeout value out of rangei  )r   NMPWAIT_WAIT_FOREVERr   rs   floatint
ValueErrorNMPWAIT_NO_WAIT)r	   values     r   r   zNpipeSocket.settimeout   sU    =%::DMEE3<0EAI9::aZ%55DM "DLDMr   c                     | j                   S r   )r   r!   s    r   
gettimeoutzNpipeSocket.gettimeout   rJ   r   c                     t               r   r   )r	   rN   rO   r   s       r   
setsockoptzNpipeSocket.setsockopt   r#   r   c                 "    | j                         S r   )r+   )r	   hows     r   shutdownzNpipeSocket.shutdown   s    zz|r   r   )r   )NN)r   r   ) __name__
__module____qualname____doc__r   r"   r'   r+   r   r;   rB   rD   rF   rI   rL   rQ   rU   rX   re   rj   rl   rq   rn   ry   r}   r   r   r   r   r   r   r    r   r   r   r      sD   
$$    : % %   ) )$$$=   % % A A 	 	   ( ( ! !"
)$  r   r   c                   H     e Zd Zd Z fdZd Zd Zd Zd Zd Z	d Z
 xZS )	r^   c                     || _         y r   )sock)r	   npipe_sockets     r   r   zNpipeFileIOBase.__init__   s	     	r   c                 0    t         |           d | _        y r   )superr+   r   )r	   	__class__s    r   r+   zNpipeFileIOBase.close   s    	r   c                 6    | j                   j                         S r   )r   filenor!   s    r   r   zNpipeFileIOBase.fileno   s    yy!!r   c                      yr   r   r!   s    r   isattyzNpipeFileIOBase.isatty       r   c                      yr)   r   r!   s    r   readablezNpipeFileIOBase.readable   s    r   c                 8    | j                   j                  |      S r   )r   rn   )r	   ro   s     r   readintozNpipeFileIOBase.readinto   s    yy""3''r   c                      yr   r   r!   s    r   seekablezNpipeFileIOBase.seekable   r   r   c                      yr   r   r!   s    r   writablezNpipeFileIOBase.writable   r   r   )r   r   r   r   r+   r   r   r   r   r   r   __classcell__)r   s   @r   r^   r^      s+    !"(r   r^   )r   r9   r_   r.   r   r7   r4   r3   r8   r   r   	RawIOBaser^   r   r   r   <module>r      sN      	   !   ` `Fbll r   