o
    4˜ŽjKO  ã                   @   sB  U d 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
 ddlmZmZ dd	lmZ d
dlmZmZmZ d
dlmZmZmZmZmZmZ dd„ eD ƒZeee  ed< d
ZdZdZ dZ!ej"Z#ej$Z%dZ&ej'j(Z)ej$j(Z*ej"j(Z+ej,j(Z-ej.j(Z/ej0j(Z1dZ2dZ3dZ4dZ5d
Z6e7j8Z9eZ:G dd„ dƒZ;G dd„ dƒZ<dS )z0Reader for WebSocket protocol versions 13 and 8.é    N)Údeque)ÚFinalé   )ÚBaseProtocol)ÚZLibDecompressor)Ú_EXC_SENTINELÚset_exception)Ú	EofStreamé   )ÚUNPACK_CLOSE_CODEÚUNPACK_LEN3Úwebsocket_mask)ÚWS_DEFLATE_TRAILINGÚWebSocketErrorÚWSCloseCodeÚ	WSMessageÚWSMessageTextBytesÚ	WSMsgTypec                 C   s   h | ]}t |ƒ’qS © )Úint)Ú.0Úir   r   úY/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiohttp/_websocket/reader_py.pyÚ	<setcomp>   s    r   ÚALLOWED_CLOSE_CODESé   é   éÿÿÿÿ)Tó    )Fr   c                   @   s¶   e Zd ZdZdededejddfdd„Zde	fd	d
„Z
dedB fdd„Zefdedejddfdd„Zddd„Zddd„Z						d dd„ZdeeB fdd„ZdeeB fdd„ZdS )!ÚWebSocketDataQueuezmWebSocketDataQueue resumes and pauses an underlying stream.

    It is a destination for WebSocket data.
    ÚprotocolÚlimitÚloopÚreturnNc                C   sN   d| _ || _|d | _|| _d| _d | _d | _tƒ | _| jj	| _
| jj| _d S )Nr   r   F)Ú_sizeÚ	_protocolÚ_limitÚ_loopÚ_eofÚ_waiterÚ
_exceptionr   Ú_bufferÚpopleftÚ_get_bufferÚappendÚ_put_buffer)Úselfr    r!   r"   r   r   r   Ú__init__=   s   

zWebSocketDataQueue.__init__c                 C   ó   | j S ©N)r(   ©r0   r   r   r   Úis_eofK   ó   zWebSocketDataQueue.is_eofc                 C   r2   r3   )r*   r4   r   r   r   Ú	exceptionN   r6   zWebSocketDataQueue.exceptionÚexcÚ	exc_causec                 C   s4   d| _ || _| j }d urd | _t|||ƒ d S d S ©NT)r(   r*   r)   r   )r0   r8   r9   Úwaiterr   r   r   r   Q   s   þz WebSocketDataQueue.set_exceptionc                 C   s2   | j  }d u r	d S d | _ | ¡ s| d ¡ d S d S r3   )r)   ÚdoneÚ
set_result)r0   r;   r   r   r   Ú_release_waiter\   s   ÿz"WebSocketDataQueue._release_waiterc                 C   s   d| _ |  ¡  d | _d S r:   )r(   r>   r*   r4   r   r   r   Úfeed_eofc   s   
zWebSocketDataQueue.feed_eofÚdataúWSMessage | WSMessageTextBytesÚsizeÚ
cython_intc                 C   sN   |  j |7  _ |  ||f¡ |  ¡  | j | jkr#| jjs%| j ¡  d S d S d S r3   )r$   r/   r>   r&   r%   Ú_reading_pausedÚpause_reading©r0   r@   rB   r   r   r   Ú	feed_datah   s   ÿzWebSocketDataQueue.feed_datac              	   Ã   sb   �| j s-| js-| jrJ ‚| j ¡ | _z| jI d H  W |  ¡ S  tjtjfy,   d | _‚ w |  ¡ S r3   )	r+   r(   r)   r'   Úcreate_futureÚasyncioÚCancelledErrorÚTimeoutErrorÚ_read_from_bufferr4   r   r   r   Úreadq   s   €
ýþzWebSocketDataQueue.readc                 C   sV   | j r!|  ¡ \}}|  j|8  _| j| jk r| jjr| j ¡  |S | jd ur)| j‚t‚r3   )	r+   r-   r$   r&   r%   rD   Úresume_readingr*   r	   rF   r   r   r   rL   |   s   

z$WebSocketDataQueue._read_from_buffer©r#   N)r@   rA   rB   rC   r#   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rI   ÚAbstractEventLoopr1   Úboolr5   ÚBaseExceptionr7   r   Úbuiltinsr   r>   r?   rG   r   r   rM   rL   r   r   r   r   r   7   s@    ÿÿÿ
þýþý
ü

ÿÿ
þ	r   c                
   @   s’   e Zd Zdededededdf
dd„Zdd	d
„Zdee	B e
B deeef fdd„ZdedeeB dee	B deeB ddf
dd„Zdeddfdd„ZdS )ÚWebSocketReaderÚqueueÚmax_msg_sizeÚcompressÚdecode_textr#   Nc                 C   sx   || _ || _|| _d | _tƒ | _t| _t| _	d| _
t| _g | _d| _d| _d| _d | _d| _d| _t| _d | _|| _d S )NFr   r   )rY   Ú_max_msg_sizeÚ_decode_textÚ_excÚ	bytearrayÚ_partialÚREAD_HEADERÚ_stateÚOP_CODE_NOT_SETÚ_opcodeÚ
_frame_finÚ_frame_opcodeÚ_payload_fragmentsÚ_frame_payload_lenÚ_tailÚ	_has_maskÚ_frame_maskÚ_payload_bytes_to_readÚ_payload_len_flagÚCOMPRESSED_NOT_SETÚ_compressedÚ_decompressobjÚ	_compress)r0   rY   rZ   r[   r\   r   r   r   r1   ‰   s&   
zWebSocketReader.__init__c                 C   s   | j  ¡  d S r3   )rY   r?   r4   r   r   r   r?   §   s   zWebSocketReader.feed_eofr@   c              
   C   sr   t |ƒtur
t|ƒ}| jd urd|fS z|  |¡ W tS  ty8 } z|| _t| j|ƒ tW  Y d }~S d }~ww r:   )	ÚtypeÚbytesr_   Ú
_feed_dataÚ	Exceptionr   rY   ÚEMPTY_FRAME_ERRORÚEMPTY_FRAME)r0   r@   r8   r   r   r   rG   ­   s   
û€ýzWebSocketReader.feed_dataÚfinÚopcodeÚpayloadÚ
compressedc              
   C   s0  |t tthv ræ|tkr| jtkrttjdƒ‚|s(|tkr|| _|  j|7  _d S t	| jƒ}|tkr8| j}t| _n|rCttjd|›�ƒ‚|rP| j| }| j 
¡  n|}|r„| js]tdd�| _| j |t | jrk| jd n| j¡}| jrƒt|ƒ| jkrƒttjd| j› �ƒ‚nt|ƒtu r�|}nt|ƒ}|t krÕ| jrÄz| d¡}W n ty² }	 zttjdƒ|	‚d }	~	ww | j ttt|d	fƒt|ƒ¡ d S | j ttt|d	fƒt|ƒ¡ d S | j ttt|d	fƒt|ƒ¡ d S |tk�r]t|ƒd
k�r9t |d d
… ƒd }
|
dk �r|
t!v�rttjd|
› �ƒ‚z|d
d …  d¡}W n t�y. }	 zttjdƒ|	‚d }	~	ww ttt"j#|
|fƒ}n|�rKttjd|› d|› d|›�ƒ‚ttt"j#dd	fƒ}| j |d¡ d S |t$k�rvttt"j%|d	fƒ}| j |t|ƒ¡ d S |t&k�r�ttt"j'|d	fƒ}| j |t|ƒ¡ d S ttjd|›�ƒ‚)Nz*Continuation frame for non started messagez8The opcode in non-fin frame is expected to be zero, got T)Úsuppress_deflate_headerr
   z(Decompressed message exceeds size limit zutf-8zInvalid UTF-8 text messageÚ r   r   i¸  zInvalid close code: zInvalid close frame: ú úUnexpected opcode=)(ÚOP_CODE_TEXTÚOP_CODE_BINARYÚOP_CODE_CONTINUATIONre   rd   r   r   ÚPROTOCOL_ERRORra   rU   Úclearrq   r   Údecompress_syncr   r]   ÚlenÚMESSAGE_TOO_BIGrs   rt   r^   ÚdecodeÚUnicodeDecodeErrorÚINVALID_TEXTrY   rG   Ú	TUPLE_NEWr   ÚWS_MSG_TYPE_TEXTr   ÚWS_MSG_TYPE_BINARYÚOP_CODE_CLOSEr   r   r   ÚCLOSEÚOP_CODE_PINGÚPINGÚOP_CODE_PONGÚPONG)r0   ry   rz   r{   r|   Úhas_partialÚassembled_payloadÚpayload_mergedÚtextr8   Ú
close_codeÚclose_messageÚmsgr   r   r   Ú_handle_frame½   sÒ   þ
ÿþ
ÿû
þ€ÿþ€ÿ	þ
ÿüþ
þÿþ€ÿþ

ÿzWebSocketReader._handle_framec                 C   sH  | j r| j | d}| _ d}t|ƒ}|}	 | jtkrÃ|| dk r"�nï|| }||d  }|d7 }|d? d@ }|d? d@ }|d? d@ }	|d	? d@ }
|d
@ }|	sU|
sU|r[| js[ttjdƒ‚|tt	t
ttthvrnt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tkr¤|r tnt| _n|r¬ttjdƒ‚|dkrµt|ƒ| _|| _t|ƒ| _|| _t| _| jtk�r<| j}|dkrî|| dk rØ�n9|| }||d  }|d7 }|d> |B | _n|dk�r|| dk rû�nt||ƒd | _|d7 }n|| _| j�r3| jt	t
thv �r3| jt| jƒ }|| jk�r3ttjd|› d| j› �ƒ‚| j�r9tnt| _| jtk�rZ|| d	k �rJnÇ|||d	 … | _|d	7 }t| _| jtk�r|| }| j|k�rt|}|  j|8  _n|| j }d| _| j }|  j || 7  _ |}|}| jdk�r�| j! "|||… ¡ nt|�rÓ| j! "|||… ¡ | j�rÇ| jdu�s¶J ‚t#d $| j!¡ƒ}t%| j|ƒ |}nd $| j!¡}| j! &¡  n,| j�rù| jdu�sßJ ‚|||… }t'|ƒt#u�rðt#|ƒ}t%| j|ƒ |}n|||… }|  (| j| j|| j¡ d| _ t| _q||k �r|||… | _ dS d| _ dS )z&Return the next frame from the socket.r   r   Tr   r
   é   é   é   r   é   z*Received frame with non-zero reserved bitsr€   z!Received fragmented control frameé   é}   z5Control frame payload cannot be larger than 125 bytesé~   é   zMessage size z exceeds limit N))rj   r‡   rc   rb   rr   r   r   r„   rƒ   r�   r‚   r�   r‘   r“   rf   rp   ro   ÚCOMPRESSED_TRUEÚCOMPRESSED_FALSErU   rg   rk   rn   ÚREAD_PAYLOAD_LENGTHrm   r   r]   ra   rˆ   ÚREAD_PAYLOAD_MASKÚREAD_PAYLOADrl   ri   rh   r.   r`   Újoinr   r…   rs   rœ   )r0   r@   Ú	start_posÚdata_lenÚ	data_cstrÚ
first_byteÚsecond_bytery   Úrsv1Úrsv2Úrsv3rz   Úhas_maskÚlengthÚlen_flagÚprojected_sizeÚ	chunk_lenÚ	f_end_posÚhad_fragmentsÚf_start_posÚpayload_bytearrayr{   r   r   r   ru   F  s  
þúþþþþ



ýÿþ
ÿ �Ð &3zWebSocketReader._feed_datarO   )rP   rQ   rR   r   r   rU   r1   r?   rt   r`   Ú
memoryviewÚtuplerG   rC   rœ   ru   r   r   r   r   rX   ˆ   s6    þýüû
ú
"þýüû
ú 
rX   )=rS   rI   rW   Úcollectionsr   Útypingr   Úbase_protocolr   Úcompression_utilsr   Úhelpersr   r   Ústreamsr	   r   r   r   Úmodelsr   r   r   r   r   r   r   Úsetr   Ú__annotations__rb   r§   r¨   r©   ÚBINARYrŽ   ÚTEXTr�   rd   ÚCONTINUATIONÚvaluerƒ   r�   r‚   r�   r�   r’   r‘   r”   r“   rw   rx   ro   r¦   r¥   r½   Ú__new__rŒ   rC   r   rX   r   r   r   r   Ú<module>   sD     	Q