
     @g)                        d dl mZ d dlZd dlZd dlZd dlZd dl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dS )    )annotationsN   )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 dZd!dZd"d#dZd"d$dZd%dZ		 	 dd&dZ
d'dZdS )(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socket.socketssl_contextssl.SSLContextserver_hostname
str | Nonetimeoutfloat | Nonec                4   || _         t          j                    | _        t          j                    | _        |                    | j        | j        |          | _        | j                             |           |                     | j        j	                   d S )N)incomingoutgoingr   )
_sockssl	MemoryBIO	_incoming	_outgoingwrap_biossl_obj
settimeout_perform_iodo_handshake)selfr   r   r   r   s        K/var/www/piapp/venv/lib/python3.11/site-packages/httpcore/_backends/sync.py__init__zTLSinTLSStream.__init__"   s     
"++^^+ , 
 
 	
g&&&233333    func typing.Callable[..., typing.Any]return
typing.Anyc                   d }	 d }	  |            }n/# t           j        t           j        f$ r}|j        }Y d }~nd }~ww xY w| j                            | j                                                   |t           j        k    rU| j        	                    | j
                  }|r| j                            |           n| j                                         ||S ةN)r    SSLWantReadErrorSSLWantWriteErrorerrnor   sendallr#   readSSL_ERROR_WANT_READrecvTLS_RECORD_SIZEr"   write	write_eof)r)   r-   retr5   ebufs         r*   r'   zTLSinTLSStream._perform_io6   s     	E dff(#*?@        Jt~2244555///jood&:;; /N((----N,,...}
#	s   
 >9>	max_bytesintbytesc           
     Z   t           j        t          t          t          i}t          |          5  | j                            |           t          j	        t          |                     t          j        | j        j        |                              cd d d            S # 1 swxY w Y   d S r2   )socketr   r	   OSErrorr   r   r   r&   typingcastrB   r'   	functoolspartialr%   r7   r)   r@   r   exc_maps       r*   r7   zTLSinTLSStream.readO   s    %+^['9$UG$$ 	 	J!!'***;t''	(9$,:KY(W(WXX 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A$B  B$'B$bufferNonec                H   t           j        t          t          t          i}t          |          5  | j                            |           |r>|                     t          j
        | j        j        |                    }||d          }|>d d d            d S # 1 swxY w Y   d S r2   )rD   r   r   rE   r
   r   r   r&   r'   rH   rI   r%   r;   )r)   rL   r   rK   nsents        r*   r;   zTLSinTLSStream.writeW   s    %+^\7J$WG$$ 	( 	(J!!'*** ((():4<;Mv)V)VWW  (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   ABBBc                8    | j                                          d S r2   r   closer)   s    r*   rR   zTLSinTLSStream.close_       
r,   r   c                    t                      r2   )NotImplementedError)r)   r   r   r   s       r*   	start_tlszTLSinTLSStream.start_tlsb   s     "###r,   infostrc                    |dk    r| j         S |dk    r| j                                        S |dk    r| j                                        S |dk    r| j        S |dk    rt	          | j                  S d S N
ssl_objectclient_addrserver_addrrD   is_readable)r%   r   getsocknamegetpeernamer   r)   rX   s     r*   get_extra_infozTLSinTLSStream.get_extra_infoj   s    <<=  :))+++=  :))+++8:=  %dj111tr,   NN)r   r   r   r   r   r   r   r   )r-   r.   r/   r0   r2   r@   rA   r   r   r/   rB   rL   rB   r   r   r/   rM   r/   rM   r   r   r   r   r   r   r/   r   rX   rY   r/   r0   )__name__
__module____qualname____doc__r:   r+   r'   r7   r;   rR   rW   rc    r,   r*   r   r      s          O '+ $4 4 4 4 4(   2    ( ( ( ( (    '+ $	$ $ $ $ $     r,   r   c                  H    e Zd ZddZdddZdddZddZ	 	 dd dZd!dZdS )"
SyncStreamr   r   r/   rM   c                    || _         d S r2   )r   )r)   r   s     r*   r+   zSyncStream.__init__y   s    


r,   Nr@   rA   r   r   rB   c                    t           j        t          t          t          i}t          |          5  | j                            |           | j                            |          cd d d            S # 1 swxY w Y   d S r2   )	rD   r   r	   rE   r   r   r   r&   r9   rJ   s       r*   r7   zSyncStream.read|   s    %+^['9$UG$$ 	. 	.J!!'***:??9--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   4A00A47A4rL   c                    |sd S t           j        t          t          t          i}t          |          5  |r@| j                            |           | j                            |          }||d          }|@d d d            d S # 1 swxY w Y   d S r2   )	rD   r   r   rE   r
   r   r   r&   send)r)   rL   r   rK   ns        r*   r;   zSyncStream.write   s     	F%+^\7J$WG$$ 	$ 	$ $
%%g...JOOF++  $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   ABB
Bc                8    | j                                          d S r2   rQ   rS   s    r*   rR   zSyncStream.close   rT   r,   r   r   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        |          }n(# t          $ r}|                                  |d }~ww xY w	 d d d            n# 1 swxY w Y   t          |          S )N)r   )rD   r   r   rE   r   r   
isinstancer   r    	SSLSocketr   r&   wrap_socket	ExceptionrR   rp   )r)   r   r   r   rK   r   excs          r*   rW   zSyncStream.start_tls   s\    NN\%
 G$$ 	 	dj#-88  *
K' 	 	 	 	 	 	 	 	 J))'222&22
O 3  DD    

	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	" $s:   C5B*36B*)C*
C4C

CCC#&C#rX   rY   r0   c                2   |dk    r+t          | j        t          j                  r| j        j        S |dk    r| j                                        S |dk    r| j                                        S |dk    r| j        S |dk    rt          | j                  S d S r[   )rx   r   r    ry   _sslobjr`   ra   r   rb   s     r*   rc   zSyncStream.get_extra_info   s    <Jtz3=$I$I:%%=  :))+++=  :))+++8:=  %dj111tr,   )r   r   r/   rM   r2   re   rf   rg   rd   rh   ri   )	rj   rk   rl   r+   r7   r;   rR   rW   rc   rn   r,   r*   rp   rp   x   s           . . . . .	$ 	$ 	$ 	$ 	$    '+ $	         :     r,   rp   c                  ,    e Zd Z	 	 	 dddZ	 	 dddZdS )SyncBackendNhostrY   portrA   r   r   local_addressr   socket_options%typing.Iterable[SOCKET_OPTION] | Noner/   r   c                n   |g }||f}|d n|df}t           j        t          t          t          i}t          |          5  t          j        |||          }	|D ]}
 |	j        |
  |	                    t           j        t           j	        d           d d d            n# 1 swxY w Y   t          |	          S )Nr   )source_addressr   )rD   r   r   rE   r   r   create_connection
setsockoptIPPROTO_TCPTCP_NODELAYrp   )r)   r   r   r   r   r   addressr   rK   r   options              r*   connect_tcpzSyncBackend.connect_tcp   s#    !N,!.!6]A<NNN\%

 G$$ 	G 	G+-  D
 ) ) )(((OOF.0BAFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G $s   ABB!$B!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        |  |                    |           |                    |           d d d            n# 1 swxY w Y   t          |          S )Nwin32z:Attempted to connect to a UNIX socket on a Windows system.)sysplatformRuntimeErrorrD   r   r   rE   r   r   AF_UNIXSOCK_STREAMr   r&   connectrp   )r)   r   r   r   rK   r   r   s          r*   connect_unix_socketzSyncBackend.connect_unix_socket   s    <7""L   !N NN\%
 G$$ 	 	=1CDDD( ) )(((OOG$$$LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $s   A#CCC)NNN)r   rY   r   rA   r   r   r   r   r   r   r/   r   rd   )r   rY   r   r   r   r   r/   r   )rj   rk   rl   r   r   rn   r,   r*   r   r      sZ        
 !%$(@D         B !%@D	             r,   r   )
__future__r   rH   rD   r    r   rF   _exceptionsr   r   r   r   r	   r
   r   r   _utilsr   baser   r   r   r   rp   r   rn   r,   r*   <module>r      sw   " " " " " "      



 



 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ( ' ' ' ' ' > > > > > > > > > >^ ^ ^ ^ ^] ^ ^ ^B@ @ @ @ @ @ @ @F6  6  6  6  6 . 6  6  6  6  6 r,   