
    vg1                    |   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mZ ddlmZ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% G 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&j0        de&j1        de&j2        de&j3        de&j4        de&j5        diZ6de7d<   e&j'        e&j(        e&j)        e&j*        e&j-        e&j.        e&j/        e&j0        e&j1        e&j2        e&j3        e&j4        hZ8e&j'        e&j(        e&j+        hZ9e:e;e<fZ=ej>         G d d                      Z?ej>         G d  d!                      Z@dd"lAmBZB dS )#    )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Frame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     N/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/websockets/frames.pyr   r   $   s,        --)D$(E4r'   r   c                  N    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 )	CloseCodez-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*   6   sc        77NJNNLONOOKMMMr'   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                      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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   opcodez#Union[bytes, bytearray, memoryview]dataTboolfinFrsv1rsv2rsv3WEBSOCKETS_MAX_LOG_SIZE75returnstrc                <   d}t          | j                   dt          | j                  dk    rdnd }| j        rdnd}| j        t          u r5t          t          | j                                                            }n| j        t          u r| j        }t          |          | j	        dz  k    r<| j	        dz  dz
  dz  }d
                    |dd	|z           d
|| d         g          }d
                    d |D                       }n| j        t          u r-t          t                              | j                            }n| j        r	 t          t          | j                                                            }d}n# t          t           f$ r | j        }t          |          | j	        dz  k    r<| j	        dz  dz
  dz  }d
                    |dd	|z           d
|| d         g          }d
                    d |D                       }d}Y nw xY wd}t          |          | j	        k    r)| j	        dz  dz
  }|dd	|z           dz   || d         z   }d
                    t#          d|||g                    }| j        j         d| d| dS )zE
        Return a human-readable representation of a frame.

        Nz byter    s	continued   r'   r   s      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 rO   r&   rQ   s     r(   rT   z 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joinr   rG   r   parseUnicodeDecodeErrorAttributeErrorfiltername)selfcodinglength	non_finalr>   rW   cutmetadatas           r(   __str__zFrame.__str__   s   
 	NNMMs49~~/B/BMM(3BB	;'!! di((//1122DD[I%% YF6{{T.!333(A-1a76)AG)#4k63$%%="QRR88==f=====DD[H$$u{{49--..DDY 		"E$),,335566&7 " " "v;;!2a!777,1A5!;C XXviCi'8+vsdee}&UVVFxxAA&AAAAA!" Dt99t(((#q(1,C	!c'	?U*T3$%%[8D99VD669*EFFGG+"88T88X8888s   5F
 
BHHN)max_size
extensions
read_exact-Callable[[int], Generator[None, None, bytes]]maskrk   
int | Nonerl   %Sequence[extensions.Extension] | NoneGenerator[None, None, Frame]c             #  J  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	          d          |d}~ww xY w|dz  rdnd|k    rt	          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          ||          |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.
            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   )rk   )
structunpackr   
ValueErrorr
   r	   r   reversedr\   check)clsrm   ro   rk   rl   r>   head1head2r@   rA   rB   rC   r=   excrf   
mask_bytesframe	extensions                     r(   r_   zFrame.parse   sg     : %*Q--''''''}UD11u j(3ddez)4ttuz)4ttuz)4ttu	;EJ.//FF 	; 	; 	; 011s:	; J&1DDEd:: 3444#S==(jmm++++++DdD11IVVs]](jmm++++++DdD11IVFX$5$5111 	2$.JqMM111111J %*V,,,,,,,, 	0dJ//DFD#tT488J!*-- 	? 	?I$$UX$>>EEs   A$ $
B.A>>Brl   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.

        Nru   r   rv   rw   rx   r{   rt   i   z!BBHz!BBQrz   r}   )r   encodeioBytesIOr@   rA   rB   rC   r=   rY   r>   writer~   packsecretstoken_bytesr   getvalue)
rd   ro   rl   r   outputr   r   rf   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          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)	rA   rB   rC   r
   r=   r   rY   r>   r@   rd   s    r(   r   zFrame.checkN  s     9 	;	 	;TY 	; 9:::;,&&49~~###$<===8 @#$>???	 '&@ @r'   rF   rG   )
rm   rn   ro   r?   rk   rp   rl   rq   rF   rr   )ro   r?   rl   rq   rF   r[   rF   r   )r   r   r   r   __annotations__r@   rA   rB   rC   intosenvirongetr]   rj   classmethodr_   r   r   r&   r'   r(   r   r   {   s*           NNN----CDDD 3rz~~&?FFGGL09 09 09 09d   $<@G G G G G [GZ =A	9! 9! 9! 9! 9! 9!v@ @ @ @ @ @r'   r   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.

    r   coderG   reasonrF   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 )
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(   rj   zClose.__str__n  s    
 49####t#####&KKTY%%%%%%%%%'KK155diKKKI/////; 	/....Fr'   r>   r[   c                R   t          |          dk    r]t          j        d|dd                   \  }|dd                                         } | ||          }|                                 |S t          |          dk    r | 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.

        r   r|   Nr   rI   zclose frame too short)rY   r~   r   r\   r   r*   r/   r
   )r   r>   r   r   closes        r(   r_   zClose.parse  s     t99>>mD$rr(33GT!""X__&&FCf%%EKKMMMLYY!^^3y/444 7888r'   c                    |                                   t          j        d| j                  | j                                        z   S )z:
        Serialize the payload of a close frame.

        r|   )r   r~   r   r   r   r   r   s    r(   r   zClose.serialize  s8    
 	

{4++dk.@.@.B.BBBr'   r   c                l    | j         t          v s#d| j         cxk    rdk     sn 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   s    r(   r   zClose.check  sO     	111TTY5M5M5M5M5M5M5M5M 5666 215M5Mr'   Nr   )r>   r[   rF   r   )rF   r[   r   )
r   r   r   r   r   rj   r   r_   r   r   r&   r'   r(   r   r   `  s           IIIKKK   $ 9 9 9 [9.C C C C	7 	7 	7 	7 	7 	7r'   r   r   )C
__future__r   dataclassesenumr   r   r   r~   collections.abcr   r   typingr   r   
exceptionsr	   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r;   r   r   OK_CLOSE_CODESr[   	bytearray
memoryview	BytesLike	dataclassr   r   rI   rl   r&   r'   r(   <module>r      sV   " " " " " " "      				 				   / / / / / / / / " " " " " " " " 4 4 4 4 4 4 4 4"$$$$$$$ " " "!!!!!!!!"  ) ) ) ) )T\ ) ) ) +
+M	<
+
+*')       . d,. 2= =8 20!#8.00=?+     , ! "  9j(	 a@ a@ a@ a@ a@ a@ a@ a@H H7 H7 H7 H7 H7 H7 H7 H7X        s   A   AA