o
    çûõjf  ã                   @   s„  U d 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 ddlmZmZ dd	l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"d< dZ#dZ$dZ%dZ&ej'Z(ej)Z*ej+Z,dZ-ej.j/Z0ej+j/Z1ej)j/Z2ej3j/Z4ej5j/Z6ej7j/Z8dZ9dZ:dZ;dZ<dZ=e>j?Z@dZAee! e"d< dZBeeC e"d< e!ZDG dd„ dƒZEG dd„ dƒZFdS )z0Reader for WebSocket protocol versions 13 and 8.é    N)Údeque)ÚFinalé   )ÚBaseProtocol)ÚTooManyMembersErrorÚZLibDecompressor)Ú_EXC_SENTINELÚset_exception)Ú	ws_logger)Ú	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   úO/opt/steambot/venv/lib/python3.10/site-packages/aiohttp/_websocket/reader_py.pyÚ	<setcomp>   s    r   ÚALLOWED_CLOSE_CODESé   é   éÿÿÿÿ)Tó    )Fr    é€   ÚMSG_SIZE_OVERHEADziWebSocketReader was garbage collected while stalled; callers of set_parser() must hold a strong referenceÚSTALLED_READER_COLLECTEDc                   @   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   sT   d| _ || _|d | _|| _d| _d | _d | _tƒ | _| jj	| _
| jj| _d | _d S )Nr   r   F)Ú_sizeÚ	_protocolÚ_limitÚ_loopÚ_eofÚ_waiterÚ
_exceptionr   Ú_bufferÚpopleftÚ_get_bufferÚappendÚ_put_bufferÚ_stalled_reader)Úselfr%   r&   r'   r   r   r   Ú__init__O   s   



zWebSocketDataQueue.__init__c                 C   ó   | j S ©N)r-   ©r6   r   r   r   Úis_eof^   ó   zWebSocketDataQueue.is_eofc                 C   r8   r9   )r/   r:   r   r   r   Ú	exceptiona   r<   zWebSocketDataQueue.exceptionÚexcÚ	exc_causec                 C   s4   d| _ || _| j }d urd | _t|||ƒ d S d S ©NT)r-   r/   r.   r	   )r6   r>   r?   Úwaiterr   r   r   r	   d   s   þz WebSocketDataQueue.set_exceptionc                 C   s2   | j  }d u r	d S d | _ | ¡ s| d ¡ d S d S r9   )r.   ÚdoneÚ
set_result)r6   rA   r   r   r   Ú_release_waitero   s   ÿz"WebSocketDataQueue._release_waiterc                 C   s   d| _ |  ¡  d | _d S r@   )r-   rD   r/   r:   r   r   r   Úfeed_eofv   s   
zWebSocketDataQueue.feed_eofÚdataúWSMessage | WSMessageTextBytesÚsizeÚ
cython_intc                 C   sR   |  j |t 7  _ |  ||f¡ |  ¡  | j | jkr%| jjs'| j ¡  d S d S d S r9   )r)   r"   r4   rD   r+   r*   Ú_reading_pausedÚpause_reading)r6   rF   rH   r   r   r   Ú	feed_data{   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 r9   )	r0   r-   r.   r,   Úcreate_futureÚasyncioÚCancelledErrorÚTimeoutErrorÚ_read_from_bufferr:   r   r   r   Úread„   s   €
ýþzWebSocketDataQueue.readc                 C   sÂ   | j rW|  ¡ \}}|  j|t 8  _| jd urA| j| jd krA|  ¡  }d ur-| d¡ nd | _t t	¡ | j
d u rA|  tt	ƒ¡ | jd u rU| j| jk rU| jjrU| j ¡  |S | j
d ur_| j
‚t‚)Nr   r    )r0   r2   r)   r"   r5   r+   rL   r
   Úwarningr#   r/   r	   ÚRuntimeErrorr*   rJ   Úresume_readingr   )r6   rF   rH   Úreaderr   r   r   rQ   �   s&   


ÿ

z$WebSocketDataQueue._read_from_buffer©r(   N)rF   rG   rH   rI   r(   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rN   ÚAbstractEventLoopr7   Úboolr;   ÚBaseExceptionr=   r   Úbuiltinsr	   rD   rE   rL   r   r   rR   rQ   r   r   r   r   r$   I   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   s¤   || _ || _|| _t | ¡| _d | _tƒ | _t	| _
t| _d| _t| _g | _|r.td|d ƒnd| _tƒ | _d| _d| _d| _d | _d| _d| _t| _d | _|| _d S )NFi   é   r   r    )ra   Ú_max_msg_sizeÚ_decode_textÚweakrefÚrefÚ
_weak_selfÚ_excÚ	bytearrayÚ_partialÚREAD_HEADERÚ_stateÚOP_CODE_NOT_SETÚ_opcodeÚ
_frame_finÚ_frame_opcodeÚ_payload_fragmentsÚmaxÚ_max_fragmentsÚ_payload_bufferÚ_frame_payload_lenÚ_tailÚ	_has_maskÚ_frame_maskÚ_payload_bytes_to_readÚ_payload_len_flagÚCOMPRESSED_NOT_SETÚ_compressedÚ_decompressobjÚ	_compress)r6   ra   rb   rc   rd   r   r   r   r7   µ   s,   
zWebSocketReader.__init__c                 C   s   | j  ¡  d S r9   )ra   rE   r:   r   r   r   rE   Û   s   zWebSocketReader.feed_eofrF   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Úbytesrk   Ú
_feed_dataÚ	Exceptionr	   ra   ÚEMPTY_FRAME_ERRORÚEMPTY_FRAME)r6   rF   r>   r   r   r   rL   á   s   
û€ýzWebSocketReader.feed_dataÚfinÚopcodeÚpayloadÚ
compressedc              
   C   sz  |t tthv �r|tkr| jtkrttjdƒ‚|s7|tkr.| jtkr+ttjd|›�ƒ‚|| _|  j|7  _d S t	| jƒ}|tkrG| j}t| _n|rRttjd|›�ƒ‚|r_| j| }| j 
¡  n|}|r©| jsltdd�| _z| j |t | jr{| jd n| j¡}W n ty“ } zttjdƒ|‚d }~ww | 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�r^t!|d d… ƒd }
|
dk �r4|
t"v�r4ttjd|
› �ƒ‚z|dd …  d¡}W n t�yS } zttjd	ƒ|‚d }~ww ttt#j$|
|fƒ}n|�rpttjd|› d|› d|›�ƒ‚ttt#j$dd
fƒ}| j |d¡ d S |t%k�r›t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/Compressed message has too many deflate membersz(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_CONTINUATIONrq   rp   r   r   ÚPROTOCOL_ERRORrm   r]   Úclearr€   r   Údecompress_syncr   rf   r   ÚMESSAGE_TOO_BIGÚlenr‚   rƒ   rg   ÚdecodeÚUnicodeDecodeErrorÚINVALID_TEXTra   rL   Ú	TUPLE_NEWr   ÚWS_MSG_TYPE_TEXTr   ÚWS_MSG_TYPE_BINARYÚOP_CODE_CLOSEr   r   r   ÚCLOSEÚOP_CODE_PINGÚPINGÚOP_CODE_PONGÚPONG)r6   rˆ   r‰   rŠ   r‹   Úhas_partialÚassembled_payloadÚpayload_mergedr>   ÚtextÚ
close_codeÚclose_messageÚmsgr   r   r   Ú_handle_frameñ   sô   þ
ÿþ
ÿþ
ÿûþý€ÿ
þ€ÿþ€ÿ	þ
ÿüþ
þÿþ€ÿþ

ÿzWebSocketReader._handle_framec                 C   sZ  d| j _| jr| j| d}| _d}t|ƒ}|}	 ||k r,| j j| j jkr,| j| j _�nn| jtkrÚ|| dk r9�na|| }||d  }|d7 }|d? d@ }|d? d@ }|d	? d@ }	|d
? d@ }
|d@ }|	sl|
sl|rr| j	srt
tjdƒ‚|tttttthvr…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ƒ‚|dkrÌ| js·| jtkr¿|r»tnt| _n|rÇt
tjdƒ‚t|ƒ| _|| _t|ƒ| _|| _t| _| jtk�rx| j}|dk�r|| dk rð�nª|| }||d  }|d7 }|d> |B | _n<|dk�r?|| dk �r�n†t||ƒd }|tk�r7t
tj dt!|ƒt| j"ƒ › d| j#�p3t› �ƒ‚|| _|d7 }n|| _| j#�ro| jttthv �rot| j"ƒ}| j| j#| k�rot
tj dt!| jƒ| › d| j#› �ƒ‚| j�rut$nt%| _| jt$k�r—|| d
k �r‡�n|||d
 … | _&|d
7 }t%| _| jt%k�r™|| }| j|k�r±|}|  j|8  _n|| j }d| _| j'}|  j'|| 7  _'|}|}| jdk�rü||k �rÞ| j( )|||… ¡ | j*�rût| j(ƒ| j*k�rû|  j+d ,| j(¡7  _+| j( -¡  nž|�r\| j( )|||… ¡ | j+�r3|  j+d ,| j(¡7  _+| j�r+| j&du�s$J ‚t.| j&| j+ƒ | j+}t/ƒ | _+n#| j�rP| j&du�s?J ‚t/d ,| j(¡ƒ}t.| j&|ƒ |}nd ,| j(¡}| j( -¡  n,| j�r‚| j&du�shJ ‚|||… }t0|ƒt/u�ryt/|ƒ}t.| j&|ƒ |}n|||… }|  1| j| j|| j¡ d| _'t| _q||k �r¨|||… | _dS d| _dS )z&Return the next frame from the socket.Nr    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 )2ra   r5   ry   r—   r)   r+   rj   ro   rn   r�   r   r   r“   r’   r�   r‘   rž   r    r¢   rr   r   r~   ÚCOMPRESSED_TRUEÚCOMPRESSED_FALSEr]   rs   rz   r}   ÚREAD_PAYLOAD_LENGTHr|   r   ÚMAX_PAYLOAD_LENr–   r   rm   rf   ÚREAD_PAYLOAD_MASKÚREAD_PAYLOADr{   rx   rt   r3   rv   rw   Újoinr”   r   rl   r‚   r«   )r6   rF   Ú	start_posÚdata_lenÚ	data_cstrÚ
first_byteÚsecond_byterˆ   Úrsv1Úrsv2Úrsv3r‰   Úhas_maskÚlengthÚlen_flagÚ	frame_lenÚpartial_lenÚ	chunk_lenÚ	f_end_posÚhad_fragmentsÚf_start_posrŠ   Úpayload_bytearrayr   r   r   r„   ‡  s>  

þúþþþþ





ÿþ
ý
ÿþ

ÿ

ÿ �¬ &WzWebSocketReader._feed_datarW   )rX   rY   rZ   r$   r   r]   r7   rE   rƒ   rl   Ú
memoryviewÚtuplerL   rI   r«   r„   r   r   r   r   r`   ´   s6    þýüû
ú
&"þýüû
ú r`   )Gr[   rN   r_   Úsysrh   Úcollectionsr   Útypingr   Úbase_protocolr   Úcompression_utilsr   r   Úhelpersr   r	   Úlogr
   Ústreamsr   r   r   r   Úmodelsr   r   r   r   r   r   r   Úsetr   Ú__annotations__rn   r¶   r¸   r¹   Úmaxsizer·   ÚBINARYr�   ÚTEXTrœ   rp   ÚCONTINUATIONÚvaluer’   r�   r‘   rŸ   rž   r¡   r    r£   r¢   r†   r‡   r~   rµ   r´   rÎ   Ú__new__r›   r"   r#   ÚstrrI   r$   r`   r   r   r   r   Ú<module>   sR     	ÿk