
    hG                         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 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(dZ)ej*        j+        Z,ej'        j+        Z-ej%        j+        Z.ej/        j+        Z0ej1        j+        Z2ej3        j+        Z4dZ5dZ6dZ7dZ8d
Z9e:j;        Z<eZ= G d d          Z> G d d          Z?dS )z0Reader for WebSocket protocol versions 13 and 8.    N)deque)DequeFinal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     ^/var/www/html/prod/cognitive/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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__<   sd     
!ai
	7;6:5:WW</<.r    c                     | j         S N)r0   r8   s    r   is_eofzWebSocketDataQueue.is_eofJ   s
    yr    c                     | j         S r;   )r2   r<   s    r   	exceptionzWebSocketDataQueue.exceptionM   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_exceptionP   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_waiter[   sO    l"F+F{{}} 	$d#####	$ 	$r    c                 J    d| _         |                                  d | _        d S rD   )r0   rI   r2   r<   s    r   feed_eofzWebSocketDataQueue.feed_eofb   s&    	r    datar   size
cython_intc                     | 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_datag   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.readn   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_buffery   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&   6   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eeef         dee	e
f         deeef         ddf
dZd	e	ddfdZdS )WebSocketReaderTqueuemax_msg_sizecompressr*   Nc                 B   || _         || _        d | _        t                      | _        t
          | _        t          | _        d| _	        t          | _
        g | _        d| _        d| _        d| _        d | _        d| _        d| _        t$          | _        d | _        || _        d S )NFr   r    )rg   _max_msg_size_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)r8   rg   rh   ri   s       r   r9   zWebSocketReader.__init__   s     
))-	!!+"1/1"#
,0&'#!" 2:>!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?finopcodepayload
compressedc           	      \
   |t           t          t          hv r|s|t          k    r|| _        | xj        |z  c_        | j        rTt          | j                  | j        k    r7t          t          j	        dt          | j                   d| j                   d S t          | j                  }|t          k    r>| j        t          k    rt          t          j        d          | j        }t          | _        n|rt          t          j        d|          |r$| j        |z   }| j                                         n|}| j        rJt          |          | j        k    r2t          t          j	        dt          |           d| j                   |r| j        st          d          | _        | j                            |t"          z   | j                  }| j        j        rFt          | j        j                  }t          t          j	        d| j        |z    d| 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                            t5          t6          t8          |	d
f          t          |                     d S | j                            t5          t6          t:          |d
f          t          |                     d S |t<          k    r/t          |          dk    rt?          |d d                   d         }|dk     r&|t@          vrt          t          j        d|           	 |dd                              d          }n-# t,          $ r }
t          t          j        d	          |
d }
~
ww xY wt5          t6          tB          j"        ||f          }nG|r#t          t          j        d| d| d|          t5          t6          tB          j"        dd
f          }| j                            |d           d S |tF          k    rLt5          t6          tB          j$        |d
f          }| j                            |t          |                     d S |tJ          k    rLt5          t6          tB          j&        |d
f          }| j                            |t          |                     d S t          t          j        d|          )NzMessage size z exceeds limit z*Continuation frame for non started messagez8The opcode in non-fin frame is expected to be zero, got T)suppress_deflate_headerzDecompressed message size zutf-8zInvalid UTF-8 text message r
   r   i  zInvalid close code: zInvalid close frame:  zUnexpected opcode=)'OP_CODE_TEXTOP_CODE_BINARYOP_CODE_CONTINUATIONrr   rn   rk   lenr   r   MESSAGE_TOO_BIGrc   rq   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   r   r   r   r   has_partialassembled_payloadpayload_mergedlefttextr@   
close_codeclose_messagemsgs                 r   _handle_framezWebSocketReader._handle_frame   s    lN4HIII 111#)DL(% #dm*<*<@R*R*R(#3>DM(:(: > >)-);> >  
 t}--K---<?22(#2D   .  $.2'-2 2    ,$(MG$;!##%%%%$+!! c*;&<&<@R&R&R$/:C(9$:$: : :%)%7: :    :* Y*:SW*X*X*XD'!%!4!D!D%(;;T=O" " &6 t2BCCD(#3?T5G$5N ? ?*.*<? ?   '((E11!2!&'8!9!9%%)0099DD)   (#02N  
$$i*:D")EFF''    
 
$$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   I1 1
J;JJN/ /
O9OOc                    | j         r| j         |z   dc}| _         d}t          |          }|}	 | j        t          k    rS||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	        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nVt'          ||          d         | _        |dz  }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        }| xj        ||z
  z  c_        |}|}| j        dk    r$| j                            |||                    nD|r| j                            |||                    | j        rH| j        J t5          d                    | j                            }t9          | j        |           |}nd                    | j                  }| j                                         na| j        rP| j        J |||         }t=          |          t4          urt5          |          }t9          | 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 bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytes~      N) rw   r   rp   ro   r   r   r   r   rs   r}   r|   COMPRESSED_TRUECOMPRESSED_FALSErc   rt   rx   r{   READ_PAYLOAD_LENGTHrz   r   READ_PAYLOAD_MASKREAD_PAYLOADry   rv   ru   r6   rm   joinr   r   r   r   )r8   rL   	start_posdata_len	data_cstr
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthlen_flag	chunk_len	f_end_poshad_fragmentsf_start_pospayload_bytearrayr   s                        r   r   zWebSocketReader._feed_data:  sC   : 	6#zD0#D$*	t99	N	*{k))i'!++&y1
'	A6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: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/37>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   +,')]N	*b 7@(6J6JYy122PS


r    )Tr]   )r^   r_   r`   r&   r   rc   r9   rK   r	   r   rm   
memoryviewr   rS   rN   r   r   r   r    r   rf   rf      s9       MQ" "'"7:"FJ"	" " " "2   %J67	tU{	   $AA c:o&A ui'(	A
 #z/*A 
A A A AFZTu ZT ZT ZT ZT ZT ZT ZTr    rf   )@ra   rV   rd   collectionsr   typingr   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   rq   CONTINUATIONvaluer   r   r   r   r   r   r   r   r   r   r   r|   r   r   tuple__new__r   rN   r&   rf   r   r    r   <module>r      sL   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	
L L L L L L L L^OT OT OT OT OT OT OT OT OT OTr    