
    tni                        d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	 ddl
mZmZ ddlmZmZ ddlmZmZ 	 dd	lmZ n# e$ r	 dd	lmZ Y nw xY w G d
 de	          ZddZddZeZddlmZ ddZddZdS )    )annotationsN)	AwaitableSequence)AnyCallable
NamedTuple   )
extensionsframes)PayloadTooBigProtocolError)	BytesLikeDataLike)
apply_maskc                      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            Zd!dZ	d"dZ
edddd#d            Zddd$dZdS )%Frameboolfinzframes.Opcodeopcoder   dataFrsv1rsv2rsv3returnframes.Framec                p    t          j        | j        | j        | j        | j        | j        | j                  S N)r   r   r   r   r   r   r   r   selfs    V/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/websockets/legacy/framing.py	new_framezFrame.new_frame   s4    |KIHIII
 
 	
    strc                *    t          | j                  S r   )r#   r!   r   s    r    __str__zFrame.__str__%   s    4>"""r"   Nonec                4    | j                                         S r   )r!   checkr   s    r    r(   zFrame.check(   s    ~##%%%r"   N)max_sizer
   reader!Callable[[int], Awaitable[bytes]]maskr)   
int | Noner
   %Sequence[extensions.Extension] | Nonec                 K    |d           d{V }t          j        d|          \  }}|dz  rdnd}|dz  rdnd}	|dz  rdnd}
|d	z  rdnd}	 t          j        |d
z            }n"# t          $ r}t          d          |d}~ww xY w|dz  rdnd|k    rt          d          |dz  }|dk    r) |d           d{V }t          j        d|          \  }n.|dk    r( |d           d{V }t          j        d|          \  }|||k    rt          ||          |r |d           d{V } ||           d{V }|rt          ||          }t          j        ||||	|
|          }|g }t          |          D ]}|
                    ||          }|                                  | |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!Q   )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!   	extensions                     r    readz
Frame.read+   s     6 VAYY}UD11u j(3ddez)4ttuz)4ttuz)4ttu	;]5:#566FF 	; 	; 	; 011s:	; J&1DDEd:: 3444#S==??????DdD11IVVs]]??????DdD11IVFX$5$5111 	($fQiiI VF^^###### 	/dI..DLsD$EE	J!*-- 	G 	GI!((X(FFIIsMNNNN
 
 	
s   A) )
B3BB)r
   writeCallable[[bytes], Any]c               P     || j                             ||                     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   rG   r,   r
   s       r    rG   zFrame.writez   s/    0 	dn&&DZ&HHIIIIIr"   )r   r   )r   r#   )r   r&   )
r*   r+   r,   r   r)   r-   r
   r.   r   r   )rG   rH   r,   r   r
   r.   r   r&   )__name__
__module____qualname____annotations__r   r   r   propertyr!   r%   r(   classmethodrF   rG    r"   r    r   r      s        IIIOOODDD
 
 
 X
# # # #& & & &   $<@L
 L
 L
 L
 L
 [L
f =AJ J J J J J J Jr"   r   r   r   r   tuple[int, BytesLike]c                    t          | t                    r%t          j        j        |                                 fS t          | t                    rt          j        j        | fS t          d          )a  
    Convert a string or byte-like object to an opcode and a bytes-like object.

    This function is designed for data frames.

    If ``data`` is a :class:`str`, return ``OP_TEXT`` and a :class:`bytes`
    object encoding ``data`` in UTF-8.

    If ``data`` is a bytes-like object, return ``OP_BINARY`` and a bytes-like
    object.

    Raises:
        TypeError: If ``data`` doesn't have a supported type.

    data must be str or bytes-like)	
isinstancer#   r   r;   TEXTencoder   BINARY	TypeErrorr   s    r    prepare_datar[      s_      $ :}!4;;==00	D)	$	$ :}#T))8999r"   bytesc                    t          | t                    r|                                 S t          | t                    rt	          |           S t          d          )ai  
    Convert a string or byte-like object to bytes.

    This function is designed for ping and pong frames.

    If ``data`` is a :class:`str`, return a :class:`bytes` object encoding
    ``data`` in UTF-8.

    If ``data`` is a bytes-like object, return a :class:`bytes` object.

    Raises:
        TypeError: If ``data`` doesn't have a supported type.

    rT   )rU   r#   rW   r   r\   rY   rZ   s    r    prepare_ctrlr^      sQ     $ :{{}}	D)	$	$ :T{{8999r"   )Closetuple[int, str]c                F    t          j        |           }|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.

    )r_   parsecodereason)r   closes     r    parse_closerf      s"     KE:u|##r"   rc   intrd   r#   c                F    t          | |                                          S )z3
    Serialize the payload for a close frame.

    )r_   rJ   )rc   rd   s     r    serialize_closeri      s     
 v((***r"   )r   r   r   rR   )r   r   r   r\   )r   r\   r   r`   )rc   rg   rd   r#   r   r\   )
__future__r   r9   collections.abcr   r   typingr   r   r    r
   r   
exceptionsr   r   r   r   speedupsr   ImportErrorutilsr   r[   r^   encode_datar_   rf   ri   rQ   r"   r    <module>rs      s   " " " " " "  / / / / / / / / , , , , , , , , , , ! ! ! ! ! ! ! ! 5 5 5 5 5 5 5 5 ( ( ( ( ( ( ( (#%%%%%%% # # #""""""""#@J @J @J @J @JJ @J @J @JF: : : :0: : : :0       $ $ $ $ + + + + + +s   = A
A