HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/amqp/__pycache__/transport.cpython-310.pyc
o

%we�Y�@sdZddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZddlm
Z
ddlmZmZdd	lmZejejejejhZd
Ze�ZdZdZe�d
�Zdddddd�Zefdd�Z Gdd�d�Z!Gdd�de!�Z"Gdd�de!�Z#ddd�Z$dS)zTransport implementation.�N)�contextmanager)�SSLError)�pack�unpack�)�UnexpectedFrame)�KNOWN_TCP_OPTS�SOL_TCP)�set_cloexeci(i���sAMQP	z\[([\.0-9a-f:]+)\](?::(\d+))?i��<�
�	)�TCP_NODELAY�TCP_USER_TIMEOUT�TCP_KEEPIDLE�
TCP_KEEPINTVL�TCP_KEEPCNTcCsd|}t�|�}|r|�d�}|�d�rt|�d��}||fSd|vr.|�dd�\}}t|�}||fS)z1Convert hostname:port string to host, port tuple.r��:)�IPV6_LITERAL�match�group�int�rsplit)�host�default�port�m�r�G/home/arjun/projects/env/lib/python3.10/site-packages/amqp/transport.py�to_host_port(s


�r c@s�eZdZdZ			d$dd�ZdZdd�Zd	d
�Zedd��Z	d
d�Z
dd�Zdd�Zdd�Z
d%dd�Zdd�Zdd�Zdd�Zdd�Zefd d!�Zd"d#�ZdS)&�_AbstractTransporta�Common superclass for TCP and SSL transports.

    PARAMETERS:
        host: str

            Broker address in format ``HOSTNAME:PORT``.

        connect_timeout: int

            Timeout of creating new connection.

        read_timeout: int

            sets ``SO_RCVTIMEO`` parameter of socket.

        write_timeout: int

            sets ``SO_SNDTIMEO`` parameter of socket.

        socket_settings: dict

            dictionary containing `optname` and ``optval`` passed to
            ``setsockopt(2)``.

        raise_on_initial_eintr: bool

            when True, ``socket.timeout`` is raised
            when exception is received during first read. See ``_read()`` for
            details.
    NTcKsDd|_d|_||_t|_t|�\|_|_||_||_	||_
||_dS�NF)�	connected�sock�raise_on_initial_eintr�EMPTY_BUFFER�_read_bufferr rr�connect_timeout�read_timeout�
write_timeout�socket_settings)�selfrr(r)r*r+r%�kwargsrrr�__init__Ws
z_AbstractTransport.__init__)�
connectionr$r%r'rrr(r)r*r+�__dict__�__weakref__c	Cs�|jr:|j��d�d|j��d��}|j��d�d|j��d��}dt|�j�d|�d|�dt|�d�d	�	Sdt|�j�d
t|�d�d	�S)Nrrr�<z: z -> z at z#x�>z: (disconnected) at )r$�getsockname�getpeername�type�__name__�id)r,�src�dstrrr�__repr__ts
""*z_AbstractTransport.__repr__c	Csrz |jrWdS|�|j|j|j�|�|j|j|j�d|_WdSt	t
fy8|jr7|js7|j��d|_�w)NT)
r#�_connectrrr(�_init_socketr+r)r*�OSErrorrr$�close�r,rrr�connect|s�
�z_AbstractTransport.connectc
cs��|dur|jVdS|j}|��}||kr|�|�zLz|jVWn7tyC}zdt|�vr4t���dt|�vr>t����d}~wtyY}z|jtj	krTt����d}~wwW||krf|�|�dSdS||krr|�|�ww)N�	timed outzThe operation did not complete)
r$�
gettimeout�
settimeoutr�str�socket�timeoutr>�errno�EWOULDBLOCK)r,rGr$�prev�excrrr�having_timeout�s8�
������z!_AbstractTransport.having_timeoutc	Cs�t�||tjtjt�}t|�D]S\}}|\}}}	}
}z*t�|||	�|_zt|jd�Wn	ty4Ynw|j�	|�|j�
|�WdStjyb|jrT|j��d|_|dt
|�kr`�YqwdS)NTr)rF�getaddrinfo�	AF_UNSPEC�SOCK_STREAMr	�	enumerater$r
�NotImplementedErrorrDrA�errorr?�len)r,rrrG�entries�i�res�af�socktype�proto�	canonname�sarrrr<�s0���
���z_AbstractTransport._connectc	Cs�|j�d�|j�tjtjd�|�|�tj|ftj|ffD]!\}}|dur@t	|�}t	||d�}|j�tj|t
d||��q|��|�t
�dS)Nri@B�ll)r$rD�
setsockoptrF�
SOL_SOCKET�SO_KEEPALIVE�_set_socket_options�SO_SNDTIMEO�SO_RCVTIMEOrr�_setup_transport�_write�AMQP_PROTOCOL_HEADER)r,r+r)r*rG�interval�sec�usecrrrr=�s 
�
��z_AbstractTransport._init_socketc	Cs�i}tD]C}d}|dkr zddlm}Wntyd}Ynwtt|�r*tt|�}|rG|tvr7t|||<qtt|�rG|�ttt|��||<q|S)Nrr)r�)	rrFr�ImportError�hasattr�getattr�DEFAULT_SOCKET_SETTINGS�
getsockoptr	)r,r$�tcp_opts�opt�enumrrr�_get_tcp_socket_defaults�s(�



��z+_AbstractTransport._get_tcp_socket_defaultscCs@|�|j�}|r
|�|�|��D]\}}|j�t||�qdS�N)rrr$�update�itemsr]r	)r,r+rorp�valrrrr`�s
�z&_AbstractTransport._set_socket_optionsFcC�td��)z#Read exactly n bytes from the peer.�Must be overridden in subclass�rQ)r,�n�initialrrr�_read��z_AbstractTransport._readcC�dS)z.Do any additional initialization of the class.Nrr@rrrrc��z#_AbstractTransport._setup_transportcCr~)z8Do any preliminary work in shutting down the connection.Nrr@rrr�_shutdown_transport�rz&_AbstractTransport._shutdown_transportcCrw)z&Completely write a string to the peer.rxry)r,�srrrrd�r}z_AbstractTransport._writecCs�|jdur<z|��Wn	tyYnwz	|j�tj�Wn	ty'Ynwz|j��Wn	ty8Ynwd|_d|_dSr")r$r�r>�shutdownrF�	SHUT_RDWRr?r#r@rrrr?s$
���
z_AbstractTransport.closec

Csn|j}t}zJ|dd�}||7}|d|�\}}}|tkr@|t�}z||t�}	Wntjttfy7||7}�wd�||	g�}
n||�}
||
7}t|d��}WnUtjy^||j	|_	�ttfy�}z9t
|tj�r�tj
dkr�|jtjkr�||j	|_	t���t
|t�r�dt|�vr�||j	|_	t���|jtvr�d|_�d	}~ww|d
kr�|||
fStd|d�d
���)a�Parse AMQP frame.

        Frame has following format::

            0      1         3         7                   size+7      size+8
            +------+---------+---------+   +-------------+   +-----------+
            | type | channel |  size   |   |   payload   |   | frame-end |
            +------+---------+---------+   +-------------+   +-----------+
             octet    short     long        'size' octets        octet

        �Tz>BHI�r�ntrBFN��zReceived frame_end z#04xz while expecting 0xce)r|r&�SIGNED_INT_MAXrFrGr>r�join�ordr'�
isinstancerR�os�namerHrIrE�_UNAVAILr#r)
r,r�read�read_frame_buffer�frame_header�
frame_type�channel�size�part1�part2�payload�	frame_endrKrrr�
read_framesR
�
�

��
�z_AbstractTransport.read_framec
CsLz|�|�WdStjy�ty%}z	|jtvr d|_�d}~wwr")rdrFrGr>rHr�r#)r,r�rKrrr�writeYs
��z_AbstractTransport.write)NNNNT)F)r7�
__module__�__qualname__�__doc__r.�	__slots__r;rArrLr<r=rrr`r|rcr�rdr?rr�r�rrrrr!7s,
�


Br!cs�eZdZdZd�fdd�	ZdZdd�Zddd	�Zdd
d�Z					ddd�Z	dd�Z
dejej
ejffdd�Zdd�Z�ZS)�SSLTransporta�Transport that works over SSL.

    PARAMETERS:
        host: str

            Broker address in format ``HOSTNAME:PORT``.

        connect_timeout: int

            Timeout of creating new connection.

        ssl: bool|dict

            parameters of TLS subsystem.
                - when ``ssl`` is not dictionary, defaults of TLS are used
                - otherwise:
                    - if ``ssl`` dictionary contains ``context`` key,
                      :attr:`~SSLTransport._wrap_context` is used for wrapping
                      socket. ``context`` is a dictionary passed to
                      :attr:`~SSLTransport._wrap_context` as context parameter.
                      All others items from ``ssl`` argument are passed as
                      ``sslopts``.
                    - if ``ssl`` dictionary does not contain ``context`` key,
                      :attr:`~SSLTransport._wrap_socket_sni` is used for
                      wrapping socket. All items in ``ssl`` argument are
                      passed to :attr:`~SSLTransport._wrap_socket_sni` as
                      parameters.

        kwargs:

            additional arguments of
            :class:`~amqp.transport._AbstractTransport` class
    Ncs6t|t�r|ni|_t|_t�j|fd|i|��dS)Nr()r��dict�ssloptsr&r'�superr.)r,rr(�sslr-��	__class__rrr.�s��
�zSSLTransport.__init__)r�cCs>|j|jfi|j��|_|j�|j�|j��|jj|_dS)z!Wrap the socket in an SSL object.N)�_wrap_socketr$r�rDr(�do_handshaker��_quick_recvr@rrrrc�s
zSSLTransport._setup_transportcKs*|r|j||fi|��S|j|fi|��Srs)�
_wrap_context�_wrap_socket_sni)r,r$�contextr�rrrr��szSSLTransport._wrap_socketcKs(tjdi|��}||_|j|fi|��S)u�Wrap socket without SNI headers.

        PARAMETERS:
            sock: socket.socket

            Socket to be wrapped.

            sslopts: dict

                Parameters of  :attr:`ssl.SSLContext.wrap_socket`.

            check_hostname

                Whether to match the peer cert’s hostname. See
                :attr:`ssl.SSLContext.check_hostname` for details.

            ctx_options

                Parameters of :attr:`ssl.create_default_context`.
        Nr)r��create_default_context�check_hostname�wrap_socket)r,r$r�r��ctx_options�ctxrrrr��szSSLTransport._wrap_contextFTcCs�|||||	d�}|dur|rtjntj}t�|�}
|dur#|
�||�|dur,|
�|�|
dur5|
�|
�z
tjo<|	du|
_Wn	t	yHYnw|durP||
_
|duri|
j
tjkri|r`tjj
ntjj}|
�|�|
jdi|��}|S)u�Socket wrap with SNI headers.

        stdlib :attr:`ssl.SSLContext.wrap_socket` method augmented with support
        for setting the server_hostname field required for SNI hostname header.

        PARAMETERS:
            sock: socket.socket

                Socket to be wrapped.

            keyfile: str

                Path to the private key

            certfile: str

                Path to the certificate

            server_side: bool

                Identifies whether server-side or client-side
                behavior is desired from this socket. See
                :attr:`~ssl.SSLContext.wrap_socket` for details.

            cert_reqs: ssl.VerifyMode

                When set to other than :attr:`ssl.CERT_NONE`, peers certificate
                is checked. Possible values are :attr:`ssl.CERT_NONE`,
                :attr:`ssl.CERT_OPTIONAL` and :attr:`ssl.CERT_REQUIRED`.

            ca_certs: str

                Path to “certification authority” (CA) certificates
                used to validate other peers’ certificates when ``cert_reqs``
                is other than :attr:`ssl.CERT_NONE`.

            do_handshake_on_connect: bool

                Specifies whether to do the SSL
                handshake automatically. See
                :attr:`~ssl.SSLContext.wrap_socket` for details.

            suppress_ragged_eofs (bool):

                See :attr:`~ssl.SSLContext.wrap_socket` for details.

            server_hostname: str

                Specifies the hostname of the service which
                we are connecting to. See :attr:`~ssl.SSLContext.wrap_socket`
                for details.

            ciphers: str

                Available ciphers for sockets created with this
                context. See :attr:`ssl.SSLContext.set_ciphers`

            ssl_version:

                Protocol of the SSL Context. The value is one of
                ``ssl.PROTOCOL_*`` constants.
        )r$�server_side�do_handshake_on_connect�suppress_ragged_eofs�server_hostnameNr)r��PROTOCOL_TLS_SERVER�PROTOCOL_TLS_CLIENT�
SSLContext�load_cert_chain�load_verify_locations�set_ciphers�HAS_SNIr��AttributeError�verify_mode�	CERT_NONE�Purpose�CLIENT_AUTH�SERVER_AUTH�load_default_certsr�)r,r$�keyfile�certfiler��	cert_reqs�ca_certsr�r�r��ciphers�ssl_version�optsr��purposerrrr��sDD���


��
��
zSSLTransport._wrap_socket_snicCs|jdur
|j��|_dSdS)z/Unwrap a SSL socket, so we can call shutdown().N)r$�unwrapr@rrrr�/s
�z SSLTransport._shutdown_transportc	
Cs�|j}|j}zDt|�|krIz
||t|��}Wn!ty8}z|j|vr3|r-|jr-t���WYd}~q�d}~ww|s?td��||7}t|�|ks
Wn||_�|d|�||d�}|_|S)N�%Server unexpectedly closed connection�r�r'rSr>rHr%rFrG�	r,rzr{�_errnos�recv�rbufr�rK�resultrrrr|4s0

����zSSLTransport._readcCsT|jj}|r(z||�}Wntyd}Ynw|std��||d�}|sdSdS)z+Write a string out to the SSL socket fully.rz
Socket closedN)r$r��
ValueErrorr>)r,r�r�rzrrrrdPs��zSSLTransport._write)NNrs)
NNFNNFTNNN)r7r�r�r�r.r�rcr�r�r�r�rH�ENOENT�EAGAIN�EINTRr|rd�
__classcell__rrr�rr�ds$"


�x
�r�c@s.eZdZdZdd�Zdejejffdd�ZdS)�TCPTransportz~Transport that deals directly with TCP socket.

    All parameters are :class:`~amqp.transport._AbstractTransport` class.
    cCs|jj|_t|_|jj|_dSrs)r$�sendallrdr&r'r�r�r@rrrrcgs
zTCPTransport._setup_transportFc	
Cs�|j}|j}zDt|�|krIz
||t|��}Wn!ty8}z|j|vr3|r-|jr-t���WYd}~q�d}~ww|s?td��||7}t|�|ks
Wn||_�|d|�||d�}|_|S)z%Read exactly n bytes from the socket.Nr�r�r�rrrr|ns0

����zTCPTransport._readN)	r7r�r�r�rcrHr�r�r|rrrrr�asr�FcKs"|rtnt}||f||d�|��S)a�Create transport.

    Given a few parameters from the Connection constructor,
    select and create a subclass of
    :class:`~amqp.transport._AbstractTransport`.

    PARAMETERS:

        host: str

            Broker address in format ``HOSTNAME:PORT``.

        connect_timeout: int

            Timeout of creating new connection.

        ssl: bool|dict

            If set, :class:`~amqp.transport.SSLTransport` is used
            and ``ssl`` parameter is passed to it. Otherwise
            :class:`~amqp.transport.TCPTransport` is used.

        kwargs:

            additional arguments of :class:`~amqp.transport._AbstractTransport`
            class
    )r(r�)r�r�)rr(r�r-�	transportrrr�	Transport�sr�r")%r�rHr��rerFr��
contextlibrr�structrr�
exceptionsr�platformrr	�utilsr
r�r�r�rIr��	AMQP_PORT�bytesr&r�re�compilerrmr r!r�r�r�rrrr�<module>s@
�	/~&