
    &th0                       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mZm	Z	m
Z
mZmZ ddlmZ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Z G 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%ddddddddddddddddZ&h dZ'ddhZ(e)e*e+fZ,ej-         G d d                      Z.d)d$Z/d*d&Z0ej-         G d' d(                      Z1dS )+    )annotationsN)Callable	GeneratorOptionalSequenceTuple   )
exceptions
extensions)Data)
apply_mask)OpcodeOP_CONTOP_TEXT	OP_BINARYOP_CLOSEOP_PINGOP_PONGDATA_OPCODESCTRL_OPCODESFrameprepare_dataprepare_ctrlClosec                  *    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     e/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/websockets/frames.pyr   r   %   s,        --)D$(E4r+   r   OKz
going awayzprotocol errorzunsupported typezno status code [internal]z'connection closed abnormally [internal]zinvalid datazpolicy violationzmessage too bigzextension requiredzunexpected errorzservice restartztry again laterzbad gatewayzTLS failure [internal])          i                  i  >   r.   r/   r0   r1   r3   r4   r5   r6   r7   r8   r9   r:   r.   r/   c                      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<   ddZ	e
dddd d            Zddd!dZ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   opcodebytesdataTboolfinFrsv1rsv2rsv3returnstrc                j   d}t          | j                   dt          | j                  dk    rdnd }| j        rdnd}| j        t          u r(t          | j                                                  }nX| j        t          u rb| j        }t          |          dk    r(d                    |dd	         d
|dd         g          }d                    d |D                       }n| j        t          u r-t          t                              | j                            }n| j        r	 t          | j                                                  }d}n|# t          t          f$ rf | j        }t          |          dk    r(d                    |dd	         d
|dd         g          }d                    d |D                       }d}Y nw xY wd}t          |          dk    r|dd         dz   |dd         z   }d                    t          d|||g                    }| j        j         d| d| dS )zC
        Return a human-readable represention of a frame.

        Nz byter	    s	continued   r+      s     i c              3     K   | ]}|d V  	dS 02xNr*   .0bytes     r,   	<genexpr>z Frame.__str__.<locals>.<genexpr>   s&      ==dtMM======r+   textc              3     K   | ]}|d V  	dS rN   r*   rP   s     r,   rS   z Frame.__str__.<locals>.<genexpr>   s&      AA$4AAAAAAr+   binaryz''K   0   z...iz, z [])lenr>   r@   r<   r   reprdecoder   joinr   rE   r   parseUnicodeDecodeErrorAttributeErrorfiltername)selfcodinglength	non_finalr>   rV   metadatas          r,   __str__zFrame.__str__|   sF   
 	NNMMs49~~/B/BMM(3BB	;'!! 	((**++DD[I%% YF6{{R6#2#;VBCC["IJJ88==f=====DD[H$$u{{49--..DDY 	"DI,,..//&7 " " "v;;## XXvcrc{K&MNNFxxAA&AAAAA!" Dt99r>>9u$tCDDz1D99VD669*EFFGG+"88T88X8888s   *(E A4G
	G
N)max_sizer   
read_exact-Callable[[int], Generator[None, None, bytes]]maskri   Optional[int]r   (Optional[Sequence[extensions.Extension]]Generator[None, None, Frame]c             #  t  K    |d          E 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          |d
z            }n'# t          $ r}t	          j        d          |d}~ww xY w|dz  rdnd|k    rt	          j        d          |dz  }|dk    r) |d          E d{V }t          j        d|          \  }n.|dk    r( |d          E d{V }t          j        d|          \  }|!||k    rt	          j        d| d| d          |r |d          E d{V } ||          E d{V }|rt          ||          } | ||||	|
|          }|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.
            UnicodeDecodeError: if the frame contains invalid UTF-8.
            PayloadTooBig: if the frame's payload size exceeds ``max_size``.
            ProtocolError: if the frame contains incorrect values.

        r   N!BB   TF@       rK      zinvalid opcodezincorrect masking   ~   !Hr   z!Qzover size limit (z > z bytes)   )ri   )structunpackr   
ValueErrorr
   ProtocolErrorPayloadTooBigr   reversedr\   check)clsrj   rl   ri   r   r>   head1head2r@   rA   rB   rC   r<   excre   
mask_bytesframe	extensions                     r,   r^   zFrame.parse   s     < %*Q--''''''}UD11u j(3ddez)4ttuz)4ttuz)4ttu	FEJ.//FF 	F 	F 	F*+;<<#E	F J&1DDEd::*+>???#S==(jmm++++++DdD11IVVs]](jmm++++++DdD11IVFX$5$5*@F@@x@@@    	2$.JqMM111111J %*V,,,,,,,, 	0dJ//DFD#tT488J!*-- 	? 	?I$$UX$>>EEs   A$ $
B.BB)r   c               <   |                                   |g }|D ]}|                    |           } t          j                    }| j        rdnd| j        rdndz  | j        rdndz  | j        rdndz  | j        z  }|rdnd}t          | j
                  }|dk     r-|                    t          j        d|||z                       na|d	k     r.|                    t          j        d
||dz  |                     n-|                    t          j        d||dz  |                     |r)t          j        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.

        Nrr   r   rs   rt   rK   rw   rq   i   z!BBHz!BBQrv   ry   )r   encodeioBytesIOr@   rA   rB   rC   r<   rZ   r>   writerz   packsecretstoken_bytesr   getvalue)
rc   rl   r   r   outputr   r   re   r   r>   s
             r,   	serializezFrame.serialize   s   $ 	

J# 	* 	*I##D))DD  8*ZZ!Y-zzA/!Y-zzA/ "Y-zzA/ k	 	 #)

TYC<<LLUE56>BBCCCCe^^LLVUECKHHIIIILLVUECKHHIII 	% ,Q//JLL$$$  	di44DD9DT   r+   Nonec                   | j         s| j        s| j        rt          j        d          | j        t          v rGt          | j                  dk    rt          j        d          | j	        st          j        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)
rA   rB   rC   r
   r}   r<   r   rZ   r>   r@   rc   s    r,   r   zFrame.check3  s     9 	F	 	FTY 	F*+DEEE;,&&49~~## ./GHHH8 K ./IJJJ	 '&K Kr+   rD   rE   )
rj   rk   rl   r?   ri   rm   r   rn   rD   ro   )rl   r?   r   rn   rD   r=   rD   r   )r    r!   r"   r#   __annotations__r@   rA   rB   rC   rh   classmethodr^   r   r   r*   r+   r,   r   r   c   s           NNNKKKCDDD-9 -9 -9 -9^  #'?CJ J J J J [J` @D	9! 9! 9! 9! 9! 9!vK K K K K Kr+   r   r>   r   rD   Tuple[int, bytes]c                    t          | t                    rt          |                     d          fS t          | t                    r	t
          | 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.

    utf-8data must be str or bytes-like)
isinstancerE   r   r   	BytesLiker   	TypeErrorr>   s    r,   r   r   E  sX      $ :G,,,,	D)	$	$ :$8999r+   r=   c                    t          | t                    r|                     d          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.

    r   r   )r   rE   r   r   r=   r   r   s    r,   r   r   ]  sU     $ :{{7###	D)	$	$ :T{{8999r+   c                  X    e Zd ZU dZded<   ded<   ddZedd
            ZddZddZ	dS )r   z
    Code and reason for WebSocket close frames.

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

    intcoderE   reasonrD   c                    d| j         cxk    rdk     rn nd}n8d| j         cxk    rdk     rn nd}n t                              | j         d          }| j          d| d}| j        r| d	| j         }|S )
zS
        Return a human-readable represention of a close code and reason.

          i  
registered  zprivate useunknownz ()rL   )r   CLOSE_CODESgetr   )rc   explanationresults      r,   rh   zClose.__str__  s    
 49####t#####&KKTY%%%%%%%%%'KK%//$)Y??KI/////; 	/....Fr+   r>   r=   c                J   t          |          dk    r^t          j        d|dd                   \  }|dd                             d          } | ||          }|                                 |S t          |          dk    r | dd          S t          j        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.

        r   rx   Nr   r   r2   rG   zclose frame too short)rZ   rz   r{   r\   r   r
   r}   )r   r>   r   r   closes        r,   r^   zClose.parse  s     t99>>mD$rr(33GT!""X__W--FCf%%EKKMMMLYY!^^3tR== *+BCCCr+   c                    |                                   t          j        d| j                  | j                            d          z   S )z:
        Serialize the payload of a close frame.

        rx   r   )r   rz   r   r   r   r   r   s    r,   r   zClose.serialize  s:    
 	

{4++dk.@.@.I.IIIr+   r   c                v    | j         t          v s(d| j         cxk    rdk     sn t          j        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   s    r,   r   zClose.check  sR     	111TTY5M5M5M5M5M5M5M5M*+@AAA 215M5Mr+   Nr   )r>   r=   rD   r   )rD   r=   r   )
r    r!   r"   r#   r   rh   r   r^   r   r   r*   r+   r,   r   r   t  s           IIIKKK   $ D D D [D.J J J J	B 	B 	B 	B 	B 	Br+   r   )r>   r   rD   r   )r>   r   rD   r=   )2
__future__r   dataclassesenumr   r   rz   typingr   r   r   r   r   rG   r
   r   r   speedupsr   ImportErrorutils__all__IntEnumr   r$   r   r%   r   r&   r   r'   r   r(   r   r)   r   r   r   r   r   OK_CLOSE_CODESr=   	bytearray
memoryviewr   	dataclassr   r   r   r   r*   r+   r,   <module>r      s   " " " " " "      				   A A A A A A A A A A A A A A $ $ $ $ $ $ $ $      "$$$$$$$ " " "!!!!!!!!"  ") ) ) ) )T\ ) ) ) +
+M	<
+
+*')
 



%
3








"! ,     9j(	 ^K ^K ^K ^K ^K ^K ^K ^KB: : : :0: : : :. HB HB HB HB HB HB HB HB HB HBs   ? AA