HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
File: //usr/local/lib/python3.9/site-packages/amqp/__pycache__/transport.cpython-39.pyc
a

X>hZ�@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_KEEPCNTcCs^|}t�|�}|r6|�d�}|�d�rVt|�d��}n d|vrV|�dd�\}}t|�}||fS)z1Convert hostname:port string to host, port tuple.r��:)�IPV6_LITERAL�match�group�int�rsplit)�host�default�port�m�r�8/usr/local/lib/python3.9/site-packages/amqp/transport.py�to_host_port(s


r c@s�eZdZdZd$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__Wsz_AbstractTransport.__init__)�
connectionr$r%r'rrr(r)r*r+�__dict__�__weakref__c
Cs�|jr�|j��d�d|j��d��}z&|j��d�d|j��d��}Wn0tjy~}zd|��}WYd}~n
d}~00dt|�j�d|�d|�dt|�d	�d
�	Sdt|�j�dt|�d	�d
�SdS)NrrrzERROR: �<z: z -> z at z#x�>z: (disconnected) at )r$�getsockname�getpeername�socket�error�type�__name__�id)r,�src�dst�errr�__repr__ts"& *z_AbstractTransport.__repr__c	Csxz>|jrWdS|�|j|j|j�|�|j|j|j�d|_Wn4t	t
fyr|jrl|jsl|j��d|_�Yn0dS)NT)
r#�_connectrrr(�_init_socketr+r)r*�OSErrorrr$�close�r,rrr�connects�

z_AbstractTransport.connectc
cs�|dur|jVn�|j}|��}||kr2|�|�z�z|jVWn�ty�}z8dt|�vrft���ndt|�vrzt����WYd}~nBd}~0ty�}z"|jtj	kr�t����WYd}~n
d}~00W||kr�|�|�n||kr�|�|�0dS)N�	timed outzThe operation did not complete)
r$�
gettimeout�
settimeoutr�strr6�timeoutrA�errno�EWOULDBLOCK)r,rIr$�prev�excrrr�having_timeout�s,


�z!_AbstractTransport.having_timeoutc	Cs�t�||tjtjt�}t|�D]�\}}|\}}}	}
}zPt�|||	�|_zt|jd�WntyhYn0|j�	|�|j�
|�Wn<tjy�|jr�|j��d|_|dt
|�kr��Yq0q�qdS)NTr)r6�getaddrinfo�	AF_UNSPEC�SOCK_STREAMr	�	enumerater$r
�NotImplementedErrorrGrDr7rB�len)r,rrrI�entries�i�res�af�socktype�proto�	canonname�sarrrr?�s(�
z_AbstractTransport._connectc	Cs�|j�d�|j�tjtjd�|�|�tj|ftj|ffD]B\}}|dur>t	|�}t	||d�}|j�tj|t
d||��q>|��|�t
�dS)Nri@BZll)r$rG�
setsockoptr6�
SOL_SOCKET�SO_KEEPALIVE�_set_socket_options�SO_SNDTIMEO�SO_RCVTIMEOrr�_setup_transport�_write�AMQP_PROTOCOL_HEADER)r,r+r)r*rI�interval�secZusecrrrr@�s
�
�z_AbstractTransport._init_socketc	Cs�i}tD]�}d}|dkrBzddlm}WqVty>d}YqV0ntt|�rVtt|�}|r|tvrpt|||<qtt|�r|�ttt|��||<q|S)Nrr)r�)	rr6r�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||�q"dS�N)rqr$�update�itemsr]r	)r,r+rnro�valrrrr`�s

z&_AbstractTransport._set_socket_optionsFcCstd��dS)z#Read exactly n bytes from the peer.�Must be overridden in subclassN�rS)r,�n�initialrrr�_read�sz_AbstractTransport._readcCsdS)z.Do any additional initialization of the class.NrrCrrrrc�sz#_AbstractTransport._setup_transportcCsdS)z8Do any preliminary work in shutting down the connection.NrrCrrr�_shutdown_transport�sz&_AbstractTransport._shutdown_transportcCstd��dS)z&Completely write a string to the peer.rvNrw)r,�srrrrdsz_AbstractTransport._writecCs�|jdurxz|��Wnty(Yn0z|j�tj�WntyNYn0z|j��WntypYn0d|_d|_dSr")r$r{rA�shutdownr6�	SHUT_RDWRrBr#rCrrrrBs
z_AbstractTransport.closec

Cs�|j}t}z�|dd�}||7}|d|�\}}}|tkr�|t�}z||t�}	Wn$tjttfyr||7}�Yn0d�||	g�}
n||�}
||
7}t|d��}Wn�tjy�||j	|_	�Yn�ttf�yj}z�t
|tj��rtj
dk�r|jtjk�r||j	|_	t���t
|t��rBdt|�v�rB||j	|_	t���|jtv�rTd|_�WYd	}~n
d	}~00|d
k�r�|||
fStd|d�d
���d	S)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�ntrEFN��zReceived frame_end z#04xz while expecting 0xce)rzr&�SIGNED_INT_MAXr6rIrAr�join�ordr'�
isinstancer7�os�namerJrKrH�_UNAVAILr#r)
r,r�readZread_frame_bufferZframe_headerZ
frame_typeZchannel�sizeZpart1Zpart2�payloadZ	frame_endrMrrr�
read_framesP

��
�

�z_AbstractTransport.read_framec
Cs^z|�|�WnJtjy$�Yn6tyX}z|jtvrBd|_�WYd}~n
d}~00dSr")rdr6rIrArJr�r#)r,r|rMrrr�write\s
z_AbstractTransport.write)NNNNT)F)r9�
__module__�__qualname__�__doc__r.�	__slots__r>rDrrNr?r@rqr`rzrcr{rdrBrr�r�rrrrr!7s*�



Br!c
sveZdZdZd�fdd�	ZdZdd�Zddd	�Zdd
d�Zddd�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�rGr(�do_handshaker��_quick_recvrCrrrrc�s
zSSLTransport._setup_transportcKs*|r|j||fi|��S|j|fi|��Srr)�
_wrap_context�_wrap_socket_sni)r,r$�contextr�rrrr��szSSLTransport._wrap_socketcKs(tjfi|��}||_|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`.
        )r��create_default_context�check_hostname�wrap_socket)r,r$r�r�Zctx_options�ctxrrrr��szSSLTransport._wrap_contextFTcCs�|||||	d�}|dur(|r"tjntj}t�|�}
|durF|
�||�|durX|
�|�|
durj|
�|
�ztjox|	du|
_Wnt	y�Yn0|dur�||
_
|dur�|
j
tjkr�|r�tjj
ntjj}|
�|�|
jfi|��}|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_hostnameN)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��sBD���


��
�
zSSLTransport._wrap_socket_snicCs|jdur|j��|_dS)z/Unwrap a SSL socket, so we can call shutdown().N)r$�unwraprCrrrr{2s
z SSLTransport._shutdown_transportc	
Cs�|j}|j}z�t|�|kr�z||t|��}WnNty|}z6|j|vrf|rZ|jrZt���WYd}~q�WYd}~n
d}~00|s�td��||7}qWn||_�Yn0|d|�||d�}|_|S)N�%Server unexpectedly closed connection�r�r'rTrArJr%r6rI�	r,rxryZ_errnos�recvZrbufr|rM�resultrrrrz7s(

zSSLTransport._readcCsN|jj}|rJz||�}Wnty.d}Yn0|s<td��||d�}qdS)z+Write a string out to the SSL socket fully.rz
Socket closedN)r$r��
ValueErrorrA)r,r|r�rxrrrrdSs
zSSLTransport._write)NN)N)N)
NNFNNFTNNN)r9r�r�r�r.r�rcr�r�r�r{rJ�ENOENT�EAGAIN�EINTRrzrd�
__classcell__rrr�rr�gs""

�
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|_dSrr)r$�sendallrdr&r'r�r�rCrrrrcjs
zTCPTransport._setup_transportFc	
Cs�|j}|j}z�t|�|kr�z||t|��}WnNty|}z6|j|vrf|rZ|jrZt���WYd}~q�WYd}~n
d}~00|s�td��||7}qWn||_�Yn0|d|�||d�}|_|S)z%Read exactly n bytes from the socket.Nr�r�r�rrrrzqs(

zTCPTransport._readN)	r9r�r�r�rcrJr�r�rzrrrrr�dsr�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�)NF)%r�rJr��rer6r��
contextlibrr�structrr�
exceptionsr�platformrr	�utilsr
r�r�r�rKr�Z	AMQP_PORT�bytesr&r�re�compilerrlr r!r�r�r�rrrr�<module>s>
�	2~&