U
    ;gl                     @   sR  U d 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Zddlm	Z	 ddlm
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddl m!Z!m"Z" ddl#m$Z$ dZ%G dd de	Z&dd e&D Z'eee(  e)d< dZ*G dd de	Z+e,e+j-e+j.e+j/hZ0ee)d< dZ1ee2 e)d< edj3Z4edj3Z5edj6Z7edj8Z9edj8Z:edj8Z;edj8Z<edj8Z=dZ>ee( e)d < d!Z?ee( e)d"< d#Z@ee( e)d$< G d%d& d&eZAeBCeAe+jDddfZEeBCeAe+jFddfZGG d'd( d(eHZIG d)d* d*eHZJejKZLeeM e)d+< ejNee2 d,d-d.ZOe2ePdd/d0d1ZQe!rleQZRn0zdd2lSmTZT eTZRW n eUk
r   eQZRY nX e2ddd3d3gZVee2 e)d4< eWd5ZXeeeM  e)d6< eWd7ZYeeeM  e)d8< dGeeM eZee(eZf d:d;d<Z[dHe(eZeZeMd>d?d@Z\G dAdB dBe	Z]G dCdD dDZ^G dEdF dFZ_dS )Iz%WebSocket protocol versions 13 and 8.    N)IntEnum)partial)Struct)AnyCallableFinalList
NamedTupleOptionalPatternSetTupleUnioncast   )BaseProtocol)ClientConnectionResetError)ZLibCompressorZLibDecompressor)NO_EXTENSIONSset_exception)	DataQueue)	WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketReaderWebSocketWriter	WSMessageWebSocketError	WSMsgTypeWSCloseCodec                   @   s@   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S )r      i  i  i  i  i  i  i  i  i  i  i  i  N)__name__
__module____qualname__OKZ
GOING_AWAYPROTOCOL_ERRORZUNSUPPORTED_DATAZABNORMAL_CLOSUREINVALID_TEXTZPOLICY_VIOLATIONMESSAGE_TOO_BIGZMANDATORY_EXTENSIONINTERNAL_ERRORZSERVICE_RESTARTZTRY_AGAIN_LATERBAD_GATEWAY r+   r+   V/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/http_websocket.pyr    .   s   r    c                 C   s   h | ]}t |qS r+   )int).0ir+   r+   r,   	<setcomp>>   s     r0   ALLOWED_CLOSE_CODESi   c                   @   sP   e Zd ZdZdZdZdZdZdZdZ	dZ
d	ZeZeZeZeZeZe	Ze
ZeZd
S )r   r   r      	   
         i  i  N)r"   r#   r$   CONTINUATIONTEXTBINARYPINGPONGCLOSECLOSINGCLOSEDERRORtextbinarypingpongcloseclosingclosederrorr+   r+   r+   r,   r   J   s"   r   MESSAGE_TYPES_WITH_CONTENTs$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11r   z!Hz!Qz!BBz!BBHz!BBQz!Li @  MSG_SIZE   DEFAULT_LIMIT   MASK_LENc                   @   sL   e Zd ZU eed< eed< ee ed< ej	de
egef edddZdS )	r   typedataextra)loads)rQ   returnc                C   s
   || j S )zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )rO   )selfrQ   r+   r+   r,   json   s    zWSMessage.jsonN)r"   r#   r$   r   __annotations__r   r
   strrT   rQ   r   r+   r+   r+   r,   r   z   s   
r   c                       s8   e Zd ZdZeedd fddZedddZ  ZS )	r   z WebSocket protocol parser error.NcodemessagerR   c                    s   || _ t || d S N)rX   super__init__rS   rX   rY   	__class__r+   r,   r\      s    zWebSocketError.__init__rR   c                 C   s   t t| jd S )Nr   )r   rV   argsrS   r+   r+   r,   __str__   s    zWebSocketError.__str__)	r"   r#   r$   __doc__r-   rV   r\   rc   __classcell__r+   r+   r^   r,   r      s   r   c                   @   s   e Zd ZdZdS )WSHandshakeErrorz#WebSocket protocol handshake error.N)r"   r#   r$   rd   r+   r+   r+   r,   rf      s   rf   native_byteorderr`   c                   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 rZ   r+   )r.   abr+   r,   	<genexpr>   s     z(_xor_table.<locals>.<listcomp>.<genexpr>r6   )bytesrange)r.   r+   ri   r,   
<listcomp>   s     z_xor_table.<locals>.<listcomp>r6   )rm   r+   r+   r+   r,   
_xor_table   s    ro   )maskrO   rR   c                    s   t |tst|t| dks&t| |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.

    rL   c                 3   s   | ]} | V  qd S rZ   r+   )r.   nZ
_XOR_TABLEr+   r,   rk      s     z)_websocket_mask_python.<locals>.<genexpr>Nr   r2      )
isinstance	bytearrayAssertionErrorlenro   	translate)rp   rO   rh   rj   cdr+   rr   r,   _websocket_mask_python   s    r{   )_websocket_mask_cython   _WS_DEFLATE_TRAILINGz^(?:;\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isserverrR   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      rL   r3   T   zInvalid window sizer2   z#Extension for deflate not supported)r   finditergroupr   matchr-   rf   )r   r   compress
notakeoverextZdefextr   r+   r+   r,   ws_ext_parse   s>    





r   r   )r   r   server_notakeoverrR   c                 C   s^   | dk s| dkrt ddg}|s,|d | dk rF|dt|   |rT|d d|S )	Nr3   r   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appendrV   join)r   r   r   Z
enabledextr+   r+   r,   
ws_ext_gen  s    

r   c                   @   s   e Zd ZdZdZdZdZdS )WSParserStater   r2   rs   rL   N)r"   r#   r$   READ_HEADERREAD_PAYLOAD_LENGTHREAD_PAYLOAD_MASKREAD_PAYLOADr+   r+   r+   r,   r   "  s   r   c                   @   s   e Zd Zdee eeddddZddddZe	e
ee	f d	d
dZe	dd	ddZe	ee
eee eee f  dddZdS )r   TN)queuemax_msg_sizer   rR   c                 C   sp   || _ || _d | _t | _tj| _d | _d| _	d | _
t | _d| _d| _d | _d| _d| _d | _d | _|| _d S )NF    r   )r   _max_msg_size_excru   _partialr   r   _state_opcode
_frame_fin_frame_opcode_frame_payload_tail	_has_mask_frame_mask_payload_length_payload_length_flag_compressed_decompressobj	_compress)rS   r   r   r   r+   r+   r,   r\   *  s"    zWebSocketReader.__init__r`   c                 C   s   | j   d S rZ   )r   feed_eofrb   r+   r+   r,   r   B  s    zWebSocketReader.feed_eof)rO   rR   c              
   C   s\   | j rd|fS z| | W n: tk
rV } z|| _ t| j| W Y dS d }~X Y nX dS )NT)Tr   )Fr   )r   
_feed_data	Exceptionr   r   )rS   rO   excr+   r+   r,   	feed_dataE  s    zWebSocketReader.feed_datac                 C   s  |  |D ]\}}}}|tkr|tjk}|s||s:|| _|  j|7  _| jr
t| j| jkr
tt	j
dt| j| jq
t| j}|r| jd krtt	jd| j}d | _n|rtt	jd||r| j| }| j  n|}| jrt|| jkrtt	j
dt|| j|rv| js.tdd| _| j|t | j}	| jjr~t| jj}
tt	j
d| j|
 | jnt|}	|tjkrz|	d}W n2 tk
r } ztt	jd|W 5 d }~X Y nX tttj|d	f}| j|t|	 q
tttj|	d	f}| j|t|	 q
|tjkrt|d
krt |d d
 d }|dk rp|t!krptt	jd| z|d
d  d}W n2 tk
r } ztt	jd|W 5 d }~X Y nX tttj||f}n:|rtt	jd| d| d|ntttjdd	f}| j|d q
|tj"krNtttj"|d	f}| j|t| q
|tj#krtttj#|d	f}| j|t| q
tt	jd|q
d S )Nz Message size {} exceeds limit {}z*Continuation frame for non started messagez<The opcode in non-fin frame is expected to be zero, got {!r}T)Zsuppress_deflate_headerz-Decompressed message size {} exceeds limit {}utf-8zInvalid UTF-8 text message r2   r   i  zInvalid close code: zInvalid close frame:  zUnexpected opcode=)$parse_framerH   r   r7   r   r   r   rw   r   r    r(   formatboolr&   clearr   r   Zdecompress_syncr~   unconsumed_tailrl   r8   decodeUnicodeDecodeErrorr'   tuple__new__r   r   r   r9   r<   UNPACK_CLOSE_CODEr1   r:   r;   )rS   rO   finopcodepayload
compressedZis_continuationZhas_partialZassembled_payloadZpayload_mergedleftr@   r   msgZ
close_codeZclose_messager+   r+   r,   r   R  s    

 


 	 
    
 zWebSocketReader._feed_data)bufrR   c                 C   sB  g }| j r| j | d }| _ d}t|}| jtjkrl|| dk rFq0|||d  }|d7 }|\}}|d? d@ }|d? d@ }	|d? d@ }
|d? d@ }|d	@ }|
s|s|	r| jsttjd
|dkr|dkrttjd|d? d@ }|d@ }|dkr|dkrttjd| j	s | j
dkr2|	r*dnd| _
n|	rDttjd
t|| _	|| _t|| _|| _tj| _| jtjkr$| j}|dkr|| dk rq0|||d  }|d7 }t|d | _nJ|dkr|| dk rq0|||d  }|d7 }t|d | _n|| _| jrtjntj| _| jtjkrf|| dk rDq0|||d  | _|d7 }tj| _| jtjkr(| j}| j}|| }||kr|| | _|||d 7 }|}n"d| _|||||  7 }|| }| jdkrq0| jr| jdk	stt| j| || j	| j|| j
f t | _tj| _q(||d | _ |S )z&Return the next frame from the socket.r   r   r2      r   r      rL   r   z*Received frame with non-zero reserved bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytesNTF~   r5   )r   rw   r   r   r   r   r   r    r&   r   r   r   r   r   r   r   UNPACK_LEN2r   UNPACK_LEN3r   r   r   r   rv   _websocket_maskr   ru   )rS   r   frames	start_posZ
buf_lengthrO   
first_byteZsecond_byter   Zrsv1Zrsv2Zrsv3r   Zhas_masklengthZlength_flagr   Z	chunk_lenr+   r+   r,   r     s    







zWebSocketReader.parse_frame)T)r"   r#   r$   r   r   r-   r   r\   r   rl   r   r   r   r   r
   ru   r   r+   r+   r+   r,   r   )  s       r   c                
   @   s   e Zd Zdee dddeeje	e
eje
e	ddddZdee
ee
 ddd	d
Ze
edddZdeeef ddddZdeeef ddddZdeeef e	ee
 ddddZde
eeef ddddZdS ) r   Fr   )use_masklimitrandomr   r   N)protocol	transportr   r   r   r   r   rR   c                C   sH   || _ || _|| _t|jd| _|| _|| _d| _|| _	d| _
d | _d S )N    Fr   )r   r   r   r   getrandbitsget_random_bitsr   r   _closing_limit_output_size_compressobj)rS   r   r   r   r   r   r   r   r+   r+   r,   r\   _  s    zWebSocketWriter.__init__)rY   r   r   rR   c                    s  | j r|tj@ stdd}|s&| jr|dk rd}|rB| |}n| jsV| | j| _| j}||I dH }||| jr~t	j
nt	j7 }|tr|dd }t|}| j}|rdnd}d|B |B }	|dk rt|	||B }
d	}n2|d
k rt|	d|B |}
d}nt|	d|B |}
d}| j r&td|rnt|  }t|}t|| | j|
| |  |  jt7  _n4|tkr| j|
 | j| n| j|
|  |  j|| 7  _| j| jkrd| _| j I dH  dS )<Send a frame over the websocket with message as its payload.z!Cannot write to closing transportr   r5   @   N   r   r2   rJ   rL   r   r4   ) r   r   r<   r   r   _make_compress_objr   flushr   zlibZ_FULL_FLUSHZ_SYNC_FLUSHendswithr~   rw   r   	PACK_LEN1	PACK_LEN2	PACK_LEN3r   Z
is_closingPACK_RANDBITSr   ru   r   writer   rM   rI   r   r   Z_drain_helper)rS   rY   r   r   ZrsvcompressobjZ
msg_lengthr   Zmask_bitr   headerZ
header_lenrp   r+   r+   r,   _send_frameu  sX    
	


zWebSocketWriter._send_frame)r   rR   c                 C   s   t tj| tdS )N)levelwbitsZmax_sync_chunk_size)r   r   Z_BEST_SPEEDWEBSOCKET_MAX_SYNC_CHUNK_SIZE)rS   r   r+   r+   r,   r     s
    z"WebSocketWriter._make_compress_objr   )rY   rR   c                    s,   t |tr|d}| |tjI dH  dS )zSend pong message.r   N)rt   rV   encoder   r   r;   rS   rY   r+   r+   r,   rC     s    

zWebSocketWriter.pongc                    s,   t |tr|d}| |tjI dH  dS )zSend ping message.r   N)rt   rV   r   r   r   r:   r   r+   r+   r,   rB     s    

zWebSocketWriter.ping)rY   rA   r   rR   c                    sJ   t |tr|d}|r0| |tj|I dH  n| |tj|I dH  dS )r   r   N)rt   rV   r   r   r   r9   r8   )rS   rY   rA   r   r+   r+   r,   send  s
    

zWebSocketWriter.sendr!   rW   c                    sD   t |tr|d}z"| jt|| tjdI dH  W 5 d| _X dS )z<Close the websocket, sending the specified code and message.r   T)r   N)rt   rV   r   r   r   PACK_CLOSE_CODEr   r<   r]   r+   r+   r,   rD     s    


 zWebSocketWriter.close)N)r   )r   )FN)r!   r   )r"   r#   r$   rK   r   Randomr   asyncio	Transportr   r-   r\   rl   r
   r   r   r   r   rV   rC   rB   r   rD   r+   r+   r+   r,   r   ^  sD      \	  
r   )F)r   FF)`rd   r   	functoolsrT   r   resysr   enumr   r   structr   typingr   r   r   r   r	   r
   r   r   r   r   r   Zbase_protocolr   Zclient_exceptionsr   Zcompression_utilsr   r   Zhelpersr   r   streamsr   __all__r    r1   r-   rU   r   r   	frozensetr9   r8   r7   rH   r   rl   unpack_fromr   r   unpackr   packr   r   r   r   r   rI   rK   rM   r   r   r   r>   r   r=   r   r   r   rf   	byteorderrg   rV   	lru_cachero   ru   r{   r   Z
_websocketr|   ImportErrorr~   compiler   r   r   r   r   r   r   r   r+   r+   r+   r,   <module>   s   4	








 4         7