o
    :ÊÆh†  ã                   @  sÄ   d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZ zddlmZ W n eyC   ddlmZ Y nw G dd	„ d	eƒZdd
lmZmZmZ ddd„Zddd„ZdS )é    )ÚannotationsN)ÚAnyÚ	AwaitableÚCallableÚ
NamedTupleÚOptionalÚSequenceÚTupleé   )Ú
extensionsÚframes)ÚPayloadTooBigÚProtocolError)Ú
apply_maskc                   @  s’   e Zd ZU ded< ded< ded< dZded< dZded	< dZded
< ed%dd„ƒZd&dd„Z	d'dd„Z
edddœd(dd„ƒZdd œd)d#d$„ZdS )*ÚFrameÚboolÚfinzframes.OpcodeÚopcodeÚbytesÚdataFÚrsv1Úrsv2Úrsv3Úreturnúframes.Framec                 C  s    t  | j| j| j| j| j| j¡S ©N)r   r   r   r   r   r   r   r   ©Úself© r   úf/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/websockets/legacy/framing.pyÚ	new_frame   s   úzFrame.new_frameÚstrc                 C  s
   t | jƒS r   )r!   r    r   r   r   r   Ú__str__#   ó   
zFrame.__str__ÚNonec                 C  s
   | j  ¡ S r   )r    Úcheckr   r   r   r   r%   &   r#   zFrame.checkN)Úmax_sizer   Úreaderú!Callable[[int], Awaitable[bytes]]Úmaskr&   úOptional[int]r   ú(Optional[Sequence[extensions.Extension]]c             
   Ã  sº  �|dƒI dH }t  d|¡\}}|d@ rdnd}|d@ rdnd}	|d@ r&dnd}
|d	@ r.dnd}z	t |d
@ ¡}W n tyJ } ztdƒ|‚d}~ww |d@ rQdnd|krYtdƒ‚|d@ }|dkrp|dƒI dH }t  d|¡\}n|dkr‚|dƒI dH }t  d|¡\}|dur•||kr•td|› d|› d�ƒ‚|rž|dƒI dH }||ƒI dH }|r¬t||ƒ}t ||||	|
|¡}|du r¼g }t	|ƒD ]	}|j
||d�}qÀ| ¡  | |j|j|j|j|j|jƒS )a@  
        Read a WebSocket frame.

        Args:
            reader: Coroutine that reads exactly the requested number of
                bytes, unless the end of file is reached.
            mask: Whether the frame should be masked i.e. whether the read
                happens on the server side.
            max_size: Maximum payload size in bytes.
            extensions: List of extensions, applied in reverse order.

        Raises:
            PayloadTooBig: If the frame exceeds ``max_size``.
            ProtocolError: If the frame contains incorrect values.

        r
   Nz!BBé€   TFé@   é    é   é   zinvalid opcodezincorrect maskingé   é~   z!Hé   z!Qzover size limit (z > z bytes)é   )r&   )ÚstructÚunpackr   ÚOpcodeÚ
ValueErrorr   r   r   r   ÚreversedÚdecoder%   r   r   r   r   r   r   )Úclsr'   r)   r&   r   r   Úhead1Úhead2r   r   r   r   r   ÚexcÚlengthÚ	mask_bitsr    Ú	extensionr   r   r   Úread)   sV   €
€ÿ
úz
Frame.read)r   ÚwriteúCallable[[bytes], Any]c                C  s   || j j||d�ƒ dS )a–  
        Write a WebSocket frame.

        Args:
            frame: Frame to write.
            write: Function that writes bytes.
            mask: Whether the frame should be masked i.e. whether the write
                happens on the client side.
            extensions: List of extensions, applied in order.

        Raises:
            ProtocolError: If the frame contains incorrect values.

        )r)   r   N)r    Ú	serialize)r   rC   r)   r   r   r   r   rC   x   s   zFrame.write)r   r   )r   r!   )r   r$   )
r'   r(   r)   r   r&   r*   r   r+   r   r   )rC   rD   r)   r   r   r+   r   r$   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   r   Úpropertyr    r"   r%   ÚclassmethodrB   rC   r   r   r   r   r      s"   
 


úSûr   )ÚCloseÚprepare_ctrlÚprepare_datar   r   r   úTuple[int, str]c                 C  s   t  | ¡}|j|jfS )zÕ
    Parse the payload from a close frame.

    Returns:
        Close code and reason.

    Raises:
        ProtocolError: If data is ill-formed.
        UnicodeDecodeError: If the reason isn't valid UTF-8.

    )rL   ÚparseÚcodeÚreason)r   Úcloser   r   r   Úparse_close›   s   
rT   rQ   ÚintrR   r!   c                 C  s   t | |ƒ ¡ S )z3
    Serialize the payload for a close frame.

    )rL   rE   )rQ   rR   r   r   r   Úserialize_close«   s   rV   )r   r   r   rO   )rQ   rU   rR   r!   r   r   )Ú
__future__r   r5   Útypingr   r   r   r   r   r   r	   Ú r   r   Ú
exceptionsr   r   Úspeedupsr   ÚImportErrorÚutilsr   rL   rM   Úencode_datarN   rT   rV   r   r   r   r   Ú<module>   s    $ÿ 
