� <��g�1��|�UddlmZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z m Z ddlmZmZ ddlmZn#e$r ddlmZYnwxYwgd�ZGd �d ej��ZejZejZejZejZej Z!ej"Z#eeefZ$ee!e#fZ%Gd �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>Gd�d����Z?ej>Gd �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�*�eZdZdZd\ZZZd\ZZZ dS)r z#Opcode values for WebSocket frames.)rr�)�� � N) �__name__� __module__� __qualname__�__doc__�CONT�TEXT�BINARY�CLOSE�PING�PONG���a/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/websockets/frames.pyr r %s,������-�-�)��D�$��(��E�4���r(r c�N�eZdZdZdZdZdZdZdZdZ 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)rr7sc������7�7��N��J��N����N����L����O����N��O��O��K��M�M�Mr(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���eZdZUdZded<ded<dZded<d Zded <d Zded <d Zded <e e j � d d����Z d"d�Zeddd�d#d���Zdd�d$d�Zd%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�rsv3�WEBSOCKETS_MAX_LOG_SIZE�75�return�strc�<�d}t|j���dt|j��dkrdnd��}|jrdnd}|jtur5t t |j�������}�n�|jtur|j}t|��|j dzkr<|j dzdz dz}d� |dd |z�d || d�g��}d � d �|D����}�n|jtur-tt�|j����}n�|jr� t t |j�������}d }n�#tt f$r�|j}t|��|j dzkr<|j dzdz dz}d� |dd |z�d || d�g��}d � d�|D����}d}YnwxYwd}t|��|j kr)|j dzdz }|dd |z�dz|| d�z}d� t#d|||g����}|jj�d |�d|�d�S)zE Return a human-readable representation of a frame. Nz byter��s� continued�r(rs� c3�K�|]}|d�V�� dS��02xNr'��.0�bytes r)� <genexpr>z Frame.__str__.<locals>.<genexpr>�s&����=�=�d�t�M�M�=�=�=�=�=�=r(�textc3�K�|]}|d�V�� dSrOr'rQs r)rTz Frame.__str__.<locals>.<genexpr>�s&����A�A�$�4� � �A�A�A�A�A�Ar(�binaryz''z...z, z [�])�lenr>r@r=r�repr�bytes�decoder� MAX_LOG_SIZE�joinrrGr�parse�UnicodeDecodeError�AttributeError�filter�name)�self�coding�length� non_finalr>rW�cut�metadatas r)�__str__z Frame.__str__�s��� ���� �N�N�M�M�s�4�9�~�~��/B�/B����M�M���(�3�B�B� � � �;�'� !� !���d�i�(�(�/�/�1�1�2�2�D�D� �[�I� %� %��Y�F��6�{�{�T�.�!�3�3�3��(�A�-��1�a�7�����6�)�A��G�)�#4�k�6�3�$�%�%�=�"Q�R�R���8�8�=�=�f�=�=�=�=�=�D�D� �[�H� $� $��u�{�{�4�9�-�-�.�.�D�D� �Y� � "��E�$�)�,�,�3�3�5�5�6�6������&��7� "� "� "�����v�;�;��!2�a�!7�7�7��,��1�A�5�!�;�C� �X�X�v�i��C��i�'8�+�v�s�d�e�e�}�&U�V�V�F��x�x�A�A�&�A�A�A�A�A��!����  "�����D� �t�9�9�t�(� (� (��#�q�(�1�,�C�� �!�c�'� �?�U�*�T�3�$�%�%�[�8�D��9�9�V�D�6�6�9�*E�F�F�G�G���+�"�8�8�T�8�8�X�8�8�8�8s�5F � BH�HN)�max_size� extensions� read_exact�-Callable[[int], Generator[None, None, bytes]]�maskrk� int | Nonerl�%Sequence[extensions.Extension] | None�Generator[None, None, Frame]c#�JK�|d��Ed{V��}tjd|��\}}|dzrdnd}|dzrdnd} |dzrdnd} |d zrdnd} t|d z��} n"#t$r} t d ��| �d} ~ wwxYw|dzrdnd|krt d ���|d z}|dkr)|d��Ed{V��}tjd|��\}n.|d kr(|d��Ed{V��}tjd|��\}|�||krt ||���|r|d��Ed{V��}||��Ed{V��}|rt ||��}|| ||| | | ��}|�g}t|��D]}|�||���}�|� ��|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�)rk) �struct�unpackr � ValueErrorr r r �reversedr\�check)�clsrmrorkrlr>�head1�head2r@rArBrCr=�excrf� mask_bytes�frame� extensions r)r_z Frame.parse�sg����:%�*�Q�-�-�'�'�'�'�'�'���}�U�D�1�1� ��u��j�(�3�d�d�e���z�)�4�t�t�u���z�)�4�t�t�u���z�)�4�t�t�u�� ;��E�J�.�/�/�F�F��� ;� ;� ;�� 0�1�1�s� :����� ;�����J�&� 1�D�D�E�d� :� :�� 3�4�4� 4���#�� �S�=�=�(�j��m�m�+�+�+�+�+�+�D�� �d�D�1�1�I�V�V� �s�]�]�(�j��m�m�+�+�+�+�+�+�D�� �d�D�1�1�I�V� � �F�X�$5�$5����1�1� 1� � 2�$.�J�q�M�M�1�1�1�1�1�1�J�%�*�V�,�,�,�,�,�,�,�,�� � 0��d�J�/�/�D���F�D�#�t�T�4�8�8�� � ��J�!�*�-�-� ?� ?�I��$�$�U�X�$�>�>�E�E� � � � � � �� s�A$�$ B�.A>�>B�rlr[c�<�|���|�g}|D]}|�|��}�tj��}|jrdnd|jrdndz|jrdndz|jrdndz|jz}|rdnd}t|j ��}|dkr-|� tj d|||z����na|d kr.|� tj d ||dz|����n-|� tj d ||d z|����|r)tjd ��}|� |��|rt!|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. Nrurrvrwrxr{rtiz!BBHz!BBQrzr})r��encode�io�BytesIOr@rArBrCr=rYr>�writer~�pack�secrets� token_bytesr �getvalue) rdrorlr��outputr�r�rfr�r>s r)� serializezFrame.serializes���$ � � � � � � � ��J�#� *� *�I��#�#�D�)�)�D�D������ �8� *�Z�Z��!�Y�-�z�z�A� /�!�Y�-�z�z�A� /�"�Y�-�z�z�A� /��k�  � �#�)� � ����T�Y���� �C�<�<� �L�L���U�E�5�6�>�B�B� C� C� C� C� �e�^�^� �L�L���V�U�E�C�K��H�H� I� I� I� I� �L�L���V�U�E�C�K��H�H� I� I� I� � %� �,�Q�/�/�J� �L�L�� $� $� $� � ��d�i��4�4�D�D��9�D�� � �T������� � � r(�Nonec���|js|js|jrtd���|jt vr=t |j��dkrtd���|jstd���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) rArBrCr r=rrYr>r@�rds r)r�z Frame.checkOs��� �9� ;�� � ;�T�Y� ;�� 9�:�:� :� �;�,� &� &��4�9�~�~��#�#�#�$<�=�=�=��8� @�#�$>�?�?�?� '� &� @� @r(�rFrG) rmrnror?rkrprlrqrFrr)ror?rlrqrFr[�rFr�)rrrr �__annotations__r@rArBrC�int�os�environ�getr]rj� classmethodr_r�r�r'r(r)rr|s*��������� �N�N�N�-�-�-�-��C������D������D������D������3�r�z�~�~�&?��F�F�G�G�L�09�09�09�09�d� $�<@� G�G�G�G�G��[�G�Z=A� 9!�9!�9!�9!�9!�9!�v@�@�@�@�@�@r(rc�X�eZdZUdZded<ded<dd�Zedd ���Zdd �Zdd �Z dS)rz Code and reason for WebSocket close frames. Attributes: code: Close code. reason: Close reason. r��coderG�reasonrFc���d|jcxkrdkrnnd}n8d|jcxkrdkrnnd}n t�|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 (�)rM)r�r;r�r�)rd� explanation�results r)rjz Close.__str__os��� �4�9� #� #� #� #�t� #� #� #� #� #�&�K�K� �T�Y� %� %� %� %�� %� %� %� %� %�'�K�K�1�5�5�d�i��K�K�K��I�/�/��/�/�/�� �;� /��.�.���.�.�F�� r(r>r[c�R�t|��dkr]tjd|dd���\}|dd����}|||��}|���|St|��dkr|t jd��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. rr|NrrIzclose frame too short)rYr~rr\r�rr/r )r�r>r�r��closes r)r_z Close.parse�s��� �t�9�9��>�>��m�D�$�r��r�(�3�3�G�T��!�"�"�X�_�_�&�&�F��C��f�%�%�E� �K�K�M�M�M��L� ��Y�Y�!�^�^��3�y�/��4�4� 4�� 7�8�8� 8r(c��|���tjd|j��|j���zS)z: Serialize the payload of a close frame. r|)r�r~r�r�r�r�r�s r)r�zClose.serialize�s8�� � � � � � ��{�4���+�+�d�k�.@�.@�.B�.B�B�Br(r�c�l�|jtvs#d|jcxkrdksntd���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�s r)r�z Close.check�sO��� �1�1�1�T�T�Y�5M�5M�5M�5M��5M�5M�5M�5M�� 5�6�6� 6�2�1�5M�5Mr(Nr�)r>r[rFr)rFr[r�) rrrr r�rjr�r_r�r�r'r(r)rras�����������I�I�I��K�K�K�����$�9�9�9��[�9�.C�C�C�C� 7� 7� 7� 7� 7� 7r(rr�)C� __future__r� dataclasses�enumr�r�r�r~�collections.abcrr�typingrr� exceptionsr r �speedupsr � ImportError�utils�__all__�IntEnumr r!r r"rr#rr$rr%rr&rrrrr+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r;r�r��OK_CLOSE_CODESr[� bytearray� memoryview� BytesLike� dataclassrrrIrlr'r(r)�<module>r�sV��"�"�"�"�"�"�"����� � � � � � � � � � � � ����� � � � �/�/�/�/�/�/�/�/�"�"�"�"�"�"�"�"�4�4�4�4�4�4�4�4�"�$�$�$�$�$�$�$���"�"�"�!�!�!�!�!�!�!�!�"���� � � �� )�)�)�)�)�T�\�)�)�)� �+�� �+�� �M� � �<�� �+�� �+�����*� ���'�)� ������� ����.��d� ��,� ��.� �� 2� ��=� �� =� ��8� �� 2� ��0� �!�#8� ��.� ��0� ��0� ��=� ��?�+������,�� �� �� �� �� �� �� �!� �� �� �� �� ��"�� �� ���� �9�j� (� � ��a@�a@�a@�a@�a@�a@�a@���a@�H ��H7�H7�H7�H7�H7�H7�H7���H7�X�������s�A� A� A
Memory