a
    `g7F                     @   sF  U d Z ddlZddlZddlmZ ddl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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 dd eD Zee
e   e!d< d
Z"dZ#dZ$dZ%ej&Z'ej(Z)ej*j+Z,ej(j+Z-ej&j+Z.ej/j+Z0ej1j+Z2ej3j+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)DequeFinalListOptionalSetTupleUnion   )BaseProtocol)ZLibDecompressor)_EXC_SENTINELset_exception)	EofStream   )UNPACK_CLOSE_CODEUNPACK_LEN3websocket_mask)WS_DEFLATE_TRAILINGWebSocketErrorWSCloseCode	WSMessage	WSMsgTypec                 C   s   h | ]}t |qS  )int).0ir   r   j/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/_websocket/reader_py.py	<setcomp>       r   ALLOWED_CLOSE_CODES      )Tr   )Fr   c                   @   s   e Zd ZdZeeejddddZe	dddZ
ee dd	d
ZefdejddddZddddZddddZddddddZedddZedddZdS )WebSocketDataQueuezmWebSocketDataQueue resumes and pauses an underlying stream.

    It is a destination for WebSocket data.
    N)protocollimitloopreturnc                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__7   s    

zWebSocketDataQueue.__init__r'   c                 C   s   | j S N)r,   r4   r   r   r   is_eofE   s    zWebSocketDataQueue.is_eofc                 C   s   | j S r7   )r.   r8   r   r   r   	exceptionH   s    zWebSocketDataQueue.exceptionBaseException)exc	exc_causer'   c                 C   s0   d| _ || _| j }d ur,d | _t||| d S NT)r,   r.   r-   r   )r4   r<   r=   waiterr   r   r   r   K   s
    z WebSocketDataQueue.set_exceptionc                 C   s.   | j  }d u rd S d | _ | s*|d  d S r7   )r-   done
set_result)r4   r?   r   r   r   _release_waiterV   s
    z"WebSocketDataQueue._release_waiterc                 C   s   d| _ |   d S r>   )r,   rB   r8   r   r   r   feed_eof]   s    zWebSocketDataQueue.feed_eofr   int_)datasizer'   c                 C   sF   |  j |7  _ | ||f |   | j | jkrB| jjsB| j  d S r7   )r(   r3   rB   r*   r)   _reading_pausedpause_readingr4   rE   rF   r   r   r   	feed_dataa   s
    zWebSocketDataQueue.feed_datac              	      s^   | j sV| jsV| jrJ | j | _z| jI d H  W n" tjtjfyT   d | _ Y n0 |  S r7   )	r/   r,   r-   r+   create_futureasyncioCancelledErrorTimeoutError_read_from_bufferr8   r   r   r   readh   s    
zWebSocketDataQueue.readc                 C   sZ   | j rB|  \}}|  j|8  _| j| jk r>| jjr>| j  |S | jd urR| jtd S r7   )	r/   r1   r(   r*   r)   rG   resume_readingr.   r   rI   r   r   r   rO   s   s    

z$WebSocketDataQueue._read_from_buffer)__name__
__module____qualname____doc__r   r   rL   AbstractEventLoopr5   boolr9   r   r;   r:   r   builtinsr   rB   rC   rJ   r   rP   rO   r   r   r   r   r#   1   s"   r#   c                   @   s   e Zd ZdeeeddddZddddZee	e
ef eee	f d	d
dZe	dd	ddZe	eeeee ee	e
f ee f  dddZdS )WebSocketReaderTN)queuemax_msg_sizecompressr'   c                 C   sr   || _ || _d | _t | _t| _d | _d| _d | _	d| _
d| _d| _d| _d | _d| _d| _d | _d | _|| _d S )NFr   r   )rZ   _max_msg_size_exc	bytearray_partialREAD_HEADER_state_opcode
_frame_fin_frame_opcode_frame_payload_frame_payload_len_tail	_has_mask_frame_mask_payload_length_payload_length_flag_compressed_decompressobj	_compress)r4   rZ   r[   r\   r   r   r   r5      s$    zWebSocketReader.__init__r6   c                 C   s   | j   d S r7   )rZ   rC   r8   r   r   r   rC      s    zWebSocketReader.feed_eof)rE   r'   c              
   C   st   t |turt|}| jd ur&d|fS z| | W n: tyn } z"|| _t| j| tW  Y d }~S d }~0 0 tS r>   )	typebytesr^   
_feed_data	Exceptionr   rZ   EMPTY_FRAME_ERROREMPTY_FRAME)r4   rE   r<   r   r   r   rJ      s    
zWebSocketReader.feed_datac                 C   s  |  |D ]}|d }|d }|d }|d }|tk}|tksN|tksN|rD|s|s\|| _|  j|7  _| jr
t| j| jkr
tt	j
dt| j| jq
t| j}|r| jd u rtt	jd| j}d | _n|rtt	jd||r| j| }	| j  n|}	| jr8t|	| jkr8tt	j
dt|	| j|r| jsRtdd	| _| j|	t | j}
| jjrt| jj}tt	j
d
| j| | jnt|	tu r|	}
nt|	}
|tkr$z|
d}W n4 ty } ztt	jd|W Y d }~n
d }~0 0 | jttt|dft|
 n| jttt|
dft|
 q
|tkr>t|dkrt |d d d }|dk r|t!vrtt	jd| z|dd  d}W n4 ty } ztt	jd|W Y d }~n
d }~0 0 ttt"j#||f}n8|rtt	jd| d| d|nttt"j#ddf}| j|d q
|t$krnttt"j%|df}| j|t| q
|t&krttt"j'|df}| j|t| q
tt	jd|q
d S )Nr   r   r
   r!   z Message size {} exceeds limit {}z*Continuation frame for non started messagez<The opcode in non-fin frame is expected to be zero, got {!r}T)Zsuppress_deflate_headerz-Decompressed message size {} exceeds limit {}zutf-8zInvalid UTF-8 text message i  zInvalid close code: zInvalid close frame:  zUnexpected opcode=)(parse_frameOP_CODE_CONTINUATIONOP_CODE_TEXTOP_CODE_BINARYrc   r`   r]   lenr   r   ZMESSAGE_TOO_BIGformatrW   PROTOCOL_ERRORclearrn   r   Zdecompress_syncr   unconsumed_tailrp   rq   decodeUnicodeDecodeErrorZINVALID_TEXTrZ   rJ   	TUPLE_NEWr   WS_MSG_TYPE_TEXTWS_MSG_TYPE_BINARYOP_CODE_CLOSEr   r    r   CLOSEOP_CODE_PINGPINGOP_CODE_PONGPONG)r4   rE   framefinopcodepayload
compressedZis_continuationZhas_partialZassembled_payloadZpayload_mergedlefttextr<   Z
close_codeZclose_messagemsgr   r   r   rr      s    



	





zWebSocketReader._feed_data)bufr'   c                 C   s  g }| j r| j | d }| _ d}t|}| jtkrd|| dk rDqz|| }||d  }|d7 }|d? d@ }|d? d@ }|d? d@ }	|d? d@ }
|d	@ }|	s|
s|r| jsttjd
|dkr|dkrttjd|d? d@ }|d@ }|dkr|dkrttjd| js| j	du r,|r$dnd| _	n|r>ttjd
t
|| _|| _t
|| _|| _t| _| jtkr| j}|dkr|| dk rqz|| }||d  }|d7 }|d> |B | _nJ|dkr|| dk rڐqz|||d  }|d7 }t|d | _n|| _| jrtnt| _| jtkrX|| dk r8qz|||d  | _|d7 }t| _| jtkr(|| }| j|kr|}|  j|8  _n|| j }d| _| jrt| jturt| j| _|  j||| 7  _n||| | _|  j|| 7  _|}| jdkr
qz| jrL| jdus"J t| jtur>t| j| _t| j| j || j| j| j| j	f d| _d| _t| _q(||k r||d nd| _ |S )z&Return the next frame from the socket.r   r   r
   r            r"      z*Received frame with non-zero reserved bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytesNTF~      )rh   r|   rb   ra   ro   r   r   r~   rd   rm   rW   re   ri   rl   READ_PAYLOAD_LENGTHrk   r   READ_PAYLOAD_MASKREAD_PAYLOADrj   rg   rp   rf   r_   r   r2   )r4   r   frames	start_posZ
buf_lengthZ
first_byteZsecond_byter   Zrsv1Zrsv2Zrsv3r   Zhas_masklengthZlength_flagrE   Z	chunk_lenend_posr   r   r   rx   >  s    





zWebSocketReader.parse_frame)T)rR   rS   rT   r#   r   rW   r5   rC   r	   rq   r_   
memoryviewr   rJ   rr   r   r   rx   r   r   r   r   rY      s    
 "rY   )=rU   rL   rX   collectionsr   typingr   r   r   r   r   r   r	   Zbase_protocolr   Zcompression_utilsr   helpersr   r   streamsr   r   r   r   modelsr   r   r   r   r   r    r   __annotations__ra   r   r   r   BINARYr   ZTEXTr   ZCONTINUATIONvaluery   rz   r{   r   r   r   r   r   r   rt   ru   tuple__new__r   rD   r#   rY   r   r   r   r   <module>   s:   $N