+
     ]i"  c                  s    ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^RIHt ]P                  '       d   ^ RI	H
t
 ^RIHtHt ]P                  ]]3,          t]P$                  ! R4      tRt ! R R	4      tR# )
    )annotationsN)ProxySchemeUnsupported)Self)_TYPE_PEER_CERT_RET_TYPE_PEER_CERT_RET_DICT_ReturnValuei @  c                  sR   ] tR t^tRt]R R l4       tRAR R lltR R ltR	 R
 lt	R R lt
RBR R lltRCR R lltRDR R lltRER R lltRER R lltRFRRRRRR/R R llltR R ltR R lt]P(                  RGR  R! ll4       t]P(                  R" R# l4       tRHR$ R% lltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4 R5 ltRFR6 R7 llt]P(                  R8 R9 l4       t]P(                  R: R; l4       t]P(                  R< R= l4       tRIR> R? lltR@t R# )JSSLTransporta4  
The SSLTransport wraps an existing socket and establishes an SSL connection.

Contrary to Python's implementation of SSLSocket, it allows you to chain
multiple TLS connections together. It's particularly useful if you need to
implement TLS within TLS.

The class supports most of the socket API operations.
c                    V ^8  d   QhRRRR/# )   ssl_contextssl.SSLContextreturnNone Zformat   ">/usr/lib/python3.14/site-packages/urllib3/util/ssltransport.py__annotate__SSLTransport.__annotate__"   s      . T     c                s@    \        V R4      '       g   \        R4      hR# )z
Raises a ProxySchemeUnsupported if the provided ssl_context can't be used
for TLS in TLS.

The only requirement is that the ssl_context provides the 'wrap_bio'
methods.
wrap_biozXTLS in TLS requires SSLContext.wrap_bio() which isn't available on non-native SSLContextN)Zhasattrr   )r
      &r   $_validate_ssl_context_for_tls_in_tlsZ1SSLTransport._validate_ssl_context_for_tls_in_tls!   s(     {J//(5  0r   Nc          
     s,    V ^8  d   QhRRRRRRRRR	R
/# )r	   socketzsocket.socketr
   r   server_hostname
str | Nonesuppress_ragged_eofsboolr   r   r   r   r   r   r   r   1   s<     4 44 $4 $	4
 #4 
4r   c                s*   \         P                  ! 4       V n        \         P                  ! 4       V n        W@n        Wn        VP                  V P                  V P                  VR7      V n        V P                  V P                  P                  4       R# )zF
Create an SSLTransport around socket using the provided ssl_context.
)r   N)
sslZ	MemoryBIOincomingoutgoingr   r   r   sslobj_ssl_io_loopZdo_handshake)selfr   r
   r   r   s   &&&&&r   __init__ZSSLTransport.__init__1   si     $8!!**MM4==/ + 

 	$++223r   c                   V ^8  d   QhRR/# )r	   r   r   r   r   r   r   r   r   H   s      4 r   c                	s    V # Nr   r"   r   r   	__enter__ZSSLTransport.__enter__H   s    r   c               r   )r	   _z
typing.Anyr   r   r   r   r   r   r   r   K   s      : $ r   c                	s&    V P                  4        R # r%   )close)r"   r(   s   &*r   __exit__ZSSLTransport.__exit__K   s    

r   c               r$   )r	   r   intr   r   r   r   r   r   N   s     $ $ $r   c                	6    V P                   P                  4       # r%   )r   filenor&   r   r   r-   ZSSLTransport.filenoN       {{!!##r   c               $    V ^8  d   QhRRRRRR/# )r	   lenr+   bufferztyping.Any | Noner   int | bytesr   r   r   r   r   r   Q   s"     0 0 0,= 0 0r   c                	s$    V P                  W4      # r%   )_wrap_ssl_read)r"   r0   r1      &&&r   readZSSLTransport.readQ   s    ""3//r   c               s$    V ^8  d   QhRRRRRR/# )r	   buflenr+   flagsr   r2   r   r   r   r   r   r   T   s!     + +3 +c ++ +r   c                	sH    V^ 8w  d   \        R4      hV P                  V4      # )r    z+non-zero flags not allowed in calls to recv)
ValueErrorr3   )r"   r6   r7   r4   r   recvZSSLTransport.recvT   s&    A:JKK""6**r   c               (    V ^8  d   QhRRRRRRRR/# )	r	   r1   _WriteBuffernbytes
int | Noner7   r+   r   zNone | int | bytesr   r   r   r   r   r   Y   s2     
) 
)
) 
) 	
)
 

)r   c                	sf    V^ 8w  d   \        R4      hVf   \        V4      pV P                  W!4      # )r    z0non-zero flags not allowed in calls to recv_into)r8   r0   r5   )r"   r1   r<   r7      &&&&r   	recv_intoZSSLTransport.recv_intoY   s4     A:OPP>[Fyy((r   c               r/   )r	   databytesr7   r+   r   r   r   r   r   r   r   r   e   s!      E # d r   c           	     	sT   V^ 8w  d   \        R4      h^ p\        V4      ;_uu_ 4       qDP                  R4      ;_uu_ 4       p\        V4      pW68  d   V P	                  WSR 4      pW7,          pK#   RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)r    z.non-zero flags not allowed in calls to sendallZBN)r8   
memoryviewcastr0   send)r"   r@   r7   ZcountZviewZ	byte_viewZamountZvs   &&&     r   sendallZSSLTransport.sendalle   sz    A:MNNyy~~^F.IIi/0
 ! (6~~s#   B/B	1BBBB'	c               s$    V ^8  d   QhRRRRRR/# )r	   r@   rA   r7   r+   r   r   r   r   r   r   r   o   s!     : : :s :3 :r   c                	sr    V^ 8w  d   \        R4      hV P                  V P                  P                  V4      # )r    z+non-zero flags not allowed in calls to send)r8   r!   r    write)r"   r@   r7   r4   r   rD   ZSSLTransport.sendo   s2    A:JKK  !2!2D99r   encodingerrorsnewlinec               s0    V ^8  d   QhRRRRRRRRRRR	R
/# )r	   modeZstr	bufferingr=   rG   r   rH   rI   r   z1typing.BinaryIO | typing.TextIO | socket.SocketIOr   r   r   r   r   r   t   sF     2 22 2
 2 2 2 
;2r   c               s   \        V4      0 Rm8:  g   \        RV: R24      hRV9   pRV9   ;'       g    V'       * pV'       g   V'       g   Q hRV9   pRp	V'       d
   V	R,          p	V'       d
   V	R,          p	\        P                  ! W	4      p
V P                  ;P                  ^,          un        Vf   R	pV^ 8  d   \
        P                  pV^ 8X  d   V'       g   \        R4      hV
# V'       d!   V'       d   \
        P                  ! WV4      pM?V'       d   \
        P                  ! W4      pM V'       g   Q h\
        P                  ! W4      pV'       d   V# \
        P                  ! WWE4      pWn        V# )
z
Python's httpclient uses makefile and buffered io when reading HTTP
messages and we need to support it.

This is unfortunately a copy and paste of socket.py makefile with small
changes to point to the socket directly.
rwbzinvalid mode z (only r, w, b allowed)Z z!unbuffered streams must be binary>   rN   rL   rM   i)Zsetr8   r   ZSocketIOZ_io_refsioZDEFAULT_BUFFER_SIZEZBufferedRWPairZBufferedReaderZBufferedWriterZTextIOWrapperrJ   )r"   rJ   rK   rG   rH   rI   ZwritingZreadingZbinaryZrawmodeZrawr1   Ztexts   &&&$$$       r   makefileZSSLTransport.makefilet   s2     4yO+}TH4KLMM++,,W'!!sNGsNGood,!Iq=..I> !DEEJw&&s;F&&s6FN7&&s6FM&B	r   c               r$   r	   r   r   r   r   r   r   r   r      s     . . .r   c                	sP    V P                  V P                  P                  4       R # r%   )r!   r    unwrapr&   r   r   rR   ZSSLTransport.unwrap   s    $++,,-r   c               r$   rQ   r   r   r   r   r   r      s      t r   c                	:    V P                   P                  4        R # r%   )r   r)   r&   r   r   r)   ZSSLTransport.close   s    r   c               r   )r	   binary_formztyping.Literal[False]r   z_TYPE_PEER_CERT_RET_DICT | Noner   r   r   r   r   r      s     . .0.	(.r   c                	    R # r%   r   r"   rT      &&r   getpeercertSSLTransport.getpeercert   s     +.r   c               r   )r	   rT   ztyping.Literal[True]r   zbytes | Noner   r   r   r   r   r      s    QQ';QQr   c                	rU   r%   r   rV   rW   r   rX   rY      s    NQr   c               r   )r	   rT   r   r   r   r   r   r   r   r   r      s     4 4t 48K 4r   c                	s8    V P                   P                  V4      # r%   )r    rX   rV   rW   r   rX   rY      s    {{&&{33r   c               r$   r	   r   r   r   r   r   r   r   r      s     % % %r   c                	r,   r%   )r    versionr&   r   r   r[   ZSSLTransport.version   s    {{""$$r   c               r$   )r	   r   ztuple[str, str, int] | Noner   r   r   r   r   r      s     $ $3 $r   c                	r,   r%   )r    cipherr&   r   r   r\   ZSSLTransport.cipher   r.   r   c               r$   rZ   r   r   r   r   r   r      s     4 4
 4r   c                	r,   r%   )r    selected_alpn_protocolr&   r   r   r]   Z#SSLTransport.selected_alpn_protocol   s    {{1133r   c               r$   )r	   r   z!list[tuple[str, str, int]] | Noner   r   r   r   r   r      s     , , A ,r   c                	r,   r%   )r    shared_ciphersr&   r   r   r^   ZSSLTransport.shared_ciphers   s    {{))++r   c               r$   rZ   r   r   r   r   r   r      s     ) )Z )r   c                	r,   r%   )r    compressionr&   r   r   r_   ZSSLTransport.compression   s    {{&&((r   c               r   )r	   valuefloat | Noner   r   r   r   r   r   r   r      s     & & & &r   c                	s<    V P                   P                  V4       R # r%   )r   
settimeout)r"   r`   rW   r   rb   ZSSLTransport.settimeout   s    u%r   c               r$   )r	   r   ra   r   r   r   r   r   r      s     ( (L (r   c                	r,   r%   )r   
gettimeoutr&   r   r   rc   ZSSLTransport.gettimeout   s    {{%%''r   c               r$   rQ   r   r   r   r   r   r      s     ( (4 (r   c                	rS   r%   )r   _decref_socketiosr&   r   r   rd   ZSSLTransport._decref_socketios   s    %%'r   c               r/   )r	   r0   r+   r1   bytearray | Noner   r2   r   r   r   r   r   r      s"      # /? ; r   c                	s     V P                  V P                  P                  W4      #   \        P                   d>   pTP
                  \        P                  8X  d   T P                  '       d    R p?^ # h R p?ii ; ir%   )r!   r    r5   r   SSLErrorerrnoZSSL_ERROR_EOFr   )r"   r0   r1   es   &&& r   r3   ZSSLTransport._wrap_ssl_read   s[    	$$T[[%5%5sCC|| 	ww#+++0I0I0I		s   %( A:0A54A55A:c               r   )r	   funcztyping.Callable[[], None]r   r   r   r   r   r   r   r      s    HH!:HtHr   c                	rU   r%   r   )r"   ri   rW   r   r!   SSLTransport._ssl_io_loop   s    EHr   c               r/   )r	   ri   ztyping.Callable[[bytes], int]arg1rA   r   r+   r   r   r   r   r   r      s    XX!>XeXPSXr   c                	rU   r%   r   )r"   ri   rk   r4   r   r!   rj      s    UXr   c               r:   )	r	   ri   z/typing.Callable[[int, bytearray | None], bytes]rk   r+   arg2re   r   rA   r   r   r   r   r   r      s2      =  	
 
r   c                	rU   r%   r   )r"   ri   rk   rl   r>   r   r!   rj      s     r   c               r:   )	r	   ri   z"typing.Callable[..., _ReturnValue]rk   zNone | bytes | intrl   re   r   r   r   r   r   r   r   r      s2     $. $.0$. !$. 	$.
 
$.r   c                s   RpRpV'       d   Rp Vf   Vf	   V! 4       pMVf
   V! V4      pM	V! W#4      p V P
                  P                  4       pV P                  P                  V4       Vf   RpKn  V\         P                  8X  g   K  V P                  P                  \        4      pV'       d   V P                  P                  V4       K  V P                  P                  4        K  \        P                  ! \         V4      #   \         P                   dI   pTP                  \         P                  \         P                  39  d   ThTP                  p Rp?EL'Rp?ii ; i)z>Performs an I/O loop between incoming/outgoing and the socket.TNF)r   rf   rg   ZSSL_ERROR_WANT_READZSSL_ERROR_WANT_WRITEr   r5   r   rE   r9   SSL_BLOCKSIZEr   rF   Z	write_eoftypingrC   r   )	r"   ri   rk   rl   Zshould_loopZretrg   rh   Zbufs	   &&&&     r   r!   rj      s    E <DL&C\t*Ct*C --$$&CKK$}##111kk&&}5MM'',MM++-{{<--# <<  773#:#:C<T<T"UUG	 s!   D D D E"=EE")r   r   r   r    r   )NT)   N)ro   r    )Nr    )r    r%   ).)F)NN)!Z__name__Z
__module__Z__qualname__Z__firstlineno__Z__doc__Zstaticmethodr   r#   r'   r*   r-   r5   r9   r?   rE   rD   rP   rR   r)   rn   ZoverloadrX   r[   r\   r]   r^   r_   rb   rc   rd   r3   r!   Z__static_attributes__r   r   r   r   r      s#     4.$0+

):
2
  $2 "2 #2 2h. __. . __Q Q4%$4,)&(( __H H __X X __ $. $.r   r   )Z
__future__r   rO   r   r   rn   Z
exceptionsr   ZTYPE_CHECKINGZtyping_extensionsr   Zssl_r   r   ZUnionZ	bytearrayrB   r;   ZTypeVarr   rm   r   r   r   r   <module>rp      s]    " 	  
  /	&C ||Iz12~~n-y. y.r   