
    F2j]$                        d dl mZ d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ej        rd dlmZ dd	lmZmZ  ej        d
d          Zej        eef         Z ej        d          Z G d d          ZdS )    )annotationsN   )ssl)
stdlib_ssl)DEFAULT_BLOCKSIZE)ProxySchemeUnsupported)Literal)_TYPE_PEER_CERT_RET_TYPE_PEER_CERT_RET_DICT_SelfTSSLTransport)bound_ReturnValuec                  T   e Zd ZdZedcd            Z	 	 dddedZdfdZdgdZdhdZ	e
did            ZdjdkdZdldmd#Z	 	 dndod(Zdpdqd+Zdpdrd,Zdsd-Zdsd.Zej        	 dtdud3            Zej        dvd6            Zdwdxd9Zdyd:Zdzd<Ze
d{d=            Zdyd>Zdyd?Zd|dAZdydBZd}dEZd~dFZej         dGk    rddKZ!ddOZ"ej        ddP            Z#ej        ddQ            Z#	 dddRZ#dsdSZ$dddUZ%ej        ddX            Z&ej        dd[            Z&ej        dd^            Z&	 	 dddbZ&dS )r   aL  
    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.
    ssl_contextssl.SSLContextreturnNonec                D    t          | d          st          d          dS )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   )r   s    a/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/urllib3/util/ssltransport.py$_validate_ssl_context_for_tls_in_tlsz1SSLTransport._validate_ssl_context_for_tls_in_tls%   s7     {J// 	(5  	 	    NTsocketsocket.socketserver_hostname
str | Nonesuppress_ragged_eofsboolc                   || _         || _        t          t                              t
          j        t          j        g                    }|D ]Y} |            | _         |            | _	        	 |
                    | j        | j	        |          | _         n0# t          $ r Y Vw xY wt          dt          |           d          |                     | j        j                   dS )zV
        Create an SSLTransport around socket using the provided ssl_context.
        )r   zQSSLTransport could not find a compatible MemoryBIO for the provided ssl_context ()N)r   r   listdictfromkeysr   	MemoryBIO_stdlib_sslincomingoutgoingr   sslobj	TypeErrortype_ssl_io_loopdo_handshake)selfr   r   r   r   _bio_factories
_MemoryBIOs          r   __init__zSSLTransport.__init__5   s    %9! 59MM3=+*?@AA5
 5
 ) 	 	J+5:<<DM+5:<<DM-8-A-AM4=/ .B . .     B-1+->->B B B   	$+233333s   /'B
B%$B%r/   r   c                    | S N r/   s    r   	__enter__zSSLTransport.__enter__]   s    r   _
typing.Anyc                .    |                                   d S r4   )close)r/   r8   s     r   __exit__zSSLTransport.__exit__`   s    

r   intc                4    | j                                         S r4   )r   filenor6   s    r   r?   zSSLTransport.filenoc       {!!###r   socket.SocketKindc                    | j         j        S r4   )r   r,   r6   s    r   r,   zSSLTransport.typef   s    {r      lenbuffertyping.Any | Noneint | bytesc                .    |                      ||          S r4   )_wrap_ssl_read)r/   rD   rE   s      r   readzSSLTransport.readj   s    ""3///r   r   buflenflagsc                V    |dk    rt          d          |                     |          S )Nr   z+non-zero flags not allowed in calls to recv)
ValueErrorrI   )r/   rK   rL   s      r   recvzSSLTransport.recvm   s.    A::JKKK""6***r   _WriteBuffernbytes
int | NoneNone | int | bytesc                z    |dk    rt          d          |t          |          }|                     ||          S )Nr   z0non-zero flags not allowed in calls to recv_into)rN   rD   rJ   )r/   rE   rQ   rL   s       r   	recv_intozSSLTransport.recv_intor   s@     A::OPPP>[[Fyy(((r   databytesc                X   |dk    rt          d          d}t          |          5 }|                    d          5 }t          |          }||k     r(|                     ||d                    }||z  }||k     (d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   z.non-zero flags not allowed in calls to sendallB)rN   
memoryviewcastrD   send)r/   rV   rL   countview	byte_viewamountvs           r   sendallzSSLTransport.sendall~   s1   A::MNNN 	tyy~~ 	^^F&..IIi/00
 &..	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s4   B>B;BB	BB	BB#&B#c                l    |dk    rt          d          |                     | j        j        |          S )Nr   z+non-zero flags not allowed in calls to send)rN   r-   r*   write)r/   rV   rL   s      r   r\   zSSLTransport.send   s5    A::JKKK  !2D999r   c                D    |                      | j        j                   d S r4   )r-   r*   unwrapr6   s    r   rf   zSSLTransport.unwrap   s!    $+,-----r   c                8    | j                                          d S r4   )r   r;   r6   s    r   r;   zSSLTransport.close   s    r   .binary_formLiteral[False]_TYPE_PEER_CERT_RET_DICT | Nonec                    d S r4   r5   r/   rh   s     r   getpeercertzSSLTransport.getpeercert   s	     +.#r   Literal[True]bytes | Nonec                    d S r4   r5   rl   s     r   rm   zSSLTransport.getpeercert   s    GJsr   Fr
   c                6    | j                             |          S r4   )r*   rm   rl   s     r   rm   zSSLTransport.getpeercert   s    {&&{333r   c                4    | j                                         S r4   )r*   versionr6   s    r   rs   zSSLTransport.version   s    {""$$$r   tuple[str, str, int] | Nonec                4    | j                                         S r4   )r*   cipherr6   s    r   rv   zSSLTransport.cipher   r@   r   c                    | j         j        S r4   )r*   contextr6   s    r   rx   zSSLTransport.context   s    {""r   c                4    | j                                         S r4   )r*   selected_alpn_protocolr6   s    r   rz   z#SSLTransport.selected_alpn_protocol   s    {11333r   c                4    | j                                         S r4   )r*   selected_npn_protocolr6   s    r   r|   z"SSLTransport.selected_npn_protocol   s    {00222r   !list[tuple[str, str, int]] | Nonec                4    | j                                         S r4   )r*   shared_ciphersr6   s    r   r   zSSLTransport.shared_ciphers   s    {))+++r   c                4    | j                                         S r4   )r*   compressionr6   s    r   r   zSSLTransport.compression   s    {&&(((r   valuefloat | Nonec                :    | j                             |           d S r4   )r   
settimeout)r/   r   s     r   r   zSSLTransport.settimeout   s    u%%%%%r   c                4    | j                                         S r4   )r   
gettimeoutr6   s    r   r   zSSLTransport.gettimeout   s    {%%'''r   win32controloption!int | tuple[int, int, int] | boolc                8    | j                             ||          S r4   )r   ioctl)r/   r   r   s      r   r   zSSLTransport.ioctl   s     ;$$Wf555r   _SSLTransport__level_SSLTransport__optname_SSLTransport__valuec                >    | j                             |||           d S r4   )r   
setsockopt)r/   r   r   r   s       r   r   zSSLTransport.setsockopt   s"    w	7;;;;;r   c                    d S r4   r5   )r/   r   r   s      r   
getsockoptzSSLTransport.getsockopt   s    ?Bsr   c                    d S r4   r5   r/   r   r   rK   s       r   r   zSSLTransport.getsockopt   s    NQcr   c                t    || j                             ||          S | j                             |||          S r4   )r   r   r   s       r   r   zSSLTransport.getsockopt   s;     >;))'9==={%%gy&AAAr   c                8    | j                                          d S r4   )r   _decref_socketiosr6   s    r   r   zSSLTransport._decref_socketios   s    %%'''''r   bytearray | Nonec                    	 |                      | j        j        ||          S # t          j        $ r(}|j        t          j        k    r| j        rY d }~dS  d }~ww xY wNr   )r-   r*   rJ   r'   SSLErrorerrnoSSL_ERROR_EOFr   )r/   rD   rE   es       r   rI   zSSLTransport._wrap_ssl_read   sn    	$$T[%5sFCCC# 	 	 	w+3338Q3qqqqq		s    # AAAAfunctyping.Callable[[], None]c                    d S r4   r5   )r/   r   s     r   r-   zSSLTransport._ssl_io_loop   s    EHSr   typing.Callable[[bytes], int]arg1c                    d S r4   r5   )r/   r   r   s      r   r-   zSSLTransport._ssl_io_loop   s    UXUXr   /typing.Callable[[int, bytearray | None], bytes]arg2c                    d S r4   r5   )r/   r   r   r   s       r   r-   zSSLTransport._ssl_io_loop   s	     r   "typing.Callable[..., _ReturnValue]None | bytes | intr   c                f   d}d}|rd}	 || |            }n| ||          }n |||          }nD# t           j        $ r2}|j        t           j        t           j        fvr||j        }Y d}~nd}~ww xY w| j                                        }| j                            |           |d}ne|t           j        k    rU| j        	                    t                    }|r| j                            |           n| j                                         |t          j        t           |          S )z>Performs an I/O loop between incoming/outgoing and the socket.TNF)r'   r   r   SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITEr)   rJ   r   rb   rO   r   r(   rd   	write_eoftypingr[   r   )	r/   r   r   r   should_loopretr   r   bufs	            r   r-   zSSLTransport._ssl_io_loop   sd     	.E <DL$&&CC\$t**CC$tT**C'      734#  
 G  -$$&&CK$$$}#+999k&&'899 .M'',,,,M++---9  	.: {<---s   )5 A6(A11A6)r   r   r   r   )NT)
r   r   r   r   r   r   r   r    r   r   )r/   r   r   r   )r8   r9   r   r   )r   r=   )r   rA   )rC   N)rD   r=   rE   rF   r   rG   )rC   r   )rK   r=   rL   r=   r   rG   r   )rE   rP   rQ   rR   rL   r=   r   rS   )r   )rV   rW   rL   r=   r   r   )rV   rW   rL   r=   r   r=   )r   r   ).)rh   ri   r   rj   )rh   rn   r   ro   )F)rh   r    r   r
   )r   r   )r   rt   )r   r   )r   r}   )r   r   r   r   )r   r   )r   r=   r   r   r   r   )r   r=   r   r=   r   rG   r   r   )r   r=   r   r=   r   r=   )r   r=   r   r=   rK   r=   r   rW   r4   )r   r=   r   r=   rK   rR   r   rG   )rD   r=   rE   r   r   rG   )r   r   r   r   )r   r   r   rW   r   r=   )r   r   r   r=   r   r   r   rW   )NN)r   r   r   r   r   r   r   r   )'__name__
__module____qualname____doc__staticmethodr   r2   r7   r<   r?   propertyr,   rJ   rO   rU   rb   r\   rf   r;   r   overloadrm   rs   rv   rx   rz   r|   r   r   r   r   sysplatformr   r   r   r   rI   r-   r5   r   r   r   r      s            \& '+%)&4 &4 &4 &4 &4P      $ $ $ $       X 0 0 0 0 0+ + + + + "	
) 
) 
) 
) 
)    : : : : :
. . . .    _,/. . . . _. _JJJ _J4 4 4 4 4% % % %$ $ $ $ # # # X#4 4 4 43 3 3 3, , , ,) ) ) )& & & &( ( ( ( |w	6 	6 	6 	6
< < < < _BBB _B_QQQ _Q BFB B B B B( ( ( (     _HHH _H _XXX _X _   _ $(!%	'. '. '. '. '. '. '.r   )
__future__r   r   r   r   contrib.anytlsr   r   r'   	_constantr   
exceptionsr   TYPE_CHECKINGtyping_extensionsr	   _typingr
   r   TypeVarr   Union	bytearrayrZ   rP   r   r   r5   r   r   <module>r      s4   " " " " " "  



                   * ) ) ) ) ) / / / / / /	 H))))))GGGGGGGG 
	7	7	7|Iz12v~n--{. {. {. {. {. {. {. {. {. {.r   