
    F/jiN                        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 eD  ch c]
  }  e|        c} Zeee      ed<   d
ZdZdZ dZ!ejD                  Z#ejH                  Z%dZ&ejN                  jP                  Z)ejH                  jP                  Z*ejD                  jP                  Z+ejX                  jP                  Z-ej\                  jP                  Z/ej`                  jP                  Z1dZ2dZ3dZ4dZ5d
Z6e7jp                  Z9eZ: G d d      Z; G d d      Z<yc c} w )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	WSMsgTypeALLOWED_CLOSE_CODES      )T    )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y)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                  | _        y )Nr   r   F)_size	_protocol_limit_loop_eof_waiter
_exceptionr   _bufferpopleft_get_bufferappend_put_buffer)selfr   r   r   s       Z/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/_websocket/reader_py.py__init__zWebSocketDataQueue.__init__=   sf     
!ai
	4804JO'<<//<<..r   c                     | j                   S N)r%   r-   s    r.   is_eofzWebSocketDataQueue.is_eofK   s    yyr   c                     | j                   S r1   )r'   r2   s    r.   	exceptionzWebSocketDataQueue.exceptionN   s    r   exc	exc_causec                 f    d| _         || _        | j                  x}d | _        t        |||       y y NT)r%   r'   r&   r	   )r-   r6   r7   waiters       r.   r	   z WebSocketDataQueue.set_exceptionQ   s9    
 	ll"F/DL&#y1 0r   c                 t    | j                   x}y d | _         |j                         s|j                  d        y y r1   )r&   done
set_result)r-   r:   s     r.   _release_waiterz"WebSocketDataQueue._release_waiter\   s7    ll"F+{{}d# r   c                 @    d| _         | j                          d | _        y r9   )r%   r>   r'   r2   s    r.   feed_eofzWebSocketDataQueue.feed_eofc   s    	r   c                 
   | xj                   |z  c_         | j                  ||f       | j                          | j                   | j                  kD  r2| j                  j
                  s| j                  j                          y y y r1   )r!   r,   r>   r#   r"   _reading_pausedpause_readingr-   datasizes      r.   	feed_datazWebSocketDataQueue.feed_datah   se     	

d
$&::#DNN,J,JNN((* -K#r   c                 `  K   | j                   s^| j                  sR| j                  rJ | j                  j	                         | _        	 | j                   d {    | j                         S | j                         S 7 $# t
        j                  t
        j                  f$ r	 d | _         w xY wwr1   )	r(   r%   r&   r$   create_futureasyncioCancelledErrorTimeoutError_read_from_bufferr2   s    r.   readzWebSocketDataQueue.readq   s     ||DII||##::335DLll"" %%''t%%''	 #**G,@,@A #s0   AB.	A? A=A?  B.=A? ?,B++B.c                 <   | j                   rs| j                         \  }}| xj                  |z  c_        | j                  | j                  k  r0| j                  j
                  r| j                  j                          |S | j                  | j                  t        r1   )	r(   r*   r!   r#   r"   rB   resume_readingr'   r
   rD   s      r.   rM   z$WebSocketDataQueue._read_from_buffer|   ss    <<))+JD$JJ$JzzDKK'DNN,J,J--/K??&//!r   r   N)rE   zWSMessage | WSMessageTextBytesrF   
cython_intr   N)__name__
__module____qualname____doc__r   intrJ   AbstractEventLoopr/   boolr3   BaseExceptionr5   r   builtinsr	   r>   r@   rG   r   r   rN   rM    r   r.   r   r   7   s    
/$/-0/;B;T;T/	/ =4/  -:	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y)WebSocketReaderqueuemax_msg_sizecompressdecode_textr   Nc                 >   || _         || _        || _        d | _        t	               | _        t        | _        t        | _	        d| _
        t        | _        g | _        d| _        d| _        d| _        d | _        d| _        d| _        t&        | _        d | _        || _        y )NFr   r   )r_   _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)r-   r_   r`   ra   rb   s        r.   r/   zWebSocketReader.__init__   s     
)'&*	!!+"1/1"#
)-&'#!" 27;!r   c                 8    | j                   j                          y r1   )r_   r@   r2   s    r.   r@   zWebSocketReader.feed_eof   s    

r   rE   c                     t        |      t        urt        |      }| j                  d|fS 	 | j                  |       t        S # t        $ r-}|| _        t        | j                  |       t        cY d }~S d }~ww xY wr9   )	typebytesrf   
_feed_data	Exceptionr	   r_   EMPTY_FRAME_ERROREMPTY_FRAME)r-   rE   r6   s      r.   rG   zWebSocketReader.feed_data   sq    :U";D99 :	%OOD!   	%DI$**c*$$	%s   A 	A;"A60A;6A;finopcodepayload
compressedc           	      @	   |t         t        t        hv r|t        k(  r-| j                  t        k(  rt        t        j                  d      |s&|t        k7  r|| _        | xj                  |z  c_        y t        | j                        }|t        k(  r| j                  }t        | _        n|rt        t        j                  d|      |r*| j                  |z   }| j                  j                          n|}|r| j                  st        d      | _        | j                  j                  |t        z   | j                  r| j                  dz   n| j                        }| j                  r^t!        |      | j                  kD  rFt        t        j"                  d| j                         t%        |      t&        u r|}nt'        |      }|t         k(  r| j(                  rM	 |j+                  d      }| j0                  j3                  t5        t6        t8        |d	f      t!        |             y | j0                  j3                  t5        t:        t8        |d	f      t!        |             y | j0                  j3                  t5        t6        t<        |d	f      t!        |             y |t>        k(  rt!        |      d
k\  rrtA        |d d
       d   }
|
dk  r%|
tB        vrt        t        j                  d|
       	 |d
d  j+                  d      }t5        t6        tD        jF                  |
|f      }nF|r#t        t        j                  d| d| d|      t5        t6        tD        jF                  dd	f      }| j0                  j3                  |d       y |tH        k(  rGt5        t6        tD        jJ                  |d	f      }| j0                  j3                  |t!        |             y |tL        k(  rGt5        t6        tD        jN                  |d	f      }| j0                  j3                  |t!        |             y t        t        j                  d|      # t,        $ r }	t        t        j.                  d      |	d }	~	ww xY w# t,        $ r }	t        t        j.                  d      |	d }	~	ww xY w)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_CONTINUATIONrl   rk   r   r   PROTOCOL_ERRORrh   rY   clearrx   r   decompress_syncr   rd   lenMESSAGE_TOO_BIGr|   r}   re   decodeUnicodeDecodeErrorINVALID_TEXTr_   rG   	TUPLE_NEWr   WS_MSG_TYPE_TEXTr   WS_MSG_TYPE_BINARYOP_CODE_CLOSEr   r   r   CLOSEOP_CODE_PINGPINGOP_CODE_PONGPONG)r-   r   r   r   r   has_partialassembled_payloadpayload_mergedtextr6   
close_codeclose_messagemsgs                r.   _handle_framezWebSocketReader._handle_frame   s3    lN4HII--$,,/2Q$..@  11#)DL(t}}-K--. $..''-j2  $(MMG$;!##%$+! ***:SW*XD' "&!4!4!D!D%(;;  -- **Q.!//" %%#n*=@R@R*R(#33B4CUCUBVW  '(E1!2!&'8!9%$$#-44W= JJ((!).>b-IJN+ JJ((!.1A>SU0V N+	 

$$i*<nb)QR' }$7|q .wr{;A>
$;N)N(#22.zl; $+ABK$6$6w$?M
  	IOOZ+WX$..+C5&7+F 
  	IOOQ+CDJJ  a(|#I	'DECJJ  c'l3|#I	'DECJJ  c'l3 **.@
,K s . #,'446R"##H * (#002Ns0   Q 2Q4 	Q1Q,,Q14	R=RRc                 x
   | 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kD  r|dk(  rt        t        j                  d      |dz	  dz  }|dz  }|dkD  r|dkD  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(  r*||z
  dk  rn$||   }||dz      }|dz  }|dz  |z  | _        n0|dkD  r$||z
  dk  rnt3        ||      d   | _        |dz  }n|| _        | j4                  rx| j(                  t        t        t        hv r[| j0                  t        | j6                        z   }|| j4                  k\  r*t        t        j8                  d| d| j4                         | j*                  rt:        nt<        | _        | j                  t:        k(  r'||z
  dk  rn|||dz    | _        |dz  }t<        | _        | j                  t<        k(  r||z
  }| j0                  |k\  r|}| xj0                  |z  c_        n|| j0                  z   }d| _        | j@                  }| xj@                  ||z
  z  c_         |}|}| j0                  dk7  r | jB                  jE                  |||        nL|r| jB                  jE                  |||        | j*                  rK| j>                  J tG        djI                  | jB                              }tK        | j>                  |       |}ndjI                  | jB                        }| jB                  jM                          nY| j*                  rH| j>                  J ||| }tO        |      tF        urtG        |      }tK        | j>                  |       |}n||| }| jQ                  | j                  | j(                  || j                         d| _         t        | _        ||k  r||| | _         yd| _         y)z&Return the next frame from the socket.r   r   r   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))rq   r   rj   ri   ry   r   r   r   r   r   r   r   r   r   rm   rw   rv   COMPRESSED_TRUECOMPRESSED_FALSErY   rn   rr   ru   READ_PAYLOAD_LENGTHrt   r   rd   rh   r   READ_PAYLOAD_MASKREAD_PAYLOADrs   rp   ro   r+   rg   joinr   r   r|   r   )r-   rE   	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  sn   ::#zzD0#D$*	t9	{{k)i'!+&y1
'	A6Q	!Q!+"a1,"a1,"a1,#c) 4D(#22D 
 ( "!  "  )#22,VJ7 
 C<C1H(#22; 
 (1,1$t+ C<FSL(#22O  ??d&6&6:L&L:>DTD$(#22D 
 #'s)%+"!%h)/&1 {{1111s?)+a/!*9!5J"+IM":KNI2</K2OD/^)+a/2=dI2Nq2QD/NI2:D/
 %%$*<*< "(A +
 &*%@%@3t}}CU%UN%););;,'77+N+; <--1-?-?,@B  48>>/| {{//i'!+#,YQ#G Q	*{{l*$y0	..); (I//9</ )D,G,G GI23D/ $ 7 7''9y+@@''%	..!3 ++229[3ST !++229[3ST~~#//;;;,5chht?V?V6W,X)&t'7'79JK"3"%((4+B+B"C++113^^++777(1+i(H%-.i? -66G,H)"4#3#35FG/G'I>G""OOT%7%7$BRBR +,')W \ 7@(6JYy2
PS
r   )TTrQ   )rS   rT   rU   r   rW   rY   r/   r@   r}   rg   
memoryviewtuplerG   rR   r   r~   r\   r   r.   r^   r^      s    
  "!" " 	"
 " 
"<ei/*< tU{AS  GG j G "	G
 *$G 
GRwTu wT wTr   r^   )=rV   rJ   r[   collectionsr   typingr   base_protocolr   compression_utilsr   helpersr   r	   streamsr
   r   r   r   modelsr   r   r   r   r   r   rW   r   set__annotations__ri   r   r   r   BINARYr   TEXTr   rk   CONTINUATIONvaluer   r   r   r   r   r   r   r   r   r   r   rv   r   r   r   __new__r   rR   r   r^   )is   0r.   <module>r      s5   6     ( 0 2  C C  9D'D1A'D U3s8_ D   %% >>   --33 ~~##!!''%%~~##~~##   MM	
N NbuT uTe (Es   E 