o
    4˜Žj¢  ã                	   @   s®  U d Z ddlZddlZddlmZ ddlmZ ddl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s�e
r„e!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(dB 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)ÚPattern)ÚStruct)ÚTYPE_CHECKINGÚFinalé   )Ú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   úW/var/www/kodo/Anonymous/send/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   1   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	   )r-   r.   ÚcompressÚ
notakeoverÚextÚdefextr4   r   r   r   Úws_ext_parseN   sF   
%
Ü


ð
ýÿr:   r/   r6   Ú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 )	Nr0   r/   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)r6   r.   r;   Ú
enabledextr   r   r   Ú
ws_ext_gen�   s   ÿ


rC   )F)r/   FF).Ú__doc__Ú	functoolsÚrer   Ústructr   Útypingr   r   Úhelpersr   Úmodelsr	   Úunpack_fromÚUNPACK_LEN3ÚunpackÚUNPACK_CLOSE_CODEÚpackÚ	PACK_LEN1Ú	PACK_LEN2Ú	PACK_LEN3ÚPACK_CLOSE_CODEÚPACK_RANDBITSr
   r5   Ú__annotations__r   r   r   Ú	lru_cacheÚlistr   r$   r)   Úwebsocket_maskr   r*   ÚImportErrorÚcompiler+   r@   r,   ÚboolÚtupler:   rC   r   r   r   r   Ú<module>   sX    






ÿÿ$4ÿÿÿÿþ