
    fjiN                        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 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j0        j(        Z1dZ2dZ3d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)Final   )BaseProtocol)ZLibDecompressor)_EXC_SENTINELset_exception)	EofStream   )UNPACK_CLOSE_CODEUNPACK_LEN3websocket_mask)WS_DEFLATE_TRAILINGWebSocketErrorWSCloseCode	WSMessageWSMessageTextBytes	WSMsgTypec                 ,    h | ]}t          |          S  )int).0is     `/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/aiohttp/_websocket/reader_py.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dz  fd	Zefd
edej        ddfdZddZddZ	 	 	 	 	 	 ddZdeez  fdZdeez  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__=   sd     
!ai
	4804JO''</<.r   c                     | j         S N)r,   r4   s    r   is_eofzWebSocketDataQueue.is_eofK   s
    yr   c                     | j         S r7   )r.   r8   s    r   	exceptionzWebSocketDataQueue.exceptionN   s
    r   exc	exc_causec                 h    d| _         || _        | j        x}d | _        t          |||           d S d S NT)r,   r.   r-   r	   )r4   r<   r=   waiters       r   r	   z WebSocketDataQueue.set_exceptionQ   sF    
 	l"F/DL&#y11111 0/r   c                     | j         x}d S d | _         |                                s|                    d            d S d S r7   )r-   done
set_result)r4   r@   s     r   _release_waiterz"WebSocketDataQueue._release_waiter\   sO    l"F+F{{}} 	$d#####	$ 	$r   c                 J    d| _         |                                  d | _        d S r?   )r,   rD   r.   r8   s    r   feed_eofzWebSocketDataQueue.feed_eofc   s&    	r   dataWSMessage | WSMessageTextBytessize
cython_intc                     | xj         |z  c_         |                     ||f           |                                  | j         | j        k    r'| j        j        s| j                                         d S d S d S r7   )r(   r3   rD   r*   r)   _reading_pausedpause_readingr4   rG   rI   s      r   	feed_datazWebSocketDataQueue.feed_datah   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 r7   )	r/   r,   r-   r+   create_futureasyncioCancelledErrorTimeoutError_read_from_bufferr8   s    r   readzWebSocketDataQueue.readq   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          r7   )	r/   r1   r(   r*   r)   rL   resume_readingr.   r
   rN   s      r   rU   z$WebSocketDataQueue._read_from_buffer|   sx    < 	))++JD$JJ$JJzDK''DN,J'--///K?&/!r   r&   N)rG   rH   rI   rJ   r&   N)__name__
__module____qualname____doc__r   r   rR   AbstractEventLoopr5   boolr9   BaseExceptionr;   r   builtinsr	   rD   rF   rO   r   r   rV   rU   r   r   r   r"   r"   7   sc        
/$/-0/;B;T/	/ / / /    =4/     -:	2 	2	2 )	2 
		2 	2 	2 	2$ $ $ $   
+4+<H+	+ + + +	(I(:: 	( 	( 	( 	(	9/A#A 	 	 	 	 	 	r   r"   c                       e Zd Z	 	 ddededededdf
dZdd	Zd
ee	z  e
z  deeef         fdZdedeez  dee	z  deez  ddf
dZd
eddfdZdS )WebSocketReaderTqueuemax_msg_sizecompressdecode_textr&   Nc                 P   || _         || _        || _        d | _        t	                      | _        t          | _        t          | _	        d| _
        t          | _        g | _        d| _        d| _        d| _        d | _        d| _        d| _        t&          | _        d | _        || _        d S )NFr   r   )rd   _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)r4   rd   re   rf   rg   s        r   r5   zWebSocketReader.__init__   s     
)'&*	!!+"1/1"#
)-&'#!" 27;!r   c                 8    | j                                          d S r7   )rd   rF   r8   s    r   rF   zWebSocketReader.feed_eof   s    
r   rG   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 r?   )	typebytesrk   
_feed_data	Exceptionr	   rd   EMPTY_FRAME_ERROREMPTY_FRAME)r4   rG   r<   s      r   rO   zWebSocketReader.feed_data   s    ::U"";;D9 :	%OOD!!!! 	% 	% 	%DI$*c***$$$$$$$	%
 s   A 
A?"A:4A?:A?finopcodepayload
compressedc           	      	   |t           t          t          hv r|t          k    r*| j        t          k    rt          t          j        d          |s$|t          k    r|| _        | xj        |z  c_        d S t          | j                  }|t          k    r| j        }t          | _        n|rt          t          j        d|          |r$| j        |z   }| j        
                                 n|}|r| j        st          d          | _        | j                            |t          z   | j        r
| j        dz   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	 |                    d          }n-# t,          $ r }	t          t          j        d          |	d }	~	ww xY w| j                            t5          t6          t8          |d	f          t!          |                     d S | j                            t5          t:          t8          |d	f          t!          |                     d S | j                            t5          t6          t<          |d	f          t!          |                     d S |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t5          t6          tD          j#        |
|f          }nG|r#t          t          j        d| d| d|          t5          t6          tD          j#        dd	f          }| j                            |d           d S |tH          k    rLt5          t6          tD          j%        |d	f          }| j                            |t!          |                     d S |tL          k    rLt5          t6          tD          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_CONTINUATIONrq   rp   r   r   PROTOCOL_ERRORrm   r_   clearr}   r   decompress_syncr   ri   lenMESSAGE_TOO_BIGr   r   rj   decodeUnicodeDecodeErrorINVALID_TEXTrd   rO   	TUPLE_NEWr   WS_MSG_TYPE_TEXTr   WS_MSG_TYPE_BINARYOP_CODE_CLOSEr   r   r   CLOSEOP_CODE_PINGPINGOP_CODE_PONGPONG)r4   r   r   r   r   has_partialassembled_payloadpayload_mergedtextr<   
close_codeclose_messagemsgs                r   _handle_framezWebSocketReader._handle_frame   sH    lN4HIII---$,/2Q2Q$.@    111#)DL(t}--K---.  $.2'-2 2    ,$(MG$;!##%%%%$+!  :* Y*:SW*X*X*XD' "&!4!D!D%(;;  -0*Q..!/" " % #n*=*=@R*R*R(#3W4CUWW   '((E11!2!&'8!9!9%%$ #-44W==- # # #,'46R "## J((!).>b-IJJN++     J((!.1A>SU0V  N++	     
$$i*<nb)QRR''     }$$7||q  .wrr{;;A>
$$;N)N)N(#2;z;;  $+ABBK$6$6w$?$?MM)   (#02N   	IOZ+WXX E$.FCFF&FF7FF  
  	IOQ+CDDJ  a(((((|##I	'DEECJ  c'll33333|##I	'DEECJ  c'll33333 *,K,K,K  s0   G 
H!G<<H<M 
N$M??Nc                 &
   | 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          |t          t          t          t          t          t          hvr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        t           k    r|rt"          nt$          | _        n|rt          t          j        d          t'          |          | _        || _        t'          |          | _        || _        t.          | _        | j        t.          k    r| j        }|dk    r1||z
  dk     rn||         }||dz            }|dz  }|dz  |z  | _        n9|dk    r,||z
  dk     rnt3          ||          d         | _        |dz  }n|| _        | j        rg| j        t          t          t          hv rL| j        t          | j                  z   }|| j        k    r%t          t          j        d| d| j                   | 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         }| xj         ||z
  z  c_         |}|}| j        dk    r$| j!        "                    |||                    nD|r| j!        "                    |||                    | j        rH| j        J tG          d$                    | j!                            }tK          | j        |           |}nd$                    | j!                  }| j!        &                                 na| j        rP| j        J |||         }tO          |          tF          urtG          |          }tK          | j        |           |}n
|||         }| (                    | j        | j        || j                   d| _         t          | _        ||k     r
|||         n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))rv   r   ro   rn   r~   r   r   r   r   r   r   r   r   r   rr   r|   r{   COMPRESSED_TRUECOMPRESSED_FALSEr_   rs   rw   rz   READ_PAYLOAD_LENGTHry   r   ri   rm   r   READ_PAYLOAD_MASKREAD_PAYLOADrx   ru   rt   r2   rl   joinr   r   r   r   )r4   rG   	start_posdata_len	data_cstr
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthlen_flagprojected_size	chunk_len	f_end_poshad_fragmentsf_start_pospayload_bytearrayr   s                         r   r   zWebSocketReader._feed_dataF  s    : 	6#zD0#D$*	t99	k	*{k))i'!++&y1
'	A6Q	!Q!+"a1,"a1,"a1,#c)  4 D  (#2D  
 ( "!  "   )#27V77  
 C<<C1HH(#2;  
 (1,1$t+ C<<FSLL(#2O   ? d&6:L&L&L:>'TDTD$$ (#2D  
 #'s))%+"!%h)/&1 {1111s??)+a//!*9!5J"+IM":KNI2</K2OD//^^)+a//2=dI2N2Nq2QD/NII2:D/
 % $*< "(A + +
 &*%@3t}CUCU%UN%);;;,'7BN B B-1-?B B   48>S//| {///i'!++#,YQ-F#G Q	*{l**$y0	.);; (I//9</// )D,G GI23D/ $ 7''9y+@@'''%	.!33 +229[=R3STTT ! ?+229[=R3STTT~ D#/;;;,5chht?V6W6W,X,X)&t'79JKKK"3"%((4+B"C"C+113333^ ?+777(1+i2G(H%-..i?? -66G,H,H)"4#35FGGG/GG'I(=>G""OT%7$BR   +,')Wk	*\ 7@(6J6JYy122PS


r   )TTrY   )rZ   r[   r\   r"   r   r_   r5   rF   r   rl   
memoryviewtuplerO   rJ   r   r   r   r   r   rc   rc      s=       
  " "!" " 	"
 " 
" " " "<   ei/*< tU{AS     GG j G "	G
 *$G 
G G G GRwTu wT wT wT wT wT wT wTr   rc   )=r]   rR   ra   collectionsr   typingr   base_protocolr   compression_utilsr   helpersr   r	   streamsr
   r   r   r   modelsr   r   r   r   r   r   r   setr   __annotations__rn   r   r   r   BINARYr   TEXTr   rp   CONTINUATIONvaluer   r   r   r   r   r   r   r   r   r   r   r{   r   r   r   __new__r   rJ   r"   rc   r   r   r   <module>r      s8   6 6 6               ( ( ( ( ( ( 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	
N N N N N N N NbuT uT uT uT uT uT uT uT uT uTr   