
    bi                         d dl Z d dlZd dlZ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      W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/docker/transport/npipesocket.pywrappedzcheck_closed.<locals>.wrapped   s1    <<C  ''''    )	functoolswraps)r   r   s   ` r   check_closedr      s%    __Q( ( Nr   c                   8   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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  t         j                  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_PRESENTFILE_FLAG_OVERLAPPEDr   errorwinerrorcERROR_PIPE_BUSYMAXIMUM_RETRY_COUNTtimesleepconnectGetNamedPipeInfoflagsr   _address)r	   r&   retry_countr   es        r   r<   zNpipeSocket.connect3   s    	))&&)@)@@''$,-445 
F0 //7:
!  	 zz-- *Ao"55JJqM<<==G	s%   A$B C9%AC4,C92C44C9c                 $    | j                  |      S r   )r<   r%   s     r   
connect_exzNpipeSocket.connect_exS   s    ||G$$r   c                 (    d| _         | j                  S r)   )r   r   r!   s    r   detachzNpipeSocket.detachW   s    ||r   c                 ,    t        | j                        S r   )r   r   r!   s    r   dupzNpipeSocket.dup\   s    4<<((r   c                     | j                   S r   r?   r!   s    r   getpeernamezNpipeSocket.getpeername`       }}r   c                     | j                   S r   rI   r!   s    r   getsocknamezNpipeSocket.getsocknamec   rK   r   c                     t               r   r   )r	   leveloptnamebuflens       r   
getsockoptzNpipeSocket.getsockoptf   r#   r   c                     t               r   r   )r	   controloptions      r   ioctlzNpipeSocket.ioctli   r#   r   c                     t               r   r   )r	   backlogs     r   listenzNpipeSocket.listenl   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.makefileo   sN    ::c?c!%''%?gl,,G  G<<r   c                 L    t        j                  | j                  |      \  }}|S r   )r.   ReadFiler   )r	   rd   r>   errdatas        r   recvzNpipeSocket.recvw   s!    &&t||W=	Tr   c                 B    | j                  ||      }|| j                  fS r   )rk   r?   )r	   rd   r>   rj   s       r   recvfromzNpipeSocket.recvfrom|   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                 J   |}t        |t              st        |      }t        j                  d ddd       }	 t	        j
                         }||_        t        j                  | j                  |r|d | n||      \  }}t        j                  || j                        }|t        j                  k(  r%t        j                  | j                         t        t        j                  | j                  |d      t!        j"                  |       S # t!        j"                  |       w xY wNTr   )
isinstance
memoryview
win32eventCreateEvent
pywintypes
OVERLAPPEDhEventr.   rh   r   WaitForSingleObjectr   WAIT_TIMEOUTCancelIoTimeoutErrorGetOverlappedResultwin32apiCloseHandle)	r	   rp   rq   readbufevent
overlappedri   rj   wait_results	            r   ro   zNpipeSocket.recv_into   s    #z* oG&&tT4>	(#..0J %J!**$* IC
 %88NKj555""4<<0""00z1M  'H  's   B>D D"c                    t        j                  d ddd       }	 t        j                         }||_        t        j                  | j                  ||       t        j                  || j                        }|t         j                  k(  r%t        j                  | j                         t        t        j                  | j                  |d      t        j                  |       S # t        j                  |       w xY wrt   )rw   rx   ry   rz   r{   r.   	WriteFiler   r|   r   r}   r~   r   r   r   r   )r	   stringr>   r   r   r   s         r   sendzNpipeSocket.send   s    &&tT4>
	(#..0J %JfjA$88NKj555""4<<0""00z1M  'H  's   B4C$ $C;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      t        |dz        | _        y )Nr   zTimeout value out of rangei  )rw   INFINITEr   ru   floatint
ValueError)r	   values     r   r   zNpipeSocket.settimeout   sF    =&//DMEE3<0EAI9::  -DMr   c                     | j                   S r   )r   r!   s    r   
gettimeoutzNpipeSocket.gettimeout   rK   r   c                     t               r   r   )r	   rO   rP   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<   rC   rE   rG   rJ   rM   rR   rV   rY   rf   rk   rm   rr   ro   r   r   r   r   r   r   r   r    r   r   r   r      s?   
$$    > % %   ) )$$$=   % % 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   ro   )r	   rp   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   r`   r:   ry   r   rw   r.   r   r8   r4   r3   r9   r   r   	RawIOBaser_   r   r   r   <module>r      sW     	       !   n nbbll r   