a
    `g                     @   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 ee dddZ!ee"ddddZ#esere#Z$n.zddl%m&Z& e&Z$W n e'y8   e#Z$Y n0 e(dZ)ee
e*  ed< e(dZ+ee
e*  ed< d(e	e* e,eee,f d!d"d#Z-d)ee,e,e*d%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   h/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/_websocket/helpers.py	<genexpr>       z(_xor_table.<locals>.<listcomp>.<genexpr>   )bytesrange)r   r   r   r   
<listcomp>   r   z_xor_table.<locals>.<listcomp>r   )r   r   r   r   r   
_xor_table   s    r   )maskdatar   c                    s   t |tsJ |t| dks&J | |rt   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 )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Z
_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isserverr   c                 C   s   | sdS d}d}t | D ]}|d}|s4d} qt|}|rd}|r|drxt|d}|dksr|dk rxd}q|drd} qq|d	rt|d	}|dks|dk rtd
|drd} qq|st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/   r0   compressZ
notakeoverextZdefextr6   r   r   r   ws_ext_parseM   s>    





r:   r1   )r8   r0   server_notakeoverr   c                 C   s^   | dk s| dkrt ddg}|s,|d | dk rF|dt|   |rT|d d|S )	Nr2   r1   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateZclient_max_window_bitszserver_max_window_bits=Zserver_no_context_takeoverz; )
ValueErrorappendstrjoin)r8   r0   r;   Z
enabledextr   r   r   
ws_ext_gen   s    

r@   )F)r1   FF)/__doc__	functoolsrestructr   typingr   r   r   r   r   r   helpersr
   modelsr   unpack_fromZUNPACK_LEN3unpackZUNPACK_CLOSE_CODEpackZ	PACK_LEN1Z	PACK_LEN2Z	PACK_LEN3ZPACK_CLOSE_CODEZPACK_RANDBITSr   r7   __annotations__r   r   r   	lru_cacher   r&   r+   Zwebsocket_maskr    r,   ImportErrorcompiler-   r>   r.   boolr:   r@   r   r   r   r   <module>   sH    







 4 