� L�g18� ��ddlZddlZddlZddlZddlmZddlmZmZm Z ddl m Z m Z ddl mZ ddlmZdejd ejd efd �Zn&#e$rejZdejd ejd efd �ZYnwxYwgd �ZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%eeeeeeee e!e"e#e$f Z&Gd�d��Z'Gd�d ��Z(Gd!�d"��Z)dS)#�N)�Lock)�Callable�Optional�Union�)�WebSocketPayloadException�WebSocketProtocolException)� validate_utf8)�XorMaskerSimple� mask_value� data_value�returnc�J�t|���|��}|S�N)r �process)r r � mask_results �_/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/websocket/_abnf.py�_maskr%s#��,�Z�8�8�@�@��L�L� ���c��t|��}t�|t��}t�||dzz|d|dz�zt��}||z �|t��S)N�)�len�int� from_bytes�native_byteorder�to_bytes)r r �datalen�int_data_value�int_mask_values rrr-ss���j�/�/����� �4D�E�E����� �'�Q�,� '�*�]�w��{�]�*C� C�EU� � ����/�9�9�'�CS�T�T�Tr)�ABNF�continuous_frame� frame_buffer� STATUS_NORMAL�STATUS_GOING_AWAY�STATUS_PROTOCOL_ERROR�STATUS_UNSUPPORTED_DATA_TYPE�STATUS_STATUS_NOT_AVAILABLE�STATUS_ABNORMAL_CLOSED�STATUS_INVALID_PAYLOAD�STATUS_POLICY_VIOLATION�STATUS_MESSAGE_TOO_BIG�STATUS_INVALID_EXTENSION�STATUS_UNEXPECTED_CONDITION�STATUS_BAD_GATEWAY�STATUS_TLS_HANDSHAKE_ERRORi�i�i�i�i�i�i�i�i�i�i�i�i�i�i�c��eZdZdZdZdZdZdZdZdZ eeeeee fZ eded ed ed ed e d iZ dZ dZ dZddddeddfdededededededeeedfddfd�Zd'deddfd�Zededefd ���Zdefd!�Zed(deeefdededdfd"���Zdefd#�Zd$eeefdefd%�Zed$eeefdeeefdefd&���ZdS))r z} ABNF frame class. See http://tools.ietf.org/html/rfc5234 and http://tools.ietf.org/html/rfc6455#section-5.2 rr��� � �cont�text�binary�close�ping�pong�~il��fin�rsv1�rsv2�rsv3�opcoder �dataNrc��||_||_||_||_||_||_|�d}||_tj|_ dS)zG Constructor for ABNF. Please check RFC for arguments. Nr<) r=r>r?r@rAr rB�os�urandom� get_mask_key)�selfr=r>r?r@rAr rBs r�__init__z ABNF.__init__�sO������� ��� ��� ��� �$��� �<��D��� ��J����rF�skip_utf8_validationc��|js|js|jrtd���|jt jvrtd|j���|jt jkr|jstd���|jt j kr�t|j ��}|sdS|dks|dkrtd���|dkr-|s+t|j dd���std���d t|j d ��zt|j d��z}|�|��std |���dSdS) z� Validate the ABNF frame. Parameters ---------- skip_utf8_validation: skip utf8 validation. zrsv is not implemented, yetzInvalid opcode %rzInvalid ping frame.Nrr;zInvalid close frame.r1�rzInvalid close opcode %r)r>r?r@r rAr �OPCODES� OPCODE_PINGr=� OPCODE_CLOSErrBr r�_is_valid_close_status)rGrI�l�codes r�validatez ABNF.validate�sa�� �9� L�� � L�T�Y� L�,�-J�K�K� K� �;�d�l� *� *�,�-@�$�+�N�N� N� �;�$�*� *� *�4�8� *�,�-B�C�C� C� �;�$�+� +� +��D�I���A�� ����A�v�v��c���0�1G�H�H�H��1�u�u�1�u�-�� �RS�RT�RT� �:V�:V�u�0�1G�H�H�H���T�Y�q�\�*�*�*�S���1��->�->�>�D��.�.�t�4�4� R�0�1J�D�Q�Q�Q� ,� +� R� RrrQc�4�|tvpd|cxkodkncS)Ni� i�)�VALID_CLOSE_STATUS)rQs rrOzABNF._is_valid_close_status�s/���)�)�B�d�d�.A�.A�.A�.A�T�.A�.A�.A�.A�Brc�6�d|j�d|j�d|j��S)Nzfin=z opcode=z data=)r=rArB�rGs r�__str__z ABNF.__str__�s&��F�d�h�F�F�� �F�F�4�9�F�F�Frc ��|tjkr*t|t��r|�d��}t|ddd|d|��S)a� Create frame to send text, binary and other data. Parameters ---------- data: str data to send. This is string value(byte array). If opcode is OPCODE_TEXT and this value is unicode, data value is converted into unicode string, automatically. opcode: int operation code. please see OPCODE_MAP. fin: int fin flag. if set to 0, create continue fragmentation. �utf-8rr)r � OPCODE_TEXT� isinstance�str�encode)rBrAr=s r� create_framezABNF.create_frame�sL�� �T�%� %� %�*�T�3�*?�*?� %��;�;�w�'�'�D��C��A�q�&�!�T�2�2�2rc��td�|j|j|j|jfD����rt d���|jtjvrt d���t|j ��}|tj krt d���t|jdz|jdzz|jdzz|jdzz|jz��� d ��}|tjkr1|t|jdz|z��� d ��z }n�|tjkrI|t|jdzd z��� d ��z }|t#jd |��z }nH|t|jdzd z��� d ��z }|t#jd |��z }|jsCt'|j t(��r|j � d��|_ ||j zS|�d��}||�|��zS)zR Format this object to string(byte array) to send data to server. c3�K�|]}|dvV�� dS))rrN�)�.0�xs r� <genexpr>zABNF.format.<locals>.<genexpr>�s&����T�T�1�q���T�T�T�T�T�Trz not 0 or 1zInvalid OPCODEzdata is too long���r�latin-1r;�!H��!QrY)�anyr=r>r?r@� ValueErrorrAr rLrrB� LENGTH_63�chrr]�LENGTH_7r � LENGTH_16�struct�packr[r\rF� _get_masked)rG�length� frame_header�mask_keys r�formatz ABNF.format�s)�� �T�T���4�9�d�i���(S�T�T�T� T� T� +��\�*�*� *� �;�d�l� *� *��-�.�.� .��T�Y���� �T�^� #� #��/�0�0� 0�� �H��M��i�1�n� ��i�1�n� ��i�1�n� ��k�  � � � �&�� � � � �D�M� !� !� �C���1� 4�v� =�>�>�E�E�i�P�P� P�L�L� �d�n� $� $� �C���1� 4�t� ;�<�<�C�C�I�N�N� N�L� �F�K��f�5�5� 5�L�L� �C���1� 4�t� ;�<�<�C�C�I�N�N� N�L� �F�K��f�5�5� 5�L��� ,��$�)�S�)�)� 6� �I�,�,�W�5�5�� ��$�)�+� +��$�$�Q�'�'���d�.�.�x�8�8�8�8rrwc��t�||j��}t|t��r|�d��}||zS)NrY)r �maskrBr[r\r])rGrw�ss rrtzABNF._get_maskedsD�� �I�I�h�� � *� *�� �h�� $� $� 0����w�/�/�H��!�|�rc��|�d}t|t��r|�d��}t|t��r|�d��}tt jd|��t jd|����S)z� Mask or unmask data. Just do xor for each byte Parameters ---------- mask_key: bytes or str 4 byte mask. data: bytes or str data to mask/unmask. Nr<rh�B)r[r\r]r�array)rwrBs rrzz ABNF.masks|�� �<��D� �h�� $� $� 2����y�1�1�H� �d�C� � � *��;�;�y�)�)�D��U�[��h�/�/���S�$�1G�1G�H�H�Hr)F)r)�__name__� __module__� __qualname__�__doc__� OPCODE_CONTrZ� OPCODE_BINARYrNrM� OPCODE_PONGrL� OPCODE_MAPrprqrnrrr\�bytesrH�boolrR� staticmethodrOrWr^rxrtrzrarrr r js~���������K��K��M��L��K��K� ������ �G� �V��V��x��g��V��V� �J��H��I��I�����!��(*�'�'� �'��'�� '� � '� � '��'��C���$�%�'� �'�'�'�'�0R�R�T�R�d�R�R�R�R�<�C�S�C�T�C�C�C��\�C�G��G�G�G�G��3�3�5����,�3�c�3��3�F�3�3�3��\�3�(!9��!9�!9�!9�!9�F�E�#�u�*�$5��%������I�u�S�%�Z�(�I��c�5�j�0A�I�e�I�I�I��\�I�I�Irr c��eZdZdZdZdeegefdeddfd�Zdd�Z defd �Z dd �Z de eeffd �Z defd �Zdd �Zdefd�Zdd�Zdefd�Zdedefd�ZdS)r"rgrf�recv_fnrIrNc�~�||_||_g|_|���t ��|_dSr)�recvrI� recv_buffer�clearr�lock)rGr�rIs rrHzframe_buffer.__init__+s9���� �$8��!�"$��� � � � � � ��F�F�� � � rc�0�d|_d|_d|_dSr)�headerrur rVs rr�zframe_buffer.clear6s��'+�� �%)�� �37����rc��|jduSr)r�rVs r�has_received_headerz frame_buffer.has_received_header;����{�d�"�"rc���|�d��}|d}|dz dz}|dz dz}|dz dz}|dz dz}|dz}|d}|dz dz} |d z} |||||| | f|_dS) Nr1rrerrfrgr�rj)� recv_strictr�) rGr��b1r=r>r?r@rA�b2�has_mask� length_bitss r� recv_headerzframe_buffer.recv_header>s����!�!�!�$�$�� �A�Y���A�g��k���Q�w��{���Q�w��{���Q�w��{���c��� �A�Y����7�Q�;���4�i� ��D�$��f�h� �L�� � � rc�F�|jsdS|jtj}|S)NF)r�r"�_HEADER_MASK_INDEX)rG� header_vals rr�zframe_buffer.has_maskLs&���{� ��5��+�l�&E�F� ��rc��|jduSr)rurVs r�has_received_lengthz frame_buffer.has_received_lengthRr�rc�@�|jtj}|dz}|dkr7|�d��}t jd|��d|_dS|dkr7|�d��}t jd|��d|_dS||_dS)Nrjr;r1rirr2rk)r�r"�_HEADER_LENGTH_INDEXr�rr�unpackru)rG�bitsr��vs r� recv_lengthzframe_buffer.recv_lengthUs����{�<�<�=���T�k� � �$� � �� � ��#�#�A� �-��a�0�0��3�D�K�K�K� �D� � �� � ��#�#�A� �-��a�0�0��3�D�K�K�K�%�D�K�K�Krc��|jduSr)r rVs r�has_received_maskzframe_buffer.has_received_maskas����$�&�&rc�f�|���r|�d��nd|_dS)Nrr<)r�r�r rVs r� recv_maskzframe_buffer.recv_maskds-��15�����H�$�*�*�1�-�-�-�b����rc �X�|j5|���r|���|j\}}}}}}}|���r|���|j}|���r|���|j } |� |��} |rt� | | ��} |� ��t||||||| ��} | �|j��ddd��n #1swxYwY| Sr)r�r�r�r�r�r�rur�r�r r�r rzr�rRrI) rGr=r>r?r@rAr��_rur �payload�frames r� recv_framezframe_buffer.recv_framegsk�� �Y� 6� 6��'�'�)�)� #�� � �"�"�"�;?�;� 8�S�$��d�F�H�a��'�'�)�)� #�� � �"�"�"��[�F��%�%�'�'� !���� � � ���J��&�&�v�.�.�G�� 9��)�)�J��8�8�� �J�J�L�L�L���d�D�$���'�J�J�E� �N�N�4�4� 5� 5� 5�3 6� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6���� 6� 6� 6� 6�6� s�D D�D#�&D#�bufsizec��|ttt|j����z }|dkrU|�t d|����}|j�|��|t|��z}|dk�Ud�|j��}|dkr g|_|S||d�g|_|d|�S)Nri@r)�sum�maprr�r��min�append�join)rGr��shortage�bytes_�unifieds rr�zframe_buffer.recv_strict�s����S��S�$�*:�!;�!;�<�<�<����l�l��Y�Y�s�5�(�3�3�4�4�F� � � #� #�F� +� +� +� ��F� � � #�H���l�l��(�(�4�+�,�,�� �q�=�=�!�D� ��N� '���� 1�2�D� ��8�G�8�$� $r)rN)rr�r�r�r�rrr�rHr�r�r�rr�r�r�r�r�r r�r�r�rarrr"r"'sa���������� ����s� �+� �CG� � � � � � �8�8�8�8� #�T�#�#�#�#� M� M� M� M��%��c� �*����� #�T�#�#�#�#� &� &� &� &�'�4�'�'�'�'�I�I�I�I��D�����<%�3�%�5�%�%�%�%�%�%rr"c�r�eZdZdededdfd�Zdeddfd�Zdeddfd�Zdedeee ffd �Z dede fd �Z dS) r!�fire_cont_framerIrNc�>�||_||_d|_d|_dSr)r�rI� cont_data�recving_frames)rGr�rIs rrHzcontinuous_frame.__init__�s'��.���$8��!�)-���-1����rr�c���|js$|jtjkrt d���|jr.|jtjtjfvrt d���dSdS)Nz Illegal frame)r�rAr r�r rZr��rGr�s rrRzcontinuous_frame.validate�sx���"� >�u�|�t�7G�'G�'G�,�_�=�=� =� � � >�5�<� � � � �4 �$ �$ �-�_�=�=� =�  >� >�$ �$ rc���|jr|jdxx|jz cc<n>|jtjtjfvr |j|_|j|jg|_|jr d|_dSdS)Nr)r�rBrAr rZr�r�r=r�s r�addzcontinuous_frame.add�s��� �>� 8� �N�1� � � ��� +� � � � ��|�� 0�$�2D�E�E�E�&+�l��#�#�l�E�J�7�D�N� �9� '�"&�D� � � � '� 'rc��|jp|jSr)r=r�r�s r�is_firezcontinuous_frame.is_fire�s���y�0�D�0�0rc��|j}d|_|d|_|jsU|dtjkr?|js8t |j��s$tdt|j�������|d|fS)Nrrzcannot decode: ) r�rBr�r rZrIr r�repr)rGr�rBs r�extractzcontinuous_frame.extract�s����~������!�W�� ��$� R��Q��4�+�+�+��-�,�!�%�*�-�-�,�,�,P�d�5�:�>N�>N�,P�,P�Q�Q� Q��A�w��~�r) rr�r�r�rHr rRr�rrr��tupler�rarrr!r!�s�������2��2�D�2�T�2�2�2�2� >�d�>�t�>�>�>�>� '�� '�$� '� '� '� '�1�T�1�e�D�#�I�&6�1�1�1�1� �T� �e� � � � � � rr!)*r~rDrr�sys� threadingr�typingrrr� _exceptionsrr �_utilsr �wsaccel.xormaskr r�r� ImportError� byteorderr�__all__r#r$r%r&r'r(r)r*r+r,r-�STATUS_SERVICE_RESTART�STATUS_TRY_AGAIN_LATERr.r/rTr r"r!rarr�<module>r�ss�� � � � � � � � � � � � � � � � �������,�,�,�,�,�,�,�,�,�,�N�N�N�N�N�N�N�N�!�!�!�!�!�!��&U� 0�/�/�/�/�/��%�+��5�;��5�������� U� U� U��}��U�%�+�U�5�;�U�5�U�U�U�U�U�U� U���� � � ��(� �����#��"������������"��������!����� ��������� �� zI�zI�zI�zI�zI�zI�zI�zI�zr%�r%�r%�r%�r%�r%�r%�r%�j)�)�)�)�)�)�)�)�)�)s�A � A/�.A/
Memory