o
    Ð­jY2  ã                   @  sì  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ ddlmZmZ ddlmZ zddlmZ W n eyR   ddlmZ Y nw g d	¢ZG d
d„ dejƒZejZejZejZejZej Z!ej"Z#eeefZ$ee!e#fZ%G dd„ dejƒZ&e&j'de&j(de&j)de&j*de&j+de&j,de&j-de&j.de&j/de&j0de&j1de&j2de&j3de&j4de&j5diZ6de7d< e&j'e&j(e&j)e&j*e&j-e&j.e&j/e&j0e&j1e&j2e&j3e&j4hZ8e&j'e&j(e&j+hZ9ej:G dd „ d ƒƒZ;ej:G d!d"„ d"ƒƒZ<dd#l=m>Z> dS )$é    )ÚannotationsN)Ú	GeneratorÚSequence)ÚCallableé   )ÚPayloadTooBigÚProtocolError)Ú	BytesLike)Ú
apply_mask)ÚOpcodeÚOP_CONTÚOP_TEXTÚ	OP_BINARYÚOP_CLOSEÚOP_PINGÚOP_PONGÚDATA_OPCODESÚCTRL_OPCODESÚ	CloseCodeÚFrameÚClosec                   @  s$   e Zd ZdZd\ZZZd\ZZZ	dS )r   z#Opcode values for WebSocket frames.)r   r   é   )é   é	   é
   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCONTÚTEXTÚBINARYÚCLOSEÚPINGÚPONG© r%   r%   úN/var/www/html/CropPilot/venv/lib/python3.10/site-packages/websockets/frames.pyr   &   s    
r   c                   @  sL   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdS )r   z-Close code values for WebSocket close frames.iè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  iö  i÷  N)r   r   r   r   ÚNORMAL_CLOSUREÚ
GOING_AWAYÚPROTOCOL_ERRORÚUNSUPPORTED_DATAÚNO_STATUS_RCVDÚABNORMAL_CLOSUREÚINVALID_DATAÚPOLICY_VIOLATIONÚMESSAGE_TOO_BIGÚMANDATORY_EXTENSIONÚINTERNAL_ERRORÚSERVICE_RESTARTÚTRY_AGAIN_LATERÚBAD_GATEWAYÚTLS_HANDSHAKEr%   r%   r%   r&   r   8   s"    r   ÚOKz
going awayzprotocol errorzunsupported datazno status received [internal]zabnormal closure [internal]zinvalid frame payload datazpolicy violationzmessage too bigzmandatory extensionzinternal errorzservice restartztry again laterzbad gatewayz TLS handshake failure [internal]zdict[int, str]ÚCLOSE_CODE_EXPLANATIONSc                   @  sž   e Zd ZU dZded< ded< dZded< d	Zded
< d	Zded< d	Zded< e	e
j dd¡ƒZd&dd„Zedddœd'dd„ƒZddœd(d!d"„Zd)d$d%„ZdS )*r   aN  
    WebSocket frame.

    Attributes:
        opcode: Opcode.
        data: Payload data.
        fin: FIN bit.
        rsv1: RSV1 bit.
        rsv2: RSV2 bit.
        rsv3: RSV3 bit.

    Only these fields are needed. The MASK bit, payload length and masking-key
    are handled on the fly when parsing and serializing frames.

    r   Úopcoder	   ÚdataTÚboolÚfinFÚrsv1Úrsv2Úrsv3ÚWEBSOCKETS_MAX_LOG_SIZEÚ75ÚreturnÚstrc              
   C  sô  d}t | jƒ› dt | jƒdkrdnd› �}| jrdnd}| jtu r+tt| jƒ ¡ ƒ}n˜| jtu rc| j}t |ƒ| j	d krX| j	d d d }d 
|dd	| … d
|| d… g¡}d 
dd„ |D ƒ¡}n`| jtu rqtt | j¡ƒ}nR| jrÁztt| jƒ ¡ ƒ}d}W nA ttfyÀ   | j}t |ƒ| j	d kr²| j	d d d }d 
|dd	| … d
|| d… g¡}d 
dd„ |D ƒ¡}d}Y nw d}t |ƒ| j	krâ| j	d d }|dd	| … d || d…  }d 
td|||gƒ¡}| jj› d|› d|› d�S )zE
        Return a human-readable representation of a frame.

        Nz byter   Ú ÚsÚ	continuedé   ó    r   s     ú c                 s  ó   � | ]}|d ›V  qdS ©Ú02xNr%   ©Ú.0Úbyter%   r%   r&   Ú	<genexpr>ª   ó   € z Frame.__str__.<locals>.<genexpr>Útextc                 s  rI   rJ   r%   rL   r%   r%   r&   rO   »   rP   Úbinaryz''z...z, z [ú])Úlenr9   r;   r8   r   ÚreprÚbytesÚdecoder   ÚMAX_LOG_SIZEÚjoinr   rB   r   ÚparseÚUnicodeDecodeErrorÚAttributeErrorÚfilterÚname)ÚselfÚcodingÚlengthÚ	non_finalr9   rR   ÚcutÚmetadatar%   r%   r&   Ú__str__–   s>   &

&
&ú"zFrame.__str__N)Úmax_sizeÚ
extensionsÚ
read_exactú9Callable[[int], Generator[None, None, bytes | bytearray]]Úmaskrf   ú
int | Nonerg   ú%Sequence[extensions.Extension] | NoneúGenerator[None, None, Frame]c             
   c  s�  � |dƒE 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yI } ztdƒ|‚d}~ww |d@ rPdnd|krXtdƒ‚|d@ }|dkro|dƒE dH }t  d|¡\}n|dkr�|dƒE dH }t  d|¡\}|durŽ||krŽt||ƒ‚|r—|dƒE dH }||ƒE dH }|r¥t||ƒ}| ||||	|
|ƒ}|du r´g }t|ƒD ]	}|j||d�}q¸| 	¡  |S )aá  
        Parse a WebSocket frame.

        This is a generator-based coroutine.

        Args:
            read_exact: Generator-based coroutine that reads the requested
                bytes or raises an exception if there isn't enough data.
            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:
            EOFError: If the connection is closed without a full WebSocket frame.
            PayloadTooBig: If the frame's payload size exceeds ``max_size``.
            ProtocolError: If the frame contains incorrect values.

        r   Nú!BBé€   TFé@   é    é   é   zinvalid opcodezincorrect maskingé   é~   ú!Hr   z!Qé   )rf   )
ÚstructÚunpackr   Ú
ValueErrorr   r   r
   ÚreversedrW   Úcheck)Úclsrh   rj   rf   rg   r9   Úhead1Úhead2r;   r<   r=   r>   r8   Úexcra   Ú
mask_bytesÚframeÚ	extensionr%   r%   r&   rZ   È   sH   €
€ÿ

zFrame.parse©rg   rV   c          
      C  s&  |   ¡  |du r
g }|D ]}| | ¡} qt ¡ }| jrdnd| jr#dndB | jr*dndB | jr1dndB | jB }|r;dnd}t	| j
ƒ}|dk rS| t d|||B ¡¡ n|d	k re| t d
||dB |¡¡ n| t d||dB |¡¡ |r~t d¡}| |¡ |r‡t| j
|ƒ}	n| j
}	| |	¡ | ¡ S )aH  
        Serialize a WebSocket frame.

        Args:
            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.

        Nro   r   rp   rq   rr   ru   rn   i   z!BBHz!BBQrt   rw   )r|   ÚencodeÚioÚBytesIOr;   r<   r=   r>   r8   rT   r9   Úwriterx   ÚpackÚsecretsÚtoken_bytesr
   Úgetvalue)
r_   rj   rg   rƒ   Úoutputr~   r   ra   r�   r9   r%   r%   r&   Ú	serialize  s>   ÿþýüÿ



zFrame.serializeÚNonec                 C  sP   | j s	| js	| jrtdƒ‚| jtv r$t| jƒdkrtdƒ‚| js&tdƒ‚dS dS )z¦
        Check that reserved bits and opcode have acceptable values.

        Raises:
            ProtocolError: If a reserved bit or the opcode is invalid.

        zreserved bits must be 0é}   zcontrol frame too longzfragmented control frameN)	r<   r=   r>   r   r8   r   rT   r9   r;   ©r_   r%   r%   r&   r|   N  s   
üzFrame.check©rA   rB   )
rh   ri   rj   r:   rf   rk   rg   rl   rA   rm   )rj   r:   rg   rl   rA   rV   ©rA   r�   )r   r   r   r   Ú__annotations__r;   r<   r=   r>   ÚintÚosÚenvironÚgetrX   re   ÚclassmethodrZ   rŽ   r|   r%   r%   r%   r&   r   z   s"   
 
2úMü<r   c                   @  sN   e Zd ZU dZded< ded< ddd„Zeddd„ƒZddd„Zddd„Z	dS )r   z
    Code and reason for WebSocket close frames.

    Attributes:
        code: Close code.
        reason: Close reason.

    zCloseCode | intÚcoderB   ÚreasonrA   c                 C  sz   d| j   krdk rn nd}nd| j   krdk r n nd}nt | j d¡}| j › d|› d�}| jr;|› d	| j› �}|S )
zU
        Return a human-readable representation of a close code and reason.

        é¸  i   Ú
registeredéˆ  zprivate useÚunknownz (ú)rH   )rš   r7   r˜   r›   )r_   ÚexplanationÚresultr%   r%   r&   re   n  s   zClose.__str__r9   r	   c                 C  sz   t |tƒr	tdƒ‚t|ƒdkr-t d|dd… ¡\}|dd…  ¡ }| ||ƒ}| ¡  |S t|ƒdkr9| tj	dƒS t
dƒ‚)z÷
        Parse the payload of a close frame.

        Args:
            data: Payload of the close frame.

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

        z.only compressed outgoing frames use memoryviewr   rv   Nr   rC   zclose frame too short)Ú
isinstanceÚ
memoryviewÚAssertionErrorrT   rx   ry   rW   r|   r   r+   r   )r}   r9   rš   r›   Úcloser%   r%   r&   rZ   €  s   

zClose.parserV   c                 C  s    |   ¡  t d| j¡| j ¡  S )z:
        Serialize the payload of a close frame.

        rv   )r|   rx   r‰   rš   r›   r…   r‘   r%   r%   r&   rŽ   š  s   zClose.serializer�   c                 C  s8   | j tv sd| j   krdk stdƒ‚ tdƒ‚dS dS )z›
        Check that the close code has a valid value for a close frame.

        Raises:
            ProtocolError: If the close code is invalid.

        rœ   rž   zinvalid status codeN)rš   ÚEXTERNAL_CLOSE_CODESr   r‘   r%   r%   r&   r|   ¢  s
   ÿÿzClose.checkNr’   )r9   r	   rA   r   )rA   rV   r“   )
r   r   r   r   r”   re   r™   rZ   rŽ   r|   r%   r%   r%   r&   r   `  s   
 	

r   r„   )?Ú
__future__r   ÚdataclassesÚenumr†   r–   rŠ   rx   Úcollections.abcr   r   Útypingr   Ú
exceptionsr   r   r	   Úspeedupsr
   ÚImportErrorÚutilsÚ__all__ÚIntEnumr   r   r   r    r   r!   r   r"   r   r#   r   r$   r   r   r   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r7   r”   r§   ÚOK_CLOSE_CODESÚ	dataclassr   r   rC   rg   r%   r%   r%   r&   Ú<module>   s„    ÿ

ñôý fN