a
     ÑOcÓb  ã                   @   sø  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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 dd
lmZ dZG dd„ de	ƒZdd„ eD ƒZ eee!  e"d< G dd„ de	ƒZ#dZ$ee% e"d< 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Z0ee! e"d< dZ1ee! e"d< e 2dg d¢¡Z3G d d!„ d!e3ƒZ4e4e#j5ddƒZ6e4e#j7ddƒZ8G d"d#„ d#e9ƒZ:G d$d%„ d%e9ƒZ;ej<Z=ee> e"d&< d'd(„ e?d)ƒD ƒZ@eee%  e"d*< e%eAdd+œd,d-„ZBe�reBZCn.zdd.lDmEZE eEZCW n eF�yD   eBZCY n0 e%g d/¢ƒZGee% e"d0< e Hd1¡ZIeee>  e"d2< e Hd3¡ZJeee>  e"d4< dCee> eKee!eKf d6œd7d8„ZLdDe!eKeKe>d:œd;d<„ZMG d=d>„ d>e	ƒZNG d?d@„ d@ƒZOG dAdB„ dBƒZPdS )Ez%WebSocket protocol versions 13 and 8.é    N)ÚIntEnum)ÚStruct)	ÚAnyÚCallableÚListÚOptionalÚPatternÚSetÚTupleÚUnionÚcasté   )ÚBaseProtocol)ÚNO_EXTENSIONS)Ú	DataQueue)ÚFinal)	Ú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%   úM/var/www/html/gsl.tools/lib/python3.9/site-packages/aiohttp/http_websocket.pyr       s   r   c                 C   s   h | ]}t |ƒ’qS r%   )Úint)Ú.0Úir%   r%   r&   Ú	<setcomp>0   ó    r*   ÚALLOWED_CLOSE_CODESc                   @   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   3   s"   r   s$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11r   z!Hz!Qz!BBz!BBHz!BBQi @  ÚMSG_SIZEé   ÚDEFAULT_LIMITÚ_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)rJ   Úreturnc                C   s
   || j ƒS )zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )rH   )ÚselfrJ   r%   r%   r&   Újson]   s    zWSMessage.jsonN)r   r   r   rM   rJ   r   r   r%   r%   r%   r&   r   \   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ÚmessagerK   c                    s   || _ tƒ  ||¡ d S ©N)rO   ÚsuperÚ__init__©rL   rO   rP   ©Ú	__class__r%   r&   rS   l   s    zWebSocketError.__init__©rK   c                 C   s   t t| jd ƒS )Nr   )r   ÚstrÚargs©rL   r%   r%   r&   Ú__str__p   s    zWebSocketError.__str__)	r   r   r   Ú__doc__r'   rX   rS   r[   Ú__classcell__r%   r%   rU   r&   r   i   s   r   c                   @   s   e Zd ZdZdS )ÚWSHandshakeErrorz#WebSocket protocol handshake error.N)r   r   r   r\   r%   r%   r%   r&   r^   t   s   r^   Únative_byteorderc                    s&   g | ]‰ t ‡ fd d„tdƒD ƒƒ‘qS )c                 3   s   | ]}|ˆ A V  qd S rQ   r%   )r(   Úa©Úbr%   r&   Ú	<genexpr>|   r+   z<listcomp>.<genexpr>r1   )ÚbytesÚrange)r(   r%   ra   r&   Ú
<listcomp>|   r+   rf   r1   Ú
_XOR_TABLE)ÚmaskrH   rK   c                 C   s¼   t |tƒsJ |ƒ‚t| ƒdks&J | ƒ‚|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 rQ   )rg   )r(   Únr%   r%   r&   rc   �   r+   z)_websocket_mask_python.<locals>.<genexpr>Nr   r-   é   )Ú
isinstanceÚ	bytearrayÚlenÚ	translate)rh   rH   r`   rb   ÚcÚdr%   r%   r&   Ú_websocket_mask_python   s    rr   )Ú_websocket_mask_cython)r   r   éÿ   rt   Ú_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ÚisserverrK   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   é   ri   r.   Té   zInvalid window sizer-   z#Extension for deflate not supported)rw   ÚfinditerÚgrouprv   Úmatchr'   r^   )rx   ry   ÚcompressÚ
notakeoverÚextZdefextr~   r%   r%   r&   Úws_ext_parse¯   s>    





r‚   rz   )r   ry   Úserver_notakeoverrK   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.   rz   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ÚappendrX   Újoin)r   ry   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   r-   rk   ri   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_sizer   rK   c                 C   sp   || _ || _d | _tƒ | _tj| _d | _d| _	d | _
tƒ | _d| _d| _d | _d| _d| _d | _d | _|| _d S )NFr+   r   )r�   Ú_max_msg_sizeÚ_excrm   Ú_partialrˆ   r‰   Ú_stateÚ_opcodeÚ
_frame_finÚ_frame_opcodeÚ_frame_payloadÚ_tailÚ	_has_maskÚ_frame_maskÚ_payload_lengthÚ_payload_length_flagÚ_compressedÚ_decompressobjÚ	_compress)rL   r�   rŽ   r   r%   r%   r&   rS      s"    zWebSocketReader.__init__rW   c                 C   s   | j  ¡  d S rQ   )r�   Úfeed_eofrZ   r%   r%   r&   rŸ     s    zWebSocketReader.feed_eof©rH   rK   c              
   C   sX   | j rd|fS z|  |¡W S  tyR } z || _ | j |¡ W Y d }~dS d }~0 0 d S )NT)Tr+   )r�   Ú
_feed_dataÚ	Exceptionr�   Zset_exception)rL   rH   Úexcr%   r%   r&   Ú	feed_data  s    zWebSocketReader.feed_datac                 C   sŽ  |   |¡D �]|\}}}}|r4| js4tjtj d�| _|tjk�r t|ƒdkrÜt|d d… ƒd }|dk r‚|t	vr‚t
tjd|› �ƒ‚z|dd …  d¡}W n2 tyÊ } zt
tjdƒ|‚W Y d }~n
d }~0 0 ttj||ƒ}	n4|�rt
tjd|› d	|› d	|›�ƒ‚nttjdd
ƒ}	| j |	d¡ q
|tjk�rJ| j ttj|d
ƒt|ƒ¡ q
|tjk�rt| j ttj|d
ƒt|ƒ¡ q
|tjtjfv�r¦| jd u �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�rP| jd u�sDJ ‚| 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�rlz*|
 d¡}| j ttj|d
ƒt|ƒ¡ W n4 t�yh } zt
tjdƒ|‚W Y d }~n
d }~0 0 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   r7   rn   ÚUNPACK_CLOSE_CODEr,   r   r   r    ÚdecodeÚUnicodeDecodeErrorr!   r   r�   r¤   r5   r6   r3   r4   r“   r2   r‘   Úextendr�   r"   Úformatru   Ú
decompressÚunconsumed_tailrd   Úclear)rL   rH   ÚfinÚopcodeÚpayloadÚ
compressedZ
close_codeZclose_messager£   ÚmsgZpayload_mergedÚleftr;   r%   r%   r&   r¡   &  sÒ    
þÿþþÿÿÿþÿÿþ	ÿþÿþ	ÿ
ÿþ


ÿÿþþzWebSocketReader._feed_data)ÚbufrK   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u �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u�s8J ‚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   r{   é   ri   rz   z*Received frame with non-zero reserved bitsz!Received fragmented control frameé   é}   z5Control frame payload cannot be larger than 125 bytesNTFé~   r0   )r—   rn   r’   rˆ   r‰   rž   r   r   r    r”   rœ   Úboolr•   r˜   r›   rŠ   ÚUNPACK_LEN2rš   r‹   rŒ   ÚUNPACK_LEN3r™   r–   r°   Ú_websocket_maskr…   rm   )rL   r»   ÚframesZ	start_posZ
buf_lengthrH   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Á   rS   rŸ   rd   r
   r¤   r¡   r   r   rm   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Úrandomr   r€   N)ÚprotocolÚ	transportrÇ   rÈ   rÉ   r   r€   rK   c                C   sB   || _ || _|| _|j| _|| _|| _d| _|| _d| _d | _	d S )NFr   )
rÊ   rË   rÇ   Ú	randranger   r€   Ú_closingÚ_limitÚ_output_sizeÚ_compressobj)rL   rÊ   rË   rÇ   rÈ   rÉ   r   r€   r%   r%   r&   rS   >  s    zWebSocketWriter.__init__)rP   r¶   r   rK   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   r0   )Úlevelr¥   Néüÿÿÿé@   é€   rÀ   rD   r¾   l   ÿÿ ri   Úbig)rÍ   r   r7   ÚConnectionResetErrorr   rª   ÚcompressobjÚZ_BEST_SPEEDrÐ   Úflushr€   ÚZ_FULL_FLUSHÚZ_SYNC_FLUSHÚendswithru   rn   rÇ   Ú	PACK_LEN1Ú	PACK_LEN2Ú	PACK_LEN3rÌ   Úto_bytesrm   rÄ   Ú_writerÏ   rC   rÎ   rÊ   Z_drain_helper)rL   rP   r¶   r   ZrsvrÙ   Z
msg_lengthrÇ   Zmask_bitÚheaderrh   r%   r%   r&   Ú_send_frameT  sV    
ÿ
ÿ


$
zWebSocketWriter._send_framer    c                 C   s,   | j d u s| j  ¡ rtdƒ‚| j  |¡ d S )NrÒ   )rË   Z
is_closingrØ   Úwrite)rL   rH   r%   r%   r&   rã   •  s    zWebSocketWriter._writer+   )rP   rK   c                 Ã   s,   t |tƒr| d¡}|  |tj¡I dH  dS )zSend pong message.r¦   N)rl   rX   Úencoderå   r   r6   ©rL   rP   r%   r%   r&   r>   š  s    

zWebSocketWriter.pongc                 Ã   s,   t |tƒr| d¡}|  |tj¡I dH  dS )zSend ping message.r¦   N)rl   rX   rç   rå   r   r5   rè   r%   r%   r&   r=      s    

zWebSocketWriter.ping)rP   r<   r   rK   c                 Ã   sJ   t |tƒr| d¡}|r0|  |tj|¡I dH  n|  |tj|¡I dH  dS )rÑ   r¦   N)rl   rX   rç   rå   r   r4   r3   )rL   rP   r<   r   r%   r%   r&   Úsend¦  s
    

zWebSocketWriter.sendr   rN   c                 Ã   sJ   t |tƒr| d¡}z(| jt|ƒ| tjd�I dH  W d| _nd| _0 dS )z<Close the websocket, sending the specified code and message.r¦   )r¶   NT)rl   rX   rç   rå   ÚPACK_CLOSE_CODEr   r7   rÍ   rT   r%   r%   r&   r?   ´  s    

ÿzWebSocketWriter.close)N)r+   )r+   )FN)r   r+   )r   r   r   rE   rÉ   ÚRandomr   ÚasyncioÚ	TransportrÁ   r'   r   rS   rd   r   rå   rã   r>   r=   r   rX   ré   r?   r%   r%   r%   r&   r   =  s@   ÷ö ÿ
þA	  ü
ûr   )F)rz   FF)Qr\   rì   ÚcollectionsrM   rÉ   ÚreÚsysrª   Úenumr   Ústructr   Útypingr   r   r   r   r   r	   r
   r   r   Zbase_protocolr   Zhelpersr   Zstreamsr   Ztypedefsr   Ú__all__r   r,   r'   Ú__annotations__r   r   rd   Úunpack_fromrÂ   rÃ   Úunpackr­   Úpackrß   rà   rá   rê   rC   rE   Ú
namedtuplerF   r   r9   r   r8   r   r¢   r   r^   Ú	byteorderr_   rX   re   rg   rm   rr   rÄ   Z
_websocketrs   ÚImportErrorru   Úcompilerv   rw   rÁ   r‚   r‡   rˆ   r   r   r%   r%   r%   r&   Ú<module>   sx   ,






	"
ÿ 4 ÿþ  @