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: //proc/1233/root/usr/lib/python3/dist-packages/websocket/__pycache__/_abnf.cpython-310.pyc
o

_7�a/3�
@sdZ	ddlZddlZddlZddlZddlTddlmZddlm	Z	zddl
mZdd	�ZWne
y?ejZd
d	�ZYnwgd�ZdZd
ZdZdZdZdZdZdZdZdZdZdZdZeeeeeeeeeef
ZGdd�d�ZGdd�d�Z Gdd�d�Z!dS)z

�N�)�*)�
validate_utf8)�Lock)�XorMaskerSimplecCst|��|�S�N)r�process)�_m�_d�r�1/usr/lib/python3/dist-packages/websocket/_abnf.py�_mask'sr
cCsHt|�}t�|t�}t�||d|d|d�t�}||A�|t�S)N�)�len�int�
from_bytes�native_byteorder�to_bytes)�
mask_value�
data_value�datalenrrrr
.s$)�ABNF�continuous_frame�frame_buffer�
STATUS_NORMAL�STATUS_GOING_AWAY�STATUS_PROTOCOL_ERROR�STATUS_UNSUPPORTED_DATA_TYPE�STATUS_STATUS_NOT_AVAILABLE�STATUS_ABNORMAL_CLOSED�STATUS_INVALID_PAYLOAD�STATUS_POLICY_VIOLATION�STATUS_MESSAGE_TOO_BIG�STATUS_INVALID_EXTENSION�STATUS_UNEXPECTED_CONDITION�STATUS_BAD_GATEWAY�STATUS_TLS_HANDSHAKE_ERRORi�i�i�i�i�i�i�i�i�i�i�i�i�c@s�eZdZdZdZdZdZdZdZdZ	eeeeee	fZ
eded	ed
edede	d
iZdZdZ
dZddddeddfdd�Zd$dd�Zedd��Zdd�Zed%dd��Zdd�Zdd �Zed!d"��Zd#S)&rz}
    ABNF frame class.
    See http://tools.ietf.org/html/rfc5234
    and http://tools.ietf.org/html/rfc6455#section-5.2
    rr���	�
�cont�text�binary�close�ping�pong�~il�cCsB||_||_||_||_||_||_|durd}||_tj|_	dS)zG
        Constructor for ABNF. Please check RFC for arguments.
        Nr2)
�fin�rsv1�rsv2�rsv3�opcode�mask�data�os�urandom�get_mask_key)�selfr3r4r5r6r7r8r9rrr�__init__�sz
ABNF.__init__FcCs�|js	|js	|jr
td��|jtjvrtd|j��|jtjkr&|js&td��|jtj	krit
|j�}|s5dS|dks=|dkrAtd��|dkrT|sTt|jdd��sTtd��d	|jd
|jd}|�
|�sktd��dSdS)z�
        Validate the ABNF frame.

        Parameters
        ----------
        skip_utf8_validation: skip utf8 validation.
        zrsv is not implemented, yetzInvalid opcode %rzInvalid ping frame.Nrr1zInvalid close frame.r'�rzInvalid close opcode.)r4r5r6�WebSocketProtocolExceptionr7r�OPCODES�OPCODE_PINGr3�OPCODE_CLOSErr9r�_is_valid_close_status)r=�skip_utf8_validation�l�coderrr�validate�s&

�
z
ABNF.validatecCs |tvpd|ko
dkSS)Ni�i�)�VALID_CLOSE_STATUS)rGrrrrD�s zABNF._is_valid_close_statuscCs*dt|j�dt|j�dt|j�S)Nzfin=z opcode=z data=)�strr3r7r9�r=rrr�__str__�s����zABNF.__str__cCs2|tjkrt|t�r|�d�}t|ddd|d|�S)a�
        Create frame to send text, binary and other data.

        Parameters
        ----------
        data: <type>
            data to send. This is string value(byte array).
            If opcode is OPCODE_TEXT and this value is unicode,
            data value is converted into unicode string, automatically.
        opcode: <type>
            operation code. please see OPCODE_XXX.
        fin: <type>
            fin flag. if set to 0, create continue fragmentation.
        �utf-8rr)r�OPCODE_TEXT�
isinstancerJ�encode)r9r7r3rrr�create_frame�s
zABNF.create_framecCsFtdd�|j|j|j|jfD��rtd��|jtjvrtd��t	|j
�}|tjkr-td��t|jd>|jd>B|jd>B|jd	>B|jB��
d
�}|tjkr]|t|jd>|B��
d
�7}n2|tjkry|t|jd>dB��
d
�7}|t�d|�7}n|t|jd>d
B��
d
�7}|t�d|�7}|js�||j
S|�d	�}||�|�S)zR
        Format this object to string(byte array) to send data to server.
        css�|]}|dvVqdS))rrNr)�.0�xrrr�	<genexpr>�s�zABNF.format.<locals>.<genexpr>z
not 0 or 1zInvalid OPCODEzdata is too long���r�latin-1r1�!H��!Q)�anyr3r4r5r6�
ValueErrorr7rrArr9�	LENGTH_63�chrrP�LENGTH_7r8�	LENGTH_16�struct�packr<�_get_masked)r=�length�frame_header�mask_keyrrr�format�s:"


�����



zABNF.formatcCs*t�||j�}t|t�r|�d�}||S)NrM)rr8r9rOrJrP)r=rg�srrrrd�s

zABNF._get_maskedcCsN|durd}t|t�r|�d�}t|t�r|�d�}tt�d|�t�d|��S)z�
        Mask or unmask data. Just do xor for each byte

        Parameters
        ----------
        mask_key: <type>
            4 byte string.
        data: <type>
            data to mask/unmask.
        Nr2rX�B)rOrJrPr
�array)rgr9rrrr8�s



z	ABNF.maskN)F)r)�__name__�
__module__�__qualname__�__doc__�OPCODE_CONTrN�
OPCODE_BINARYrCrB�OPCODE_PONGrA�
OPCODE_MAPr`rar^r>rH�staticmethodrDrLrQrhrdr8rrrrrcsD��

�

rc@sleZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)rrWrVcCs&||_||_g|_|��t�|_dSr)�recvrE�recv_buffer�clearr�lock)r=�recv_fnrErrrr>s
zframe_buffer.__init__cCsd|_d|_d|_dSr)�headerrer8rKrrrrws
zframe_buffer.clearcC�
|jduSr)rzrKrrr�has_received_header!�
z frame_buffer.has_received_headercCs~|�d�}|d}|d?d@}|d?d@}|d?d@}|d?d@}|d@}|d}|d?d@}	|d	@}
||||||	|
f|_dS)
Nr'rrUrrVrWr�rZ)�recv_strictrz)r=rz�b1r3r4r5r6r7�b2�has_mask�length_bitsrrr�recv_header$s
zframe_buffer.recv_headercCs|jsdS|jtjS)NF)rzr�_HEADER_MASK_INDEXrKrrrr�2szframe_buffer.has_maskcCr{r)rerKrrr�has_received_length7r}z frame_buffer.has_received_lengthcCsn|jtj}|d@}|dkr|�d�}t�d|�d|_dS|dkr2|�d�}t�d|�d|_dS||_dS)NrZr1r'rYrr(r[)rzr�_HEADER_LENGTH_INDEXrrb�unpackre)r=�bitsr��vrrr�recv_length:s


zframe_buffer.recv_lengthcCr{r)r8rKrrr�has_received_maskFr}zframe_buffer.has_received_maskcCs"|��r|�d�|_dSd|_dS)Nrr2)r�rr8rKrrr�	recv_maskIs"zframe_buffer.recv_maskc	Cs�|j�R|��r|��|j\}}}}}}}|��r|��|j}|��r)|��|j	}	|�
|�}
|r9t�	|	|
�}
|��t|||||||
�}|�
|j�Wd�|S1sXwY|Sr)rxr|r�rzr�r�rer�r�r8rrrwrHrE)r=r3r4r5r6r7r��_rer8�payload�framerrr�
recv_frameLs(

��zframe_buffer.recv_framecCs�|ttt|j��}|dkr&|�td|��}|j�|�|t|�8}|dksd�|j�}|dkr5g|_|S||d�g|_|d|�S)Nri@�)�sum�maprrvru�min�append�join)r=�bufsize�shortage�bytes_�unifiedrrrrks�zframe_buffer.recv_strictN)rlrmrnr�r�r>rwr|r�r�r�r�r�r�r�rrrrrrs	rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rcCs||_||_d|_d|_dSr)�fire_cont_framerE�	cont_data�recving_frames)r=r�rErrrr>�s
zcontinuous_frame.__init__cCsB|js
|jtjkr
td��|jr|jtjtjfvrtd��dSdS)Nz
Illegal frame)r�r7rrpr@rNrq�r=r�rrrrH�s�zcontinuous_frame.validatecCsX|jr|jd|j7<n|jtjtjfvr|j|_|j|jg|_|jr*d|_dSdS)Nr)r�r9r7rrNrqr�r3r�rrr�add�s
�zcontinuous_frame.addcCs|jp|jSr)r3r�r�rrr�is_fire�szcontinuous_frame.is_firecCsX|j}d|_|d|_|js&|dtjkr&|js&t|j�s&tdt|j���|d|gS)Nrrzcannot decode: )	r�r9r�rrNrEr�WebSocketPayloadException�repr)r=r�r9rrr�extract�s
$�zcontinuous_frame.extractN)rlrmrnr>rHr�r�r�rrrrr�sr)"rorkr:rb�sys�_exceptions�_utilsr�	threadingr�wsaccel.xormaskrr
�ImportError�	byteorderr�__all__rrrrrrr r!r"r#r$r%r&rIrrrrrrr�<module>sZ��-s