
    ՟f                         d dl Z d dlZd dlZd dlZd dlmZ ddlmZmZm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZmZmZ  G d d	e      Z G d
 de      Z G d de      Zy)    N)partial   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions)is_socket_readable   )SOCKET_OPTIONNetworkBackendNetworkStreamc            
          e Zd ZdZdZ	 	 ddej
                  dej                  dej                  e
   dej                  e   fdZd	ej                  d
ej                  f   dej                  fdZddedej                  e   defdZddedej                  e   ddfdZddZ	 	 ddej                  dej                  e
   dej                  e   ddfdZde
dej                  fdZy)TLSinTLSStreamz
    Because the standard `SSLContext.wrap_socket` method does
    not work for `SSLSocket` objects, we need this class
    to implement TLS stream using an underlying `SSLObject`
    instance in order to support TLS on top of TLS.
    i @  Nsockssl_contextserver_hostnametimeoutc                 P   || _         t        j                         | _        t        j                         | _        |j                  | j                  | j                  |      | _        | j                   j                  |       | j                  | j                  j                         y )N)incomingoutgoingr   )
_sockssl	MemoryBIO	_incoming	_outgoingwrap_biossl_obj
settimeout_perform_iodo_handshake)selfr   r   r   r   s        R/var/www/cvtools/html/venv/lib/python3.12/site-packages/httpcore/_backends/sync.py__init__zTLSinTLSStream.__init__    sy     
"++^^^^+ , 
 	

g&223    func.returnc                    d }	 d }	  |       }| j                  j                  | j                  j                                |t         j                  k(  r]| j                  j                  | j                        }|r| j                  j                  |       n| j                  j                          ||S # t         j                  t         j                  f$ r}|j                  }Y d }~d }~ww xY wN)r   SSLWantReadErrorSSLWantWriteErrorerrnor   sendallr   readSSL_ERROR_WANT_READrecvTLS_RECORD_SIZEr   write	write_eof)r%   r)   retr/   ebufs         r&   r#   zTLSinTLSStream._perform_io4   s     E f JJt~~2245///jjood&:&:;NN((-NN,,.}
#  ((#*?*?@   s   B6 6#C/C**C/	max_bytesc           
      H   t         j                  t        t        t        i}t        |      5  | j                  j                  |       t        j                  t        | j                  t        | j                  j                  |                  cd d d        S # 1 sw Y   y xY wr,   )socketr   r	   OSErrorr   r   r   r"   typingcastbytesr#   r   r!   r1   r%   r:   r   exc_maps       r&   r1   zTLSinTLSStream.readM   sp    %+^^['9$UG$ 	JJ!!'*;;t''0A0A9(MN	 	 	s   A"BB!bufferc                 ,   t         j                  t        t        t        i}t        |      5  | j                  j                  |       |r7| j                  t        | j                  j                  |            }||d  }|r7d d d        y # 1 sw Y   y xY wr,   )r<   r   r   r=   r
   r   r   r"   r#   r   r!   r5   )r%   rC   r   rB   nsents        r&   r5   zTLSinTLSStream.writeU   sw    %+^^\7J$WG$ 	(JJ!!'*((1C1CV)LM 	( 	( 	(s   AB

Bc                 8    | j                   j                          y r,   r   closer%   s    r&   rH   zTLSinTLSStream.close]       

r(   r   c                     t               r,   )NotImplementedError)r%   r   r   r   s       r&   	start_tlszTLSinTLSStream.start_tls`   s     "##r(   infoc                     |dk(  r| j                   S |dk(  r| j                  j                         S |dk(  r| j                  j                         S |dk(  r| j                  S |dk(  rt	        | j                        S y N
ssl_objectclient_addrserver_addrr<   is_readable)r!   r   getsocknamegetpeernamer   r%   rN   s     r&   get_extra_infozTLSinTLSStream.get_extra_infoh   sv    <<<= ::))++= ::))++8::= %djj11r(   NNr,   r*   N)__name__
__module____qualname____doc__r4   r<   r   
SSLContextr>   Optionalstrfloatr'   CallableAnyr#   intr@   r1   r5   rH   rM   rX    r(   r&   r   r      s2    O 15*.4mm4 ^^4  -	4
 '4(ooc6::o. 
2c FOOE,B e (E (FOOE,B (d ( 15*.	$^^$  -$ '	$
 
$3 6:: r(   r   c            	       "   e Zd Zdej                  ddfdZddedej                  e   de	fdZ
dde	dej                  e   ddfd	Zdd
Z	 	 ddej                  dej                  e   dej                  e   defdZdedej$                  fdZy)
SyncStreamr   r*   Nc                     || _         y r,   )r   )r%   r   s     r&   r'   zSyncStream.__init__w   s	    
r(   r:   r   c                     t         j                  t        t        t        i}t        |      5  | j                  j                  |       | j                  j                  |      cd d d        S # 1 sw Y   y xY wr,   )	r<   r   r	   r=   r   r   r   r"   r3   rA   s       r&   r1   zSyncStream.readz   sS    %+^^['9$UG$ 	.JJ!!'*::??9-	. 	. 	.s   6A,,A5rC   c                 
   |sy t         j                  t        t        t        i}t        |      5  |r>| j                  j                  |       | j                  j                  |      }||d  }|r>d d d        y # 1 sw Y   y xY wr,   )	r<   r   r   r=   r
   r   r   r"   send)r%   rC   r   rB   ns        r&   r5   zSyncStream.write   sn    %+^^\7J$WG$ 	$

%%g.JJOOF+ 	$ 	$ 	$s   A A99Bc                 8    | j                   j                          y r,   rG   rI   s    r&   rH   zSyncStream.close   rJ   r(   r   r   c                    t         j                  t        t        t        i}t        |      5  	 t        | j                  t        j                        r!t        | j                  |||      cd d d        S | j                  j                  |       |j                  | j                  |      }	 d d d        t        |      S # t        $ r}| j                          |d }~ww xY w# 1 sw Y   t              S xY w)N)r   )r<   r   r   r=   r   r   
isinstancer   r   	SSLSocketr   r"   wrap_socket	ExceptionrH   rh   )r%   r   r   r   rB   r   excs          r&   rM   zSyncStream.start_tls   s     NNN\%
 G$ 	djj#--8 *

K'	 	 JJ))'2&22

O 3 D	" $  

		" $s.   C";B?38B??	CCCC""C5rN   c                 T   |dk(  r:t        | j                  t        j                        r| j                  j                  S |dk(  r| j                  j                         S |dk(  r| j                  j                         S |dk(  r| j                  S |dk(  rt        | j                        S y rP   )rp   r   r   rq   _sslobjrU   rV   r   rW   s     r&   rX   zSyncStream.get_extra_info   s    <Jtzz3==$I::%%%= ::))++= ::))++8::= %djj11r(   r,   rZ   rY   )r[   r\   r]   r<   r'   re   r>   r`   rb   r@   r1   r5   rH   r   r_   ra   r   rM   rd   rX   rf   r(   r&   rh   rh   v   s    V]] t .c .FOOE,B .e .	$E 	$FOOE,B 	$d 	$ 15*.	 ^^   -  '	 
 
 :3 6:: r(   rh   c                      e Zd Z	 	 	 ddededej                  e   dej                  e   dej                  ej                  e	      de
fdZ	 	 dd	edej                  e   dej                  ej                  e	      de
fd
Zy)SyncBackendNhostportr   local_addresssocket_optionsr*   c                    |g }||f}|d n|df}t         j                  t        t        t        i}t        |      5  t        j                  |||      }	|D ]  }
 |	j                  |
   |	j                  t         j                  t         j                  d       d d d        t        |	      S # 1 sw Y   t        	      S xY w)Nr   )source_addressr   )r<   r   r   r=   r   r   create_connection
setsockoptIPPROTO_TCPTCP_NODELAYrh   )r%   ry   rz   r   r{   r|   addressr~   rB   r   options              r&   connect_tcpzSyncBackend.connect_tcp   s     !N,!.!6]A<NNNN\%

 G$ 	G++-D
 ) )()OOF..0B0BAF	G $	G $s   AB--C pathc                    t         j                  dk(  rt        d      |g }t        j                  t
        t        t        i}t        |      5  t        j                  t        j                  t        j                        }|D ]  } |j                  |   |j                  |       |j                  |       d d d        t        |      S # 1 sw Y   t              S xY w)Nwin32z:Attempted to connect to a UNIX socket on a Windows system.)sysplatformRuntimeErrorr<   r   r   r=   r   r   AF_UNIXSOCK_STREAMr   r"   connectrh   )r%   r   r   r|   rB   r   r   s          r&   connect_unix_socketzSyncBackend.connect_unix_socket   s     <<7"L  !N NNN\%
 G$ 	==1C1CDD( )()OOG$LL	 $	 $s   A+CC)NNNrY   )r[   r\   r]   ra   re   r>   r`   rb   Iterabler   r   r   r   rf   r(   r&   rx   rx      s    
 +/.2JN     '	 
 s+  (FG  
 B +/JN	   '  (FG	 
 
 r(   rx   )r<   r   r   r>   	functoolsr   _exceptionsr   r   r   r   r	   r
   r   r   _utilsr   baser   r   r   r   rh   rx   rf   r(   r&   <module>r      sX     
 
  	 	 	 ( > >^] ^B@ @F6 . 6 r(   