
    g                        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 dd	l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)Data)
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opcodebytes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    e/var/www/html/nodeJS/PythonScripts/venv3.11/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    rH   r-   r
   s       r!   rH   zFrame.write{   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   )rH   rI   r-   r   r
   r/   r   r'   )__name__
__module____qualname____annotations__r   r   r   propertyr"   r&   r)   classmethodrG   rH    r#   r!   r   r      s        IIIKKK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, bytes]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#   r   c                    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.

    rU   )rV   r$   rX   r   r   rZ   r[   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_   rK   )rc   rd   s     r!   serialize_closeri      s     
 v((***r#   )r   r   r   rS   )r   r   r   r   )r   r   r   r`   )rc   rg   rd   r$   r   r   )
__future__r   r:   collections.abcr   r   typingr   r   r    r
   r   
exceptionsr   r   r   r   speedupsr   ImportErrorutilsr   r\   r^   encode_datar_   rf   ri   rR   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A