
    Ng7F                        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 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j1        j+        Z2ej3        j+        Z4dZ5dZ6e7j8        Z9e Z: G d d          Z; G 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                 ,    h | ]}t          |          S  )int).0is     W/var/www/html/ai-engine/env/lib/python3.11/site-packages/aiohttp/_websocket/reader_c.py	<setcomp>r       s    'D'D'D1A'D'D'D    ALLOWED_CLOSE_CODES      )Tr!   )Fr!   c                       e Zd ZdZdededej        ddfdZde	fdZ
dee         fd	Zefd
ddej        ddfdZddZddZddZdefdZdefdZdS )WebSocketDataQueuezmWebSocketDataQueue resumes and pauses an underlying stream.

    It is a destination for WebSocket data.
    protocollimitloopreturnNc                    d| _         || _        |dz  | _        || _        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)   s       r   __init__zWebSocketDataQueue.__init__7   sd     
!ai
	7;6:5:WW</<.r!   c                     | j         S N)r0   r8   s    r   is_eofzWebSocketDataQueue.is_eofE   s
    yr!   c                     | j         S r;   )r2   r<   s    r   	exceptionzWebSocketDataQueue.exceptionH   s
    r!   excBaseException	exc_causec                 h    d| _         || _        | j        x}d | _        t          |||           d S d S NT)r0   r2   r1   r   )r8   r@   rB   waiters       r   r   z WebSocketDataQueue.set_exceptionK   sF    
 	l"F/DL&#y11111 0/r!   c                     | j         x}d S d | _         |                                s|                    d            d S d S r;   )r1   done
set_result)r8   rE   s     r   _release_waiterz"WebSocketDataQueue._release_waiterV   sO    l"F+F{{}} 	$d#####	$ 	$r!   c                 <    d| _         |                                  d S rD   )r0   rI   r<   s    r   feed_eofzWebSocketDataQueue.feed_eof]   s!    	r!   datar   sizeint_c                     | xj         |z  c_         |                     ||f           |                                  | j         | j        k    r'| j        j        s| j                                         d S d S d S r;   )r,   r7   rI   r.   r-   _reading_pausedpause_readingr8   rL   rM   s      r   	feed_datazWebSocketDataQueue.feed_dataa   s}    

d

$&&&:##DN,J#N((***** $###r!   c                   K   | j         sd| j        s]| j        rJ | j                                        | _        	 | j         d {V  n'# t
          j        t
          j        f$ r	 d | _         w xY w|                                 S r;   )	r3   r0   r1   r/   create_futureasyncioCancelledErrorTimeoutError_read_from_bufferr<   s    r   readzWebSocketDataQueue.readh   s      | 	DI 	|###:3355DLl""""""""*G,@A   # %%'''s   A $A+c                     | j         r^|                                 \  }}| xj        |z  c_        | j        | j        k     r%| j        j        r| j                                         |S | j        | j        t          r;   )	r3   r5   r,   r.   r-   rP   resume_readingr2   r   rR   s      r   rY   z$WebSocketDataQueue._read_from_buffers   sx    < 	))++JD$JJ$JJzDK''DN,J'--///K?&/!r!   r*   N)rL   r   rM   rN   r*   N)__name__
__module____qualname____doc__r   r   rV   AbstractEventLoopr9   boolr=   r   rA   r?   r   builtinsr   rI   rK   rS   r   rZ   rY   r   r!   r   r&   r&   1   s?        
/$/-0/;B;T/	/ / / /    8M2     -:	2 	2	2 )	2 
		2 	2 	2 	2$ $ $ $   + + + +	(I 	( 	( 	( 	(	9 	 	 	 	 	 	r!   r&   c            
           e Zd Z	 ddedededdfdZddZd	ee	e
ef         deee	f         fd
Zd	e	ddfdZde	deeeee         ee	e
f         ee         f                  fdZdS )WebSocketReaderTqueuemax_msg_sizecompressr*   Nc                 $   || _         || _        d | _        t                      | _        t
          | _        d | _        d| _        d | _	        d| _
        d| _        d| _        d| _        d | _        d| _        d| _        d | _        d | _        || _        d S )NFr!   r   )rg   _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)r8   rg   rh   ri   s       r   r9   zWebSocketReader.__init__   s     
))-	!!&*,07:"#
,0 $%!+/:>!r!   c                 8    | j                                          d S r;   )rg   rK   r<   s    r   rK   zWebSocketReader.feed_eof   s    
r!   rL   c                    t          |          t          urt          |          }| j        d|fS 	 |                     |           n:# t          $ r-}|| _        t          | j        |           t          cY d }~S d }~ww xY wt          S rD   )	typebytesrl   
_feed_data	Exceptionr   rg   EMPTY_FRAME_ERROREMPTY_FRAME)r8   rL   r@   s      r   rS   zWebSocketReader.feed_data   s     ::U"";;D9 :	%OOD!!!! 	% 	% 	%DI$*c***$$$$$$$	%
 s   A 
A?"A:4A?:A?c           
         |                      |          D ]t}|d         }|d         }|d         }|d         }|t          k    }|t          k    s|t          k    s|r)|s|s|| _        | xj        |z  c_        | j        rbt          | j                  | j        k    rEt          t          j
        d                    t          | j                  | j                            t          | j                  }|r0| j        t          t          j        d          | j        }d | _        n/|r-t          t          j        d                    |                    |r$| j        |z   }	| j                                         n|}	| j        rXt          |	          | j        k    r@t          t          j
        d                    t          |	          | j                            |r| j        st!          d	          | _        | j                            |	t$          z   | j                  }
| j        j        rTt          | j        j                  }t          t          j
        d
                    | j        |z   | j                            n(t)          |	          t*          u r|	}
nt+          |	          }
|t          k    r	 |
                    d          }n-# t.          $ r }t          t          j        d          |d }~ww xY w| j                            t7          t8          t:          |df          t          |
                     +| j                            t7          t8          t<          |
df          t          |
                     p|t>          k    r/t          |          dk    rtA          |d d                   d         }|dk     r&|tB          vrt          t          j        d|           	 |dd                              d          }n-# t.          $ r }t          t          j        d          |d }~ww xY wt7          t8          tD          j#        ||f          }nG|r#t          t          j        d| d| d|          t7          t8          tD          j#        ddf          }| j                            |d           |tH          k    rLt7          t8          tD          j%        |df          }| j                            |t          |                     |tL          k    rLt7          t8          tD          j'        |df          }| j                            |t          |                     Yt          t          j        d|          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)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_BINARYrq   rn   rk   lenr   r   MESSAGE_TOO_BIGformatrc   PROTOCOL_ERRORclearr|   r   decompress_syncr   unconsumed_tailr   r   decodeUnicodeDecodeErrorINVALID_TEXTrg   rS   	TUPLE_NEWr   WS_MSG_TYPE_TEXTWS_MSG_TYPE_BINARYOP_CODE_CLOSEr   r"   r   CLOSEOP_CODE_PINGPINGOP_CODE_PONGPONG)r8   rL   framefinopcodepayload
compressedis_continuationhas_partialassembled_payloadpayload_mergedlefttextr@   
close_codeclose_messagemsgs                    r   r   zWebSocketReader._feed_data   s   %%d++ I	 I	E(C1XFAhGqJ$(<<O%%>)A)A_)A * .'-MMW,MM) c$-.@.@DDV.V.V,'7>EE #DM 2 2D4F    "4=11" |+,'6H   "\F#'DLL ! (#2//5vf~~    0(,(?%M''))))(/%% #.?*@*@DDV*V*V(#3:AA 122D4F     >. .>48/ / /+ &*%8%H%H),??AS& &N *: "4#6#FGG,'7KRR $ 2T 94;M    +,,55%6NN%*+<%=%=N\))#-44W==- # # #,'46R "## J((!).>b-IJJN++   
 J((!).@.RT-UVVN++    =((w<<1$$!272A2;!?!?!BJ!D((Z?R-R-R,'6?:??  #(/(:(:7(C(C- # # #,'46R "## $!IOZ#O CC  I(#2JJJfJJwJJ  
 $I	B/GHHC
$$S!,,,,<''	INGR+HII
$$S#g,,7777<''	INGR+HII
$$S#g,,7777 %.0OV0O0O  OI	 I	s0   9K
K9K44K9/P
P7P22P7bufc                    g }| j         r| j         |z   dc}| _         d}t          |          }	 | j        t          k    r@||z
  dk     rn||         }||dz            }|dz  }|dz	  dz  }|dz	  dz  }|dz	  dz  }	|d	z	  dz  }
|d
z  }|	s|
s	|r!| j        st          t          j        d          |dk    r |dk    rt          t          j        d          |dz	  dz  }|dz  }|dk    r |dk    rt          t          j        d          | j        s| j	        |rdnd| _	        n|rt          t          j        d          t          |          | _        || _        t          |          | _        || _        t          | _        | j        t          k    r| j        }|dk    r1||z
  dk     rn3||         }||dz            }|dz  }|dz  |z  | _        nE|dk    r8||z
  dk     rn|||dz            }|dz  }t!          |          d         | _        n|| _        | j        rt"          nt$          | _        | j        t"          k    r.||z
  d	k     rn|||d	z            | _        |d	z  }t$          | _        | j        t$          k    r]||z
  }| j        |k    r|}| xj        |z  c_        n|| j        z   }d| _        | j        rMt+          | j                  t.          urt/          | j                  | _        | xj        |||         z  c_        n|||         | _        | xj        ||z
  z  c_        |}| j        dk    rn| j        rW| j        J t+          | j                  t.          urt/          | j                  | _        t1          | j        | j                   |                    | j        | j        | j        | j	        f           d| _        d| _        t          | _        ||k     r
||d         nd| _         |S )z&Return the next frame from the socket.r!   r   Tr   r            r$      z*Received frame with non-zero reserved bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytesNF~      )rv   r   rp   ro   r}   r   r   r   rr   r{   rc   rs   rw   rz   READ_PAYLOAD_LENGTHry   r   READ_PAYLOAD_MASKREAD_PAYLOADrx   ru   r   rt   rm   r   r6   )r8   r   frames	start_pos
buf_length
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthlength_flagrL   	chunk_lenend_poss                     r   r   zWebSocketReader.parse_frame>  s     	 : 	4"j3.OC	XX
E	*{k))	)A-- ^
!)a-0Q	!Q!+"a1,"a1,"a1,#c)  4 D  (#2D  
 C<<C1HH(#2;  
 (1,1$t+ C<<FSLL(#2O   ? d&6&>/3'>ttD$$ (#2D  
 #'s))%+"!%h,2)1 {111"7#%%!I-11!$YJ"%i!m"4KNI+5?[+HD(( 3&&!I-11y9q=89DNI+6t+<+<Q+?D((+6D(37>S//| {///	)A--#&y9q='@#A Q	*{l**&2	'944(G((I5((('$*>>G+,D(* AD/00	AA.78K.L.L+''3y/@+AA''' +.i.?*@D'''7Y+>>''#	'1,,> J+777D/00	AA.78K.L.L+"4#3T5HIII*+(	   '*#*+')KE	*N )2J(>(>S__C
r!   )Tr]   )r^   r_   r`   r&   r   rc   r9   rK   r
   r   rm   
memoryviewr	   rS   r   r   r   r   r   r!   r   rf   rf      s       MQ" "'"7:"FJ"	" " " "2   %J67	tU{	   $Ku K K K K KZVV	eD(3-ui/?)@(4.PQ	RV V V V V Vr!   rf   )=ra   rV   rd   collectionsr   typingr   r   r   r   r   r	   r
   base_protocolr   compression_utilsr   helpersr   r   streamsr   r   r   r   modelsr   r   r   r   r   r"   r   __annotations__ro   r   r   r   BINARYr   TEXTr   CONTINUATIONvaluer   r   r   r   r   r   r   r   r   r   r   tuple__new__r   rN   r&   rf   r   r!   r   <module>r      s2   6 6 6         B B B B B B B B B B B B B B B B B B ( ( ( ( ( ( 0 0 0 0 0 0 2 2 2 2 2 2 2 2       C C C C C C C C C C              (E'D'D'D'D U3s8_ D D D   % >  !-3 ~#!'%~#~# M	
K K K K K K K K\U U U U U U U U U Ur!   