
    h)                        S SK Jr  S SKrS SKrS SKrS SKrS SKrSSKJrJ	r	J
r
JrJrJrJrJr  SSKJr  SSKJrJrJr   " S S	\5      r " S
 S\5      r " S S\5      rg)    )annotationsN   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions)is_socket_readable   )SOCKET_OPTIONNetworkBackendNetworkStreamc                      \ rS rSrSrSr  S       SS jjr    SS jrSSS jjrSSS jjr	SS	 jr
  S       SS
 jjrSS jrSrg)TLSinTLSStream   z
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 @  Nc                L   Xl         [        R                  " 5       U l        [        R                  " 5       U l        UR                  U R                  U R                  US9U l        U R                   R                  U5        U R                  U R                  R                  5        g )N)incomingoutgoingserver_hostname)
_sockssl	MemoryBIO	_incoming	_outgoingwrap_biossl_obj
settimeout_perform_iodo_handshake)selfsockssl_contextr   timeouts        I/var/www/html/env/lib/python3.13/site-packages/httpcore/_backends/sync.py__init__TLSinTLSStream.__init__"   sw     
"++^^^^+ , 
 	

g&223    c                   S n S n U" 5       nU R                  R                  U R                  R                  5       5        U[         R                  :X  ab  U R                  R                  U R                  5      nU(       a  U R                  R                  U5        OU R                  R                  5         Uc  U$ M  ! [         R                  [         R                  4 a  nUR                  n S nANS nAff = fN)r   SSLWantReadErrorSSLWantWriteErrorerrnor   sendallr   readSSL_ERROR_WANT_READrecvTLS_RECORD_SIZEr   write	write_eof)r#   funcretr/   ebufs         r'   r!   TLSinTLSStream._perform_io6   s     E f JJt~~2245///jjood&:&:;NN((-NN,,.}
#  ((#*?*?@   s   B> >$C8"C33C8c           
     j   [         R                  [        [        [        0n[        U5         U R                  R                  U5        [        R                  " [        U R                  [        R                  " U R                  R                  U5      5      5      sS S S 5        $ ! , (       d  f       g = fr,   )socketr&   r	   OSErrorr   r   r   r    typingcastbytesr!   	functoolspartialr   r1   r#   	max_bytesr&   exc_maps       r'   r1   TLSinTLSStream.readO   sm    %+^^['9$UG$JJ!!'*;;t''	(9(9$,,:K:KY(WX %$$s   A.B$$
B2c                `   [         R                  [        [        [        0n[        U5         U R                  R                  U5        U(       aG  U R                  [        R                  " U R                  R                  U5      5      nXS  nU(       a  MG  S S S 5        g ! , (       d  f       g = fr,   )r=   r&   r   r>   r
   r   r   r    r!   rB   rC   r   r5   )r#   bufferr&   rF   nsents        r'   r5   TLSinTLSStream.writeW   st    %+^^\7J$WG$JJ!!'*(():):4<<;M;Mv)VW & %$$s   A(B
B-c                8    U R                   R                  5         g r,   r   closer#   s    r'   rN   TLSinTLSStream.close_       

r*   c                    [        5       er,   )NotImplementedError)r#   r%   r   r&   s       r'   	start_tlsTLSinTLSStream.start_tlsb   s     "##r*   c                   US:X  a  U R                   $ US:X  a  U R                  R                  5       $ US:X  a  U R                  R                  5       $ US:X  a  U R                  $ US:X  a  [	        U R                  5      $ g N
ssl_objectclient_addrserver_addrr=   is_readable)r   r   getsocknamegetpeernamer   r#   infos     r'   get_extra_infoTLSinTLSStream.get_extra_infoj   sv    <<<= ::))++= ::))++8::= %djj11r*   )r   r   r   r   NN)r$   socket.socketr%   ssl.SSLContextr   
str | Noner&   float | None)r7   z typing.Callable[..., typing.Any]return
typing.Anyr,   rE   intr&   rf   rg   rA   rI   rA   r&   rf   rg   Nonerg   rl   r%   rd   r   re   r&   rf   rg   r   r_   strrg   rh   )__name__
__module____qualname____firstlineno____doc__r4   r(   r!   r1   r5   rN   rT   r`   __static_attributes__ r*   r'   r   r      s     O '+ $44 $4 $	4
 4(. 
2( '+ $	$#$ $$ 	$
 
$r*   r   c                  n    \ rS rSrS
S jrSSS jjrSSS jjrSS jr  S       SS jjrSS jr	S	r
g)
SyncStreamx   c                    Xl         g r,   r   )r#   r$   s     r'   r(   SyncStream.__init__y   s    
r*   Nc                    [         R                  [        [        [        0n[        U5         U R                  R                  U5        U R                  R                  U5      sS S S 5        $ ! , (       d  f       g = fr,   )	r=   r&   r	   r>   r   r   r   r    r3   rD   s       r'   r1   SyncStream.read|   sJ    %+^^['9$UG$JJ!!'*::??9- %$$s   6A,,
A:c                2   U(       d  g [         R                  [        [        [        0n[        U5         U(       aC  U R                  R                  U5        U R                  R                  U5      nXS  nU(       a  MC  S S S 5        g ! , (       d  f       g = fr,   )	r=   r&   r   r>   r
   r   r   r    send)r#   rI   r&   rF   ns        r'   r5   SyncStream.write   se    %+^^\7J$WG$

%%g.JJOOF+ & %$$s   A	B
Bc                8    U R                   R                  5         g r,   rM   rO   s    r'   rN   SyncStream.close   rQ   r*   c                   [         R                  [        [        [        0n[        U5          [        U R                  [        R                  5      (       a   [        U R                  XU5      sS S S 5        $ U R                  R                  U5        UR                  U R                  US9n S S S 5        [        W5      $ ! [         a  nU R                  5         UeS nAff = f! , (       d  f       N== f)N)r   )r=   r&   r   r>   r   r   
isinstancer   r   	SSLSocketr   r    wrap_socket	ExceptionrN   ry   )r#   r%   r   r&   rF   r$   excs          r'   rT   SyncStream.start_tls   s     NNN\%
 G$djj#--88 *

K' %$ JJ))'2&22

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

	 %$s.   C$?C 75C  
C!
CC!!C$$
C2c                h   US:X  a?  [        U R                  [        R                  5      (       a  U R                  R                  $ US:X  a  U R                  R                  5       $ US:X  a  U R                  R                  5       $ US:X  a  U R                  $ US:X  a  [        U R                  5      $ g rW   )r   r   r   r   _sslobjr\   r]   r   r^   s     r'   r`   SyncStream.get_extra_info   s    <Jtzz3==$I$I::%%%= ::))++= ::))++8::= %djj11r*   r|   )r$   rc   rg   rl   r,   ri   rk   rm   rb   rn   ro   )rq   rr   rs   rt   r(   r1   r5   rN   rT   r`   rv   rw   r*   r'   ry   ry   x   sN    .	$ '+ $	 #  $  	 
 
 :r*   ry   c                  ^    \ rS rSr   S           SS jjr  S       S	S jjrSrg)
SyncBackend   Nc                ~   Uc  / nX4nUc  S OUS4n[         R                  [        [        [        0n[        U5         [         R                  " UUUS9n	U H  n
U	R                  " U
6   M     U	R                  [         R                  [         R                  S5        S S S 5        [        W	5      $ ! , (       d  f       N= f)Nr   )source_addressr   )r=   r&   r   r>   r   r   create_connection
setsockoptIPPROTO_TCPTCP_NODELAYry   )r#   hostportr&   local_addresssocket_optionsaddressr   rF   r$   options              r'   connect_tcpSyncBackend.connect_tcp   s     !N,!.!6]A<NNNN\%

 G$++-D
 )( )OOF..0B0BAF % $ %$s   AB..
B<c                   [         R                  S:X  a  [        S5      eUc  / n[        R                  [
        [        [        0n[        U5         [        R                  " [        R                  [        R                  5      nU H  nUR                  " U6   M     UR                  U5        UR                  U5        S S S 5        [        W5      $ ! , (       d  f       N= f)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    connectry   )r#   pathr&   r   rF   r$   r   s          r'   connect_unix_socketSyncBackend.connect_unix_socket   s     <<7"L  !N NNN\%
 G$==1C1CDD(( )OOG$LL % $ %$s   A.C
Crw   )NNN)r   rp   r   rj   r&   rf   r   re   r   %typing.Iterable[SOCKET_OPTION] | Nonerg   r   rb   )r   rp   r&   rf   r   r   rg   r   )rq   rr   rs   rt   r   r   rv   rw   r*   r'   r   r      s    
 !%$(@D     	 
 "  >  
 B !%@D	     >	 
 
   r*   r   )
__future__r   rB   r=   r   r   r?   _exceptionsr   r   r   r   r	   r
   r   r   _utilsr   baser   r   r   r   ry   r   rw   r*   r'   <module>r      s[    "   
 
 	 	 	 ( > >^] ^B@ @F6 . 6 r*   