
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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ÚdataÚ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   rB   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)rD   ÚsuperÚ__init__©rA   rD   rE   ©Ú	__class__r   r   rH   i   s    zWebSocketError.__init__©r@   c                 C   s
   | j d S )Nr
   )Úargs©rA   r   r   r   Ú__str__m   s    zWebSocketError.__str__)	r   r   r   Ú__doc__r    ÚstrrH   rO   Ú__classcell__r   r   rJ   r   r   f   s   r   c                   @   s   e Zd ZdZdS )ÚWSHandshakeErrorz#WebSocket protocol handshake error.N)r   r   r   rP   r   r   r   r   rS   q   s   rS   c                    s&   g | ]‰ t ‡ fd d„tdƒD ƒƒ‘qS )c                 3   s   | ]}|ˆ A V  qd S rF   r   )r!   Úa©Úbr   r   Ú	<genexpr>y   s     z<listcomp>.<genexpr>r(   )ÚbytesÚrange)r!   r   rU   r   Ú
<listcomp>y   s     rZ   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 rF   )Ú
_XOR_TABLE)r!   Únr   r   r   rW   �   s     z)_websocket_mask_python.<locals>.<genexpr>Nr
   r$   é   )Ú
isinstanceÚ	bytearrayÚAssertionErrorÚlenÚ	translate)r[   r=   rT   rV   ÚcÚdr   r   r   Ú_websocket_mask_python|   s    rg   )Ú_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    rS   )rj   rk   ÚcompressÚ
notakeoverÚextZdefextrr   r   r   r   Úws_ext_parse¬   s>    





rv   rl   )rs   rk   Ú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%   rl   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ÚappendrQ   Újoin)rs   rk   rw   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
   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_sizers   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Ú_excra   Ú_partialr|   r}   Ú_stateÚ_opcodeÚ
_frame_finÚ_frame_opcodeÚ_frame_payloadÚ_tailÚ	_has_maskÚ_frame_maskÚ_payload_lengthÚ_payload_length_flagÚ_compressedÚ_decompressobjÚ	_compress)rA   r�   r‚   rs   r   r   r   rH   ý   s"    zWebSocketReader.__init__rL   c                 C   s   | j  ¡  d S rF   )r�   Úfeed_eofrN   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�   Úset_exception)rA   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’   ÚzlibÚdecompressobjÚ	MAX_WBITSr   r.   rc   ÚUNPACK_CLOSE_CODEÚALLOWED_CLOSE_CODESr   r   r   ÚdecodeÚUnicodeDecodeErrorr   r   r�   rš   r,   r-   r*   r+   rˆ   r)   r†   Úextendr„   r   Úformatrb   Ú_WS_DEFLATE_TRAILINGÚ
decompressÚunconsumed_tailrX   Úclear)rA   r=   ÚfinÚopcodeÚpayloadÚ
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
   rm   é   r\   rl   z*Received frame with non-zero reserved bitsz!Received fragmented control frameé   é}   z5Control frame payload cannot be larger than 125 bytesNTFé~   r'   )rŒ   rc   r‡   r|   r}   r“   r   r   r   r‰   r‘   ÚboolrŠ   r�   r�   r~   ÚUNPACK_LEN2r�   r   r€   ÚUNPACK_LEN3rŽ   r‹   r§   rb   Ú_websocket_maskry   ra   )rA   r³   ÚframesZ	start_posZ
buf_lengthr=   Z
first_byteZsecond_byter­   Zrsv1Zrsv2Zrsv3r®   Zhas_maskÚlengthr¯   Z	chunk_lenr   r   r   rŸ   ž  sÎ    þþþþ



ÿ
ý
ÿ
ýÿ
ý


ÿ
zWebSocketReader.parse_frame)T)r   r   r   r   r   r    r¹   rH   r”   rX   r   rš   r–   r   r   ra   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Úrandomrs   rt   N)ÚprotocolÚ	transportr¿   rÀ   rÁ   rs   rt   r@   c                C   sB   || _ || _|| _|j| _|| _|| _d| _|| _d| _d | _	d S )NFr   )
rÂ   rÃ   r¿   Ú	randrangers   rt   Ú_closingÚ_limitÚ_output_sizeÚ_compressobj)rA   rÂ   rÃ   r¿   rÀ   rÁ   rs   rt   r   r   r   rH   ;  s    zWebSocketWriter.__init__)rE   r®   rs   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\   Úbig)rÅ   r   r.   ÚConnectionResetErrorrs   r    ÚcompressobjÚZ_BEST_SPEEDrÈ   Úflushrt   ÚZ_FULL_FLUSHÚZ_SYNC_FLUSHÚendswithr©   rc   r¿   Ú	PACK_LEN1Ú	PACK_LEN2Ú	PACK_LEN3rÄ   Úto_bytesra   r¼   Ú_writerÇ   ÚMSG_SIZErÆ   rÂ   Z_drain_helper)rA   rE   r®   rs   ZrsvrÑ   Z
msg_lengthr¿   Zmask_bitÚheaderr[   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)rA   r=   r   r   r   rÛ   ’  s    zWebSocketWriter._writerƒ   )rE   r@   c                 Ã   s,   t |tƒr| d¡}|  |tj¡I dH  dS )zSend pong message.rœ   N)r`   rQ   ÚencoderÞ   r   r-   ©rA   rE   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`   rQ   rà   rÞ   r   r,   rá   r   r   r   r4   �  s    

zWebSocketWriter.ping)rE   r3   rs   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`   rQ   rà   rÞ   r   r+   r*   )rA   rE   r3   rs   r   r   r   Úsend£  s
    

zWebSocketWriter.sendr   rC   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`   rQ   rà   rÅ   rÞ   ÚPACK_CLOSE_CODEr   r.   rI   r   r   r   r6   ±  s    


 ÿzWebSocketWriter.close)N)rƒ   )rƒ   )FN)r   rƒ   )r   r   r   ÚDEFAULT_LIMITrÁ   ÚRandomr   ÚasyncioZ	Transportr¹   r    r   rH   rX   r   rÞ   rÛ   r5   r4   r	   rQ   râ   r6   r   r   r   r   r   :  sD   ÷ö ÿ  þA	  ü
ûr   )F)rl   FF)KrP   ræ   ÚcollectionsrB   rÁ   ÚreÚsysr    Úenumr   Ústructr   Útypingr   r   r   r   r   r	   Zbase_protocolr   Zhelpersr   Zstreamsr   Ú__all__r   r¤   r   r   Úunpack_fromrº   r»   Úunpackr£   Úpackr×   rØ   rÙ   rã   rÜ   rä   Ú
namedtupler;   r   r0   r   r/   r   r—   r   rS   Ú	byteorderZnative_byteorderrY   r]   rX   ra   rg   r¼   Z
_websocketrh   ÚImportErrorr©   Úcompilerq   rn   rQ   r¹   r    rv   r{   r|   r   r   r   r   r   r   Ú<module>   s~    






	
ÿ
 4     ÿ  þ  @