o
    zsg                  	   @   s  U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ed	jZed
jZedjZedjZedjZed
jZedjZdZee ed< dZee ed< dZee ed< ej dee fddZ!dede"ddfddZ#esere#Z$nz
ddl%m&Z& e&Z$W n e'y   e#Z$Y nw e(dZ)ee
e*  ed< e(dZ+ee
e*  ed < d+d"e	e* d#e,deee,f fd$d%Z-	!d,d'ed#e,d(e,de*fd)d*Z.dS )-z1Helpers for WebSocket protocol versions 13 and 8.    N)Struct)TYPE_CHECKINGFinalListOptionalPatternTuple   )NO_EXTENSIONS   )WSHandshakeErrorz!Qz!Hz!BBz!BBHz!BBQz!Li @  MSG_SIZE   MASK_LENs$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11WS_KEYreturnc                   C   s   dd t dD S )Nc                    s&   g | ] t  fd dtdD qS )c                 3   s    | ]}| A V  qd S N ).0abr   V/var/www/html/minecraft/env/lib/python3.10/site-packages/aiohttp/_websocket/helpers.py	<genexpr>       z(_xor_table.<locals>.<listcomp>.<genexpr>   )bytesrange)r   r   r   r   
<listcomp>   s   & z_xor_table.<locals>.<listcomp>r   )r   r   r   r   r   
_xor_table   s   r   maskdatac                    s   t |ts	J |t| dksJ | |rct   fdd| D \}}}}|ddd ||ddd< |ddd ||ddd< |ddd ||ddd< |ddd ||ddd< dS dS )aw  Websocket masking function.

    `mask` is a `bytes` object of length 4; `data` is a `bytearray`
    object of any length. The contents of `data` are masked with `mask`,
    as specified in section 5.3 of RFC 6455.

    Note that this function mutates the `data` argument.

    This pure-python implementation may be replaced by an optimized
    version when available.

    r   c                 3   s    | ]} | V  qd S r   r   )r   n
_XOR_TABLEr   r   r   0   r   z)_websocket_mask_python.<locals>.<genexpr>Nr   r	      )
isinstance	bytearraylenr   	translate)r    r!   r   r   cdr   r#   r   _websocket_mask_python   s   "r,   )_websocket_mask_cythonz^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$
_WS_EXT_REzpermessage-deflate([^,]+)?_WS_EXT_RE_SPLITFextstrisserverc                 C   s   | sdS d}d}t | D ]m}|d}|sd} ||fS t|}|rod}|rK|dr?t|d}|dks<|dk r?d}q|drFd} ||fS |d	rct|d	}|dks_|dk rctd
|drjd} ||fS |sztd|d q||fS )N)r   Fr   Fr      r   	   T   zInvalid window sizer	   z#Extension for deflate not supported)r/   finditergroupr.   matchintr   )r0   r1   compress
notakeoverextdefextr7   r   r   r   ws_ext_parseM   sF   
%




r=   r2   r9   server_notakeoverc                 C   s^   | dk s| dkrt ddg}|s|d | dk r#|dt|   |r*|d d|S )	Nr3   r2   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateclient_max_window_bitszserver_max_window_bits=server_no_context_takeoverz; )
ValueErrorappendstrjoin)r9   r1   r>   
enabledextr   r   r   
ws_ext_gen   s   


rF   )F)r2   FF)/__doc__	functoolsrestructr   typingr   r   r   r   r   r   helpersr
   modelsr   unpack_fromUNPACK_LEN3unpackUNPACK_CLOSE_CODEpack	PACK_LEN1	PACK_LEN2	PACK_LEN3PACK_CLOSE_CODEPACK_RANDBITSr   r8   __annotations__r   r   r   	lru_cacher   r'   r,   websocket_maskr    r-   ImportErrorcompiler.   rC   r/   boolr=   rF   r   r   r   r   <module>   sV     






$4