o �J�h�3�@s�UddlmZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z m Z ddlmZmZzddlmZWneyNddlmZYnwgd�ZGd d �d ej�ZejZejZejZejZej Z!ej"Z#eeefZ$ee!e#fZ%Gd d �d ej�Z&e&j'd e&j(de&j)de&j*de&j+de&j,de&j-de&j.de&j/de&j0de&j1de&j2de&j3de&j4de&j5diZ6de7d<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+hZ9e:e;e<fZ=ej>Gdd�d��Z?ej>Gd d!�d!��Z@dd"lAmBZBdS)#�)� annotationsN)� Generator�Sequence)�Callable�Union�)� PayloadTooBig� ProtocolError)� apply_mask) �Opcode�OP_CONT�OP_TEXT� OP_BINARY�OP_CLOSE�OP_PING�OP_PONG� DATA_OPCODES� CTRL_OPCODES� CloseCode�Frame�Closec@s$eZdZdZd\ZZZd\ZZZ dS)r z#Opcode values for WebSocket frames.)rr�)�� � N) �__name__� __module__� __qualname__�__doc__�CONT�TEXT�BINARY�CLOSE�PING�PONG�r%r%�OC:\pinokio\api\whisper-webui.git\app\env\lib\site-packages\websockets\frames.pyr %s r c@sLeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdS)rz-Close code values for WebSocket close frames.i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�N)rrrr�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&r7s"r�OKz going awayzprotocol errorzunsupported datazno status received [internal]zabnormal closure [internal]zinvalid frame payload datazpolicy violationzmessage too bigzmandatory extensionzinternal errorzservice restartztry again laterz bad gatewayz TLS handshake failure [internal]zdict[int, str]�CLOSE_CODE_EXPLANATIONSc@s�eZdZUdZded<ded<dZded<d Zded <d Zded <d Zded <e e j � d d��Z d&dd�Zeddd�d'dd��Zdd�d(d!d"�Zd)d$d%�ZdS)*raN 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 �opcodez#Union[bytes, bytearray, memoryview]�dataT�bool�finF�rsv1�rsv2�rsv3ZWEBSOCKETS_MAX_LOG_SIZEZ75�return�strc Cs�d}t|j��dt|j�dkrdnd��}|jrdnd}|jtur+tt|j����}n�|jturc|j}t|�|j dkrX|j ddd}d� |dd |�d || d�g�}d � d d �|D��}n`|jt urqt t �|j��}nR|jr�z tt|j����}d}WnAttfy�|j}t|�|j dkr�|j ddd}d� |dd |�d || d�g�}d � dd �|D��}d}Ynwd}t|�|j kr�|j dd}|dd |�d|| d�}d� td|||g��}|jj�d |�d|�d�S)zE Return a human-readable representation of a frame. Nz byter��s� continued��rs� cs��|]}|d�VqdS��02xNr%��.0�byter%r%r&� <genexpr>���z Frame.__str__.<locals>.<genexpr>�textcsrGrHr%rJr%r%r&rM�rN�binaryz''z...z, z [�])�lenr9r;r8r �repr�bytes�decoder� MAX_LOG_SIZE�joinrr@r�parse�UnicodeDecodeError�AttributeError�filter�name)�selfZcoding�lengthZ non_finalr9rP�cut�metadatar%r%r&�__str__�s>&  & &�"z Frame.__str__N)�max_size� extensions� read_exact�-Callable[[int], Generator[None, None, bytes]]�maskrb� int | Nonerc�%Sequence[extensions.Extension] | None�Generator[None, None, Frame]c cs��|d�EdH}t�d|�\}}|d@rdnd}|d@rdnd} |d@r&dnd} |d @r.dnd} zt|d @�} WntyI} ztd �| �d} ~ ww|d@rPdnd|krXtd ��|d @}|dkro|d�EdH}t�d|�\}n|d kr�|d�EdH}t�d|�\}|dur�||kr�t||��|r�|d�EdH}||�EdH}|r�t||�}|| ||| | | �}|dur�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. rN�!BB�TF�@� ��zinvalid opcodezincorrect masking��~�!Hrz!Q�)rb) �struct�unpackr � ValueErrorr rr �reversedrU�check)�clsrdrfrbrcr9�head1�head2r;r<r=r>r8�excr^� mask_bytes�frame� extensionr%r%r&rX�sH� ��   z Frame.parse�rcrTc Cs&|��|dur g}|D]}|�|�}q t��}|jrdnd|jr#dndB|jr*dndB|jr1dndB|jB}|r;dnd}t |j �}|dkrS|� t � d|||B��n|d kre|� t � d ||dB|��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. Nrkrrlrmrnrqrjiz!BBHz!BBQrprs)rx�encode�io�BytesIOr;r<r=r>r8rRr9�writert�pack�secrets� token_bytesr �getvalue) r]rfrcr�outputrzr{r^r}r9r%r%r&� serializes>   � � ���     zFrame.serialize�NonecCsP|js |js |jr td��|jtvr$t|j�dkrtd��|js&td��dSdS)z� Check that reserved bits and opcode have acceptable values. Raises: ProtocolError: If a reserved bit or the opcode is invalid. zreserved bits must be 0�}zcontrol frame too longzfragmented control frameN) r<r=r>r r8rrRr9r;�r]r%r%r&rxOs �z Frame.check�r?r@) rdrerfr:rbrgrcrhr?ri)rfr:rcrhr?rT�r?r�)rrrr�__annotations__r;r<r=r>�int�os�environ�getrVra� classmethodrXr�rxr%r%r%r&r|s"      2�M�;rc@sNeZdZUdZded<ded<ddd�Zedd d ��Zdd d�Zddd�Z dS)rz Code and reason for WebSocket close frames. Attributes: code: Close code. reason: Close reason. r��coder@�reasonr?cCszd|jkr dkrnnd}nd|jkrdkr nnd}nt�|jd�}|j�d|�d�}|jr;|�d |j��}|S) zU Return a human-readable representation of a close code and reason. � i�� registered�z private use�unknownz (�)rF)r�r7r�r�)r]Z explanation�resultr%r%r&raosz Close.__str__r9rTcCsht|�dkr$t�d|dd��\}|dd���}|||�}|��|St|�dkr0|tjd�Std��)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. rrrNrrAzclose frame too short)rRrtrurUrxrr+r )ryr9r�r��closer%r%r&rX�s    z Close.parsecCs |��t�d|j�|j��S)z: Serialize the payload of a close frame. rr)rxrtr�r�r�r�r�r%r%r&r��szClose.serializer�cCs8|jtvsd|jkrdkstd��td��dSdS)z� Check that the close code has a valid value for a close frame. Raises: ProtocolError: If the close code is invalid. r�r�zinvalid status codeN)r��EXTERNAL_CLOSE_CODESr r�r%r%r&rx�s ��z Close.checkNr�)r9rTr?r)r?rTr�) rrrrr�rar�rXr�rxr%r%r%r&ras     rr�)C� __future__r� dataclasses�enumr�r�r�rt�collections.abcrr�typingrr� exceptionsrr Zspeedupsr � ImportError�utils�__all__�IntEnumr rr r r r!rr"rr#rr$rrrrr'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r7r�r��OK_CLOSE_CODESrT� bytearray� memoryviewZ BytesLike� dataclassrrrArcr%r%r%r&�<module>s� �   ��� eL
Memory