
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`
b  ã                   @   sj  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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 d
ZG dd„ de	ƒZdd„ eD ƒZG dd„ de	ƒZd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(dZ)e *ddddg¡Z+G dd„ de+ƒZ,e,ej-ddƒZ.e,ej/ddƒZ0G dd „ d e1ƒZ2G d!d"„ d"e1ƒZ3ej4Z5d#d$„ e6d%ƒD ƒZ7e8e9dd&œd'd(„Z:e�r°e:Z;n0zdd)l<m=Z= e=Z;W n e>k
�rÞ   e:Z;Y nX e8ddd*d*gƒZ?e @d+¡ZAe @d,¡ZBd;eeC eDeeEeDf d.œd/d0„ZFd<eEeDeDeCd2œd3d4„ZGG d5d6„ d6e	ƒZHG d7d8„ d8ƒZIG d9d:„ d:ƒZJdS )=z%WebSocket protocol versions 13 and 8.é    N)ÚIntEnum)ÚStruct)ÚAnyÚCallableÚListÚOptionalÚTupleÚUnioné   )ÚBaseProtocol)ÚNO_EXTENSIONS)Ú	DataQueue)	ÚWS_CLOSED_MESSAGEÚWS_CLOSING_MESSAGEÚWS_KEYÚWebSocketReaderÚWebSocketWriterÚ	WSMessageÚWebSocketErrorÚ	WSMsgTypeÚWSCloseCodec                   @   s8   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S )r   éè  ié  iê  ië  iï  ið  iñ  iò  ió  iô  iõ  N)Ú__name__Ú
__module__Ú__qualname__ZOKZ
GOING_AWAYÚPROTOCOL_ERRORZUNSUPPORTED_DATAÚINVALID_TEXTZPOLICY_VIOLATIONÚMESSAGE_TOO_BIGZMANDATORY_EXTENSIONZINTERNAL_ERRORZSERVICE_RESTARTZTRY_AGAIN_LATER© r   r   úI/opt/alt/python38/lib64/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     r#   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   0   s"   r   s$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11z!Hz!Qz!BBz!BBHz!BBQi @  é   Ú_WSMessageBaseÚtypeÚdataZextrac                   @   s.   e Zd Zejdœeegef edœdd„ZdS )r   )Úloads)r>   Úreturnc                C   s
   || j ƒS )zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )r=   )Úselfr>   r   r   r   ÚjsonZ   s    zWSMessage.jsonN)r   r   r   rA   r>   r   r   r   r   r   r   r   Y   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Úmessager?   c                    s   || _ tƒ  ||¡ d S ©N)rC   ÚsuperÚ__init__©r@   rC   rD   ©Ú	__class__r   r   rG   i   s    zWebSocketError.__init__©r?   c                 C   s
   | j d S )Nr
   )Úargs©r@   r   r   r   Ú__str__m   s    zWebSocketError.__str__)	r   r   r   Ú__doc__r    ÚstrrG   rN   Ú__classcell__r   r   rI   r   r   f   s   r   c                   @   s   e Zd ZdZdS )ÚWSHandshakeErrorz#WebSocket protocol handshake error.N)r   r   r   rO   r   r   r   r   rR   q   s   rR   c                    s&   g | ]‰ t ‡ fd d„tdƒD ƒƒ‘qS )c                 3   s   | ]}|ˆ A V  qd S rE   r   )r!   Úa©Úbr   r   Ú	<genexpr>y   s     z<listcomp>.<genexpr>r(   )ÚbytesÚrange)r!   r   rT   r   Ú
<listcomp>y   s     rY   r(   )Úmaskr=   r?   c                 C   s¼   t |tƒst|ƒ‚t| ƒdks&t| ƒ‚|r¸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.

    é   c                 s   s   | ]}t | V  qd S rE   )Ú
_XOR_TABLE)r!   Únr   r   r   rV   �   s     z)_websocket_mask_python.<locals>.<genexpr>Nr
   r$   é   )Ú
isinstanceÚ	bytearrayÚAssertionErrorÚlenÚ	translate)rZ   r=   rS   rU   ÚcÚdr   r   r   Ú_websocket_mask_python|   s    rf   )Ú_websocket_mask_cythonéÿ   z�^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$zpermessage-deflate([^,]+)?F)ÚextstrÚisserverr?   c                 C   sð   | sdS d}d}t  | ¡D ]Ì}| d¡}|s4d} qèt |¡}|rÐd}|rŒ| d¡rxt| d¡ƒ}|dksr|dk rxd}q| d¡r†d} qèqæ| d	¡r¼t| d	¡ƒ}|dks´|dk r¼td
ƒ‚| d¡rÊd} qèq|std| d¡ ƒ‚q||fS )N)r   Fr   Fr
   é   r[   r%   Té   zInvalid window sizer$   z#Extension for deflate not supported)Ú_WS_EXT_RE_SPLITÚfinditerÚgroupÚ
_WS_EXT_REÚmatchr    rR   )ri   rj   ÚcompressÚ
notakeoverÚextZdefextrq   r   r   r   Úws_ext_parse¬   s>    





ru   rk   )rr   rj   Ú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 )	Nr%   rk   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ÚappendrP   Újoin)rr   rj   rv   Z
enabledextr   r   r   Ú
ws_ext_genß   s    ÿ

rz   c                   @   s   e Zd ZdZdZdZdZdS )ÚWSParserStater
   r$   r^   r[   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	e
ee	f 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_sizerr   r?   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Ú_excr`   Ú_partialr{   r|   Ú_stateÚ_opcodeÚ
_frame_finÚ_frame_opcodeÚ_frame_payloadÚ_tailÚ	_has_maskÚ_frame_maskÚ_payload_lengthÚ_payload_length_flagÚ_compressedÚ_decompressobjÚ	_compress)r@   r€   r�   rr   r   r   r   rG   ý   s"    zWebSocketReader.__init__rK   c                 C   s   | j  ¡  d S rE   )r€   Úfeed_eofrM   r   r   r   r“     s    zWebSocketReader.feed_eof©r=   r?   c              
   C   sZ   | j rd|fS z|  |¡W S  tk
rT } z|| _ | j |¡ W Y ¢dS d }~X Y nX d S )NT)Tr‚   )r„   Ú
_feed_dataÚ	Exceptionr€   Zset_exception)r@   r=   Úexcr   r   r   Ú	feed_data  s    zWebSocketReader.feed_datac                 C   sˆ  |   |¡D �]v\}}}}|r4| js4tjtj d�| _|tjk�rt|ƒdkrÚt|d d… ƒd }|dk r‚|t	kr‚t
tjd|› �ƒ‚z|dd …  d¡}W n0 tk
rÈ } zt
tjdƒ|‚W 5 d }~X Y nX ttj||ƒ}	n2|rþt
tjd|› d	|› d	|›�ƒ‚nttjdd
ƒ}	| j |	d¡ q
|tjk�rF| j ttj|d
ƒt|ƒ¡ q
|tjk�rp| j ttj|d
ƒt|ƒ¡ q
|tjtjfk�r¢| jd k�r¢t
tjd|›�ƒ‚q
|�sþ|tjk�rº|| _| j |¡ | j�r‚t| jƒ| jk�r‚t
tjd t| jƒ| j¡ƒ‚q
| j�r$|tjk�r$t
tjd |¡ƒ‚|tjk�rL| jd k	�s@t‚| j}d | _| j |¡ | j�rŽt| jƒ| jk�rŽt
tjd t| jƒ| j¡ƒ‚|�ræ| j t¡ | j  | j| j¡}
| jj!�rðt| jj!ƒ}t
tjd | j| | j¡ƒ‚n
t"| jƒ}
| j #¡  |tjk�rfz*|
 d¡}| j ttj|d
ƒt|ƒ¡ W n2 tk
�rb } zt
tjdƒ|‚W 5 d }~X Y nX q
| j ttj|
d
ƒt|
ƒ¡ q
dS )N)Úwbitsr$   r   i¸  zInvalid close code: úutf-8zInvalid UTF-8 text messagezInvalid close frame: ú Ú zUnexpected opcode=z Message size {} exceeds limit {}z<The opcode in non-fin frame is expected to be zero, got {!r}z-Decompressed message size {} exceeds limit {})Fr‚   )$Úparse_framer‘   ÚzlibZdecompressobjZ	MAX_WBITSr   r.   rb   ÚUNPACK_CLOSE_CODEÚALLOWED_CLOSE_CODESr   r   r   ÚdecodeÚUnicodeDecodeErrorr   r   r€   r˜   r,   r-   r*   r+   r‡   r)   r…   Úextendrƒ   r   Úformatra   Ú_WS_DEFLATE_TRAILINGÚ
decompressZunconsumed_tailrW   Úclear)r@   r=   ÚfinÚopcodeÚpayloadZ
compressedZ
close_codeZclose_messager—   ÚmsgZpayload_mergedÚleftr2   r   r   r   r•   #  sæ    
þ ÿþþ ÿ ÿÿþ ÿ ÿþ	ÿþ ÿþ	 ÿ
 ÿþ


 ÿ ÿþþzWebSocketReader._feed_data)Úbufr?   c                 C   s†  g }| j r| j | d }| _ d}t|ƒ}| jtjk�rp|| dk�rt|||d … }|d7 }|\}}|d? d@ }|d? d@ }	|d? d@ }
|d? d@ }|d	@ }|
s®|s®|	rº| jsºttjd
ƒ‚|dkrÖ|dkrÖttjdƒ‚|d? d@ }|d@ }|dk�r
|dk�r
ttjdƒ‚| j	�s| j
dk�r0|	�r(dnd| _
n|	�rBttjd
ƒ‚t|ƒ| _	|| _t|ƒ| _|| _tj| _n�qt| jtjk�r`| j}|dk�rä|| dk�rt|||d … }|d7 }t|ƒd }|| _| j�rÔtjntj| _n�qtn||dk�rD|| dk�rt|||d … }|d7 }t|ƒd }|| _| j�r4tjntj| _n�qtn|| _| j�rXtjntj| _| jtjk�r¤|| dk�rt|||d … | _|d7 }tj| _n�qt| jtjkr(| j}| j}|| }||k�rð|| | _| ||d… ¡ |}n$d| _| |||| … ¡ || }| jdk�rt| j�rD| jdk	�s8t‚t| j|ƒ | | j	| j|| j
f¡ tƒ | _tj| _q(�qtq(||d… | _ |S )z&Return the next frame from the socket.r‚   r   r$   é   r
   rl   é   r[   rk   z*Received frame with non-zero reserved bitsz!Received fragmented control frameé   é}   z5Control frame payload cannot be larger than 125 bytesNTFé~   r'   )r‹   rb   r†   r{   r|   r’   r   r   r   rˆ   r�   Úboolr‰   rŒ   r�   r}   ÚUNPACK_LEN2rŽ   r~   r   ÚUNPACK_LEN3r�   rŠ   r£   ra   Ú_websocket_maskrx   r`   )r@   r­   ZframesZ	start_posZ
buf_lengthr=   Z
first_byteZsecond_byter¨   Zrsv1Zrsv2Zrsv3r©   Zhas_maskZlengthrª   Z	chunk_lenr   r   r   r�   ž  sÎ    þþþþ



ÿ
ý
ÿ
ýÿ
ý


ÿ
zWebSocketReader.parse_frame)T)r   r   r   r   r   r    r³   rG   r“   rW   r   r˜   r•   r   r   r`   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e
e	ddœdd„Zdee
ee
 ddœd	d
„Zeddœdd„Zdeddœdd„Zdeddœdd„Zdeeef e	ee
 ddœdd„Zde
eddœdd„ZdS ) r   Fr   )Úuse_maskÚlimitÚrandomrr   rs   N)ÚprotocolÚ	transportr·   r¸   r¹   rr   rs   r?   c                C   sB   || _ || _|| _|j| _|| _|| _d| _|| _d| _d | _	d S )NFr   )
rº   r»   r·   Ú	randrangerr   rs   Ú_closingÚ_limitÚ_output_sizeÚ_compressobj)r@   rº   r»   r·   r¸   r¹   rr   rs   r   r   r   rG   ;  s    zWebSocketWriter.__init__)rD   r©   rr   r?   c                 Ã   sþ  | j r|tj@ stdƒ‚d}|s&| jr¬|dk r¬|rFtjtj| d�}n"| jsbtjtj| j d�| _| j}| |¡}|| 	| j
r„tjntj¡ }| t¡r¤|dd… }|dB }t|ƒ}| j}|rÄd}nd}|d	k rètd|B |B ||B ƒ}	n<|d
k �rtd|B |B d	|B |ƒ}	ntd|B |B d|B |ƒ}	|�rŠ|  dd¡}
|
 dd¡}
t|ƒ}t|
|ƒ |  |	|
 | ¡ |  jt|	ƒt|
ƒ t|ƒ 7  _nLt|ƒtk�r®|  |	¡ |  |¡ n|  |	| ¡ |  jt|	ƒt|ƒ 7  _| j| jk�rúd| _| j ¡ I dH  dS )ú<Send a frame over the websocket with message as its payload.ú!Cannot write to closing transportr   r'   )Úlevelr™   Néüÿÿÿé@   é€   r²   r:   r°   l   ÿÿ r[   Zbig)r½   r   r.   ÚConnectionResetErrorrr   rž   ÚcompressobjZZ_BEST_SPEEDrÀ   Úflushrs   ZZ_FULL_FLUSHZZ_SYNC_FLUSHÚendswithr¥   rb   r·   Ú	PACK_LEN1Ú	PACK_LEN2Ú	PACK_LEN3r¼   Úto_bytesr`   r¶   Ú_writer¿   ÚMSG_SIZEr¾   rº   Z_drain_helper)r@   rD   r©   rr   ZrsvrÈ   Z
msg_lengthr·   Zmask_bitÚheaderrZ   r   r   r   Ú_send_frameQ  sX     ÿ
ÿ


$
zWebSocketWriter._send_framer”   c                 C   s,   | j d ks| j  ¡ rtdƒ‚| j  |¡ d S )NrÂ   )r»   Z
is_closingrÇ   Úwrite)r@   r=   r   r   r   rÏ   ’  s    zWebSocketWriter._writer‚   )rD   r?   c                 Ã   s,   t |tƒr| d¡}|  |tj¡I dH  dS )zSend pong message.rš   N)r_   rP   ÚencoderÒ   r   r-   ©r@   rD   r   r   r   r5   —  s    

zWebSocketWriter.pongc                 Ã   s,   t |tƒr| d¡}|  |tj¡I dH  dS )zSend ping message.rš   N)r_   rP   rÔ   rÒ   r   r,   rÕ   r   r   r   r4   �  s    

zWebSocketWriter.ping)rD   r3   rr   r?   c                 Ã   sJ   t |tƒr| d¡}|r0|  |tj|¡I dH  n|  |tj|¡I dH  dS )rÁ   rš   N)r_   rP   rÔ   rÒ   r   r+   r*   )r@   rD   r3   rr   r   r   r   Úsend£  s
    

zWebSocketWriter.sendr   rB   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)r_   rP   rÔ   r½   rÒ   ÚPACK_CLOSE_CODEr   r.   rH   r   r   r   r6   ±  s    


 ÿzWebSocketWriter.close)N)r‚   )r‚   )FN)r   r‚   )r   r   r   ÚDEFAULT_LIMITr¹   ZRandomr   ÚasyncioZ	Transportr³   r    r   rG   rW   r   rÒ   rÏ   r5   r4   r	   rP   rÖ   r6   r   r   r   r   r   :  sD   ÷ö ÿ  þA	  ü
ûr   )F)rk   FF)KrO   rÙ   ÚcollectionsrA   r¹   ÚreÚsysrž   Úenumr   Zstructr   Útypingr   r   r   r   r   r	   Zbase_protocolr   Zhelpersr   Zstreamsr   Ú__all__r   r    r   r   Zunpack_fromr´   rµ   ZunpackrŸ   ZpackrË   rÌ   rÍ   r×   rÐ   rØ   Ú
namedtupler;   r   r0   r   r/   r   r–   r   rR   Ú	byteorderZnative_byteorderrX   r\   rW   r`   rf   r¶   Z
_websocketrg   ÚImportErrorr¥   Úcompilerp   rm   rP   r³   r    ru   rz   r{   r   r   r   r   r   r   Ú<module>   s~    






	
ÿ
 4     ÿ  þ  @