ó
    Ð]j�"  ã                  óØ   • S SK Jr  S SKrS SKrS SKrS SKrSSKJr  \R                  (       a  S SK	J
r
  SSKJrJr  \R                  \\4   r\R$                  " S5      rS	r " S
 S5      rg)é    )ÚannotationsNé   )ÚProxySchemeUnsupported)ÚSelfé   )Ú_TYPE_PEER_CERT_RETÚ_TYPE_PEER_CERT_RET_DICTÚ_ReturnValuei @  c                  ó|  • \ rS rSrSr\S#S j5       r  S$         S%S jjrS&S jrS'S jr	S(S jr
S)S*S	 jjrS+S,S
 jjr  S-       S.S jjrS/S0S jjrS/S1S jjr S2SSSS.           S3S jjjrS4S jrS4S jr\R(                   S5   S6S jj5       r\R(                  S7S j5       rS8S9S jjrS:S jrS;S jrS:S jrS<S jrS:S jrS=S jrS>S jrS4S jrS2S?S jjr\R(                  S@S j5       r\R(                  SAS j5       r\R(                          SBS  j5       r  SC       SDS! jjrS"r g)EÚSSLTransporté   a4  
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                ó<   • [        U S5      (       d  [        S5      eg)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)Úhasattrr   )Ússl_contexts    ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/urllib3/util/ssltransport.pyÚ$_validate_ssl_context_for_tls_in_tlsÚ1SSLTransport._validate_ssl_context_for_tls_in_tls!   s(   € ô �{ J×/Ñ/Ü(ð5óð ð 0ó    Nc                ó"  • [         R                  " 5       U l        [         R                  " 5       U l        X@l        Xl        UR                  U R                  U R                  US9U l        U R                  U R                  R                  5        g)zF
Create an SSLTransport around socket using the provided ssl_context.
)Úserver_hostnameN)
ÚsslÚ	MemoryBIOÚincomingÚoutgoingÚsuppress_ragged_eofsÚsocketr   ÚsslobjÚ_ssl_io_loopÚdo_handshake)Úselfr   r   r   r   s        r   Ú__init__ÚSSLTransport.__init__1   si   € ô Ÿš›ˆŒÜŸš›ˆŒà$8Ô!ØŒà!×*Ñ*Ø�M‰M˜4Ÿ=™=¸/ð +ð 
ˆŒð
 	×Ñ˜$Ÿ+™+×2Ñ2Õ3r   c                ó   • U $ ©N© ©r!   s    r   Ú	__enter__ÚSSLTransport.__enter__H   s   € Øˆr   c                ó$   • U R                  5         g r%   )Úclose)r!   Ú_s     r   Ú__exit__ÚSSLTransport.__exit__K   s   € Ø�
‰
�r   c                ó6   • U R                   R                  5       $ r%   )r   Úfilenor'   s    r   r0   ÚSSLTransport.filenoN   ó   € Ø�{‰{×!Ñ!Ó#Ð#r   c                ó$   • U R                  X5      $ r%   )Ú_wrap_ssl_read)r!   ÚlenÚbuffers      r   ÚreadÚSSLTransport.readQ   s   € Ø×"Ñ" 3Ó/Ð/r   c                óF   • US:w  a  [        S5      eU R                  U5      $ )Nr   z+non-zero flags not allowed in calls to recv)Ú
ValueErrorr4   )r!   ÚbuflenÚflagss      r   ÚrecvÚSSLTransport.recvT   s&   € Ø�A‹:ÜÐJÓKÐKØ×"Ñ" 6Ó*Ð*r   c                ób   • US:w  a  [        S5      eUc  [        U5      nU R                  X!5      $ )Nr   z0non-zero flags not allowed in calls to recv_into)r:   r5   r7   )r!   r6   Únbytesr<   s       r   Ú	recv_intoÚSSLTransport.recv_intoY   s4   € ð �A‹:ÜÐOÓPÐPØ‰>Ü˜“[ˆFØ�y‰y˜Ó(Ð(r   c                ó$  • US:w  a  [        S5      eSn[        U5       oDR                  S5       n[        U5      nX6:  a  U R	                  XSS  5      nX7-  nX6:  a  M  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   z.non-zero flags not allowed in calls to sendallÚB)r:   Ú
memoryviewÚcastr5   Úsend)r!   Údatar<   ÚcountÚviewÚ	byte_viewÚamountÚvs           r   ÚsendallÚSSLTransport.sendalle   st   € Ø�A‹:ÜÐMÓNÐNØˆÜ˜Ô §y¡y°¤~¸Ü˜“^ˆFØ“.Ø—I‘I˜i¨Ð/Ó0�Ø‘
�ð •.÷ (6×Ð§~¥~ú×Õús"   ŸB°-A0ÁBÁ0
A>	Á:BÂ
Bc                óp   • US:w  a  [        S5      eU R                  U R                  R                  U5      $ )Nr   z+non-zero flags not allowed in calls to send)r:   r   r   Úwrite)r!   rH   r<   s      r   rG   ÚSSLTransport.sendo   s2   € Ø�A‹:ÜÐJÓKÐKØ× Ñ  §¡×!2Ñ!2°DÓ9Ð9r   )ÚencodingÚerrorsÚnewlinec               ó¼  • [        U5      1 Sk::  d  [        SU< S35      eSU;   nSU;   =(       d    U(       + nU(       d	  U(       d   eSU;   nSn	U(       a  U	S-  n	U(       a  U	S-  n	[        R                  " X	5      n
U R                  =R                  S-  sl        Uc  S	nUS
:  a  [
        R                  nUS
:X  a  U(       d  [        S5      eU
$ U(       a  U(       a  [
        R                  " XªU5      nO=U(       a  [
        R                  " X¢5      nOU(       d   e[
        R                  " X¢5      nU(       a  U$ [
        R                  " X³XE5      nXl        U$ )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.
>   ÚbÚrÚwzinvalid mode z (only r, w, b allowed)rY   rX   rW   Ú r   éÿÿÿÿr   z!unbuffered streams must be binary)Úsetr:   r   ÚSocketIOÚ_io_refsÚioÚDEFAULT_BUFFER_SIZEÚBufferedRWPairÚBufferedReaderÚBufferedWriterÚTextIOWrapperÚmode)r!   re   Ú	bufferingrS   rT   rU   ÚwritingÚreadingÚbinaryÚrawmodeÚrawr6   Útexts                r   ÚmakefileÚSSLTransport.makefilet   s/  € ô  �4‹yšOÓ+Ü˜}¨T©HÐ4KÐLÓMÐMà˜‘+ˆØ˜‘+×, W¤ˆÞž'Ð!Ð!Ø˜‘ˆØˆÞØ�s‰NˆGÞØ�s‰NˆGÜ�oŠo˜dÓ,ˆØ�‰×Ò Ñ!ÕØÑØˆIØ�q‹=Ü×.Ñ.ˆIØ˜‹>ÞÜ Ð!DÓEÐEØˆJæ–wÜ×&Ò& s°Ó;‰FÞÜ×&Ò& sÓ6‰FæˆN�7Ü×&Ò& sÓ6ˆFÞØˆMÜ×Ò °&ÓBˆØŒ	Øˆr   c                óN   • U R                  U R                  R                  5        g r%   )r   r   Úunwrapr'   s    r   rp   ÚSSLTransport.unwrap¨   s   € Ø×Ñ˜$Ÿ+™+×,Ñ,Õ-r   c                ó8   • U R                   R                  5         g r%   )r   r+   r'   s    r   r+   ÚSSLTransport.close«   s   € Ø�‰×ÑÕr   c                ó   • g r%   r&   ©r!   Úbinary_forms     r   ÚgetpeercertÚSSLTransport.getpeercert®   s   € ð +.r   c                ó   • g r%   r&   ru   s     r   rw   rx   ³   s   € ØNQr   c                ó8   • U R                   R                  U5      $ r%   )r   rw   ru   s     r   rw   rx   ¶   s   € Ø�{‰{×&Ñ& {Ó3Ð3r   c                ó6   • U R                   R                  5       $ r%   )r   Úversionr'   s    r   r|   ÚSSLTransport.version¹   s   € Ø�{‰{×"Ñ"Ó$Ð$r   c                ó6   • U R                   R                  5       $ r%   )r   Úcipherr'   s    r   r   ÚSSLTransport.cipher¼   r2   r   c                ó6   • U R                   R                  5       $ r%   )r   Úselected_alpn_protocolr'   s    r   r‚   Ú#SSLTransport.selected_alpn_protocol¿   s   € Ø�{‰{×1Ñ1Ó3Ð3r   c                ó6   • U R                   R                  5       $ r%   )r   Úshared_ciphersr'   s    r   r…   ÚSSLTransport.shared_ciphersÂ   s   € Ø�{‰{×)Ñ)Ó+Ð+r   c                ó6   • U R                   R                  5       $ r%   )r   Úcompressionr'   s    r   rˆ   ÚSSLTransport.compressionÅ   s   € Ø�{‰{×&Ñ&Ó(Ð(r   c                ó:   • U R                   R                  U5        g r%   )r   Ú
settimeout)r!   Úvalues     r   r‹   ÚSSLTransport.settimeoutÈ   s   € Ø�‰×Ñ˜uÕ%r   c                ó6   • U R                   R                  5       $ r%   )r   Ú
gettimeoutr'   s    r   r�   ÚSSLTransport.gettimeoutË   s   € Ø�{‰{×%Ñ%Ó'Ð'r   c                ó8   • U R                   R                  5         g r%   )r   Ú_decref_socketiosr'   s    r   r’   ÚSSLTransport._decref_socketiosÎ   s   € Ø�‰×%Ñ%Õ'r   c                óò   •  U R                  U R                  R                  X5      $ ! [        R                   a:  nUR
                  [        R                  :X  a  U R                  (       a   S nAge S nAff = f©Nr   )r   r   r7   r   ÚSSLErrorÚerrnoÚSSL_ERROR_EOFr   )r!   r5   r6   Úes       r   r4   ÚSSLTransport._wrap_ssl_readÑ   sX   € ð	Ø×$Ñ$ T§[¡[×%5Ñ%5°sÓCÐCøÜ�|‰|ó 	Ø�w‰wœ#×+Ñ+Ó+°×0I×0IÜàûð		ús   ‚%( ¨A6¼/A1Á0A1Á1A6c                ó   • g r%   r&   )r!   Úfuncs     r   r   ÚSSLTransport._ssl_io_loopÛ   s   € ØEHr   c                ó   • g r%   r&   )r!   rœ   Úarg1s      r   r   r�   ß   s   € ØUXr   c                ó   • g r%   r&   )r!   rœ   rŸ   Úarg2s       r   r   r�   ã   s   € ð r   c                ó¾  • SnSnU(       aÚ  Sn Uc  Uc  U" 5       nOUc	  U" U5      nO	U" X#5      n U R
                  R                  5       nU R                  R                  U5        Uc  SnOpU[         R                  :X  a\  U R                  R                  [        5      nU(       a  U R                  R                  U5        OU R                  R                  5         U(       a  MÚ  [        R                  " [         U5      $ ! [         R                   aG  nUR                  [         R                  [         R                  4;  a  UeUR                  n SnAGN%SnAff = f)z>Performs an I/O loop between incoming/outgoing and the socket.TNF)r   r–   r—   ÚSSL_ERROR_WANT_READÚSSL_ERROR_WANT_WRITEr   r7   r   rN   r=   ÚSSL_BLOCKSIZEr   rQ   Ú	write_eofÚtypingrF   r
   )	r!   rœ   rŸ   r¡   Úshould_loopÚretr—   r™   Úbufs	            r   r   r�   ë   s  € ð ˆØˆæØˆEð Ø‘< D¡LÙ›&‘CØ‘\Ù˜t›*‘Cá˜tÓ*‘Cð —-‘-×$Ñ$Ó&ˆCØ�K‰K×Ñ Ô$à‰}Ø#‘Øœ#×1Ñ1Ó1Ø—k‘k×&Ñ&¤}Ó5�ÞØ—M‘M×'Ñ'¨Õ,à—M‘M×+Ñ+Ô-÷3 ˆkô4 �{Š{œ<¨Ó-Ð-øô# —<‘<ó  Ø—7‘7¤3×#:Ñ#:¼C×<TÑ<TÐ"UÓUà�GØŸ™–ûð	 ús!   �D �D ©D ÄEÄ<EÅE)r   r   r   r   r   )r   ússl.SSLContextÚreturnÚNone)NT)
r   zsocket.socketr   r«   r   ú
str | Noner   Úboolr¬   r­   )r¬   r   )r,   z
typing.Anyr¬   r­   )r¬   Úint)é   N)r5   r°   r6   ztyping.Any | Noner¬   úint | bytes)r±   r   )r;   r°   r<   r°   r¬   r²   r•   )r6   Ú_WriteBufferr@   ú
int | Noner<   r°   r¬   zNone | int | bytes)r   )rH   Úbytesr<   r°   r¬   r­   )rH   rµ   r<   r°   r¬   r°   r%   )re   Ústrrf   r´   rS   r®   rT   r®   rU   r®   r¬   z1typing.BinaryIO | typing.TextIO | socket.SocketIO)r¬   r­   ).)rv   ztyping.Literal[False]r¬   z_TYPE_PEER_CERT_RET_DICT | None)rv   ztyping.Literal[True]r¬   zbytes | None)F)rv   r¯   r¬   r   )r¬   r®   )r¬   ztuple[str, str, int] | None)r¬   z!list[tuple[str, str, int]] | None)rŒ   úfloat | Noner¬   r­   )r¬   r·   )r5   r°   r6   úbytearray | Noner¬   r²   )rœ   ztyping.Callable[[], None]r¬   r­   )rœ   ztyping.Callable[[bytes], int]rŸ   rµ   r¬   r°   )rœ   z/typing.Callable[[int, bytearray | None], bytes]rŸ   r°   r¡   r¸   r¬   rµ   )NN)rœ   z"typing.Callable[..., _ReturnValue]rŸ   zNone | bytes | intr¡   r¸   r¬   r
   )!Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr   r"   r(   r-   r0   r7   r=   rA   rN   rG   rm   rp   r+   r§   Úoverloadrw   r|   r   r‚   r…   rˆ   r‹   r�   r’   r4   r   Ú__static_attributes__r&   r   r   r   r      s  † ñð óó ðð& '+Ø%)ð4àð4ð $ð4ð $ð	4ð
 #ð4ð 
õ4ô.ôô$ö0ö+ð "Øð	
)àð
)ð ð
)ð ð	
)ð
 
õ
)öö:ð !%ð2ð
  $Ø!Ø"ñ2àð2ð ð2ð
 ð2ð ð2ð ð2ð 
;ö2ôh.ôð ‡_�_à36ð.Ø0ð.à	(ô.ó ð.ð ‡_�_ÛQó ØQö4ô%ô$ô4ô,ô)ô&ô(ô(öð ‡_�_ÛHó ØHð ‡_�_ÛXó ØXð ‡_�_ðà=ðð ðð ð	ð
 
óó ðð $(Ø!%ð	$.à0ð$.ð !ð$.ð ð	$.ð
 
÷$.ð $.r   r   )Ú
__future__r   r_   r   r   r§   Ú
exceptionsr   ÚTYPE_CHECKINGÚtyping_extensionsr   Ússl_r   r	   ÚUnionÚ	bytearrayrE   r³   ÚTypeVarr
   r¥   r   r&   r   r   Ú<module>rÉ      sZ   ðÝ "ã 	Û Û 
Û å /à	××Ý&çCð �|‰|˜I zÐ1Ñ2€Ø�~Š~˜nÓ-€à€÷y.ò y.r   