
    g7F                        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 eD  ch c]
  }  e|        c} Z ee
e      e!d<   d
Z"dZ#dZ$dZ%ejL                  Z'ejP                  Z)ejT                  jV                  Z,ejP                  jV                  Z-ejL                  jV                  Z.ej^                  jV                  Z0ejb                  jV                  Z2ejf                  jV                  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)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	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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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       P/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/_websocket/reader_c.py__init__zWebSocketDataQueue.__init__7   sf     
!ai
	7;6:5:W<<//<<..r   c                     | j                   S N)r)   r1   s    r2   is_eofzWebSocketDataQueue.is_eofE   s    yyr   c                     | j                   S r5   )r+   r6   s    r2   	exceptionzWebSocketDataQueue.exceptionH   s    r   excBaseException	exc_causec                 f    d| _         || _        | j                  x}d | _        t        |||       y y NT)r)   r+   r*   r   )r1   r:   r<   waiters       r2   r   z WebSocketDataQueue.set_exceptionK   s9    
 	ll"F/DL&#y1 0r   c                 t    | j                   x}y d | _         |j                         s|j                  d        y y r5   )r*   done
set_result)r1   r?   s     r2   _release_waiterz"WebSocketDataQueue._release_waiterV   s7    ll"F+{{}d# r   c                 2    d| _         | j                          y r>   )r)   rC   r6   s    r2   feed_eofzWebSocketDataQueue.feed_eof]   s    	r   c                 
   | xj                   |z  c_         | j                  ||f       | j                          | j                   | j                  kD  r2| j                  j
                  s| j                  j                          y y y r5   )r%   r0   rC   r'   r&   _reading_pausedpause_readingr1   datasizes      r2   	feed_datazWebSocketDataQueue.feed_dataa   sc    

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r5   )	r,   r)   r*   r(   create_futureasyncioCancelledErrorTimeoutError_read_from_bufferr6   s    r2   readzWebSocketDataQueue.readh   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        r5   )	r,   r.   r%   r'   r&   rG   resume_readingr+   r   rI   s      r2   rR   z$WebSocketDataQueue._read_from_buffers   ss    <<))+JD$JJ$JzzDKK'DNN,J,J--/K??&//!r   r#   N)rJ   r   rK   int_r#   N)__name__
__module____qualname____doc__r   intrO   AbstractEventLoopr3   boolr7   r   r;   r9   r   builtinsr   rC   rE   rL   r   rS   rR    r   r2   r   r   1   s    
/$/-0/;B;T;T/	/ 8M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y)WebSocketReaderqueuemax_msg_sizecompressr#   Nc                    || _         || _        d | _        t               | _        t
        | _        d | _        d| _        d | _	        d| _
        d| _        d| _        d| _        d | _        d| _        d| _        d | _        d | _        || _        y )NFr   r   )rc   _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)r1   rc   rd   re   s       r2   r3   zWebSocketReader.__init__   s     
))-	!!&*,07:"#
,0 $%!+/:>!r   c                 8    | j                   j                          y r5   )rc   rE   r6   s    r2   rE   zWebSocketReader.feed_eof   s    

r   rJ   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r>   )	typebytesrh   
_feed_data	Exceptionr   rc   EMPTY_FRAME_ERROREMPTY_FRAME)r1   rJ   r:   s      r2   rL   zWebSocketReader.feed_data   ss     :U";D99 :	%OOD!   	%DI$**c*$$	%s   A 	A;"A60A;6A;c           
      
   | j                  |      D ]  }|d   }|d   }|d   }|d   }|t        k(  }|t        k(  s|t        k(  s|r|s|s|| _        | xj
                  |z  c_        | j                  rit        | j
                        | j                  k\  rGt        t        j                  dj                  t        | j
                        | j                              t        | j
                        }|r:| j                  t        t        j                  d      | j                  }d | _        n+|r)t        t        j                  dj                  |            |r*| j
                  |z   }	| j
                  j                          n|}	| j                  rUt        |	      | j                  k\  r=t        t        j                  dj                  t        |	      | j                              |r| j                  st!        d	      | _        | j                  j#                  |	t$        z   | j                        }
| j                  j&                  rt        | j                  j&                        }t        t        j                  d
j                  | j                  |z   | j                              t)        |	      t*        u r|	}
nt+        |	      }
|t        k(  rN	 |
j-                  d      }| j2                  j5                  t7        t8        t:        |df      t        |
             | j2                  j5                  t7        t8        t<        |
df      t        |
             K|t>        k(  rt        |      dk\  rrtA        |d d       d   }|dk  r%|tB        vrt        t        j                  d|       	 |dd  j-                  d      }t7        t8        tD        jF                  ||f      }nF|r#t        t        j                  d| d| d|      t7        t8        tD        jF                  ddf      }| j2                  j5                  |d       8|tH        k(  rHt7        t8        tD        jJ                  |df      }| j2                  j5                  |t        |             |tL        k(  rHt7        t8        tD        jN                  |df      }| j2                  j5                  |t        |             t        t        j                  d|       y # t.        $ r }t        t        j0                  d      |d }~ww xY w# t.        $ r }t        t        j0                  d      |d }~ww xY w)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_BINARYrm   rj   rg   lenr   r   MESSAGE_TOO_BIGformatr^   PROTOCOL_ERRORclearrx   r   decompress_syncr   unconsumed_tailr|   r}   decodeUnicodeDecodeErrorINVALID_TEXTrc   rL   	TUPLE_NEWr   WS_MSG_TYPE_TEXTWS_MSG_TYPE_BINARYOP_CODE_CLOSEr   r   r   CLOSEOP_CODE_PINGPINGOP_CODE_PONGPONG)r1   rJ   framefinopcodepayload
compressedis_continuationhas_partialassembled_payloadpayload_mergedlefttextr:   
close_codeclose_messagemsgs                    r2   r~   zWebSocketReader._feed_data   s   %%d+E(C1XFAhGqJ$(<<O%>)A_*'-MMW,M))c$--.@DDVDV.V,'77>EE #DMM 2D4F4F  "4==1"||+,'66H  "\\F#'DL !(#22//5vf~  (,(?%MM'')(/%%%#.?*@DDVDV*V(#33:AA 12D4F4F  ...>48/+ &*%8%8%H%H),??ASAS&N **::"4#6#6#F#FG,'77KRR $ 2 2T 94;M;M  +,5%6N%*+<%=N\)#-44W= JJ((!).>b-IJN+
 JJ((!).@.RT-UVN+ =(w<1$!272A;!?!BJ!D(Z?R-R,'662:,? #(/(:(:7(C
 $!IOOZ#OC (#22/uAfXQwkJ 
 $I	B/GHC

$$S!,<'	INNGR+HI

$$S#g,7<'	INNGR+HI

$$S#g,7 %..2DVJ0O O ,d . #,'446R"##8 . #,'446R"##s0   T0T7	T4T//T47	U  UU bufc                 H   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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                  |rdnd| _	        n|rt        t        j                  d      t        |      | _        || _        t        |      | _        || _        t        | _        | j                  t        k(  r| j                  }|dk(  r*||z
  dk  rnY||   }||dz      }|dz  }|dz  |z  | _        n7|dkD  r+||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(                  rNt+        | j,                        t.        urt/        | j,                        | _        | xj,                  ||| z  c_        n
||| | _        | xj(                  ||z
  z  c_        |}| j                  dk7  rn| j                  rc| j&                  J t+        | j,                        t.        urt/        | j,                        | _        t1        | j&                  | j,                         |j3                  | j                  | j                  | j,                  | j                  f       d| _        d| _        t        | _        ||k  r||d | _         |S 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~      )rr   r   rl   rk   ry   r   r   r   rn   rw   r^   ro   rs   rv   READ_PAYLOAD_LENGTHru   r   READ_PAYLOAD_MASKREAD_PAYLOADrt   rq   r|   rp   ri   r   r/   )r1   r   frames	start_pos
buf_length
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthlength_flagrJ   	chunk_lenend_poss                     r2   r   zWebSocketReader.parse_frame>  sa     	 ::"jj3.OC	X
{{k)	)A- ^
!)a-0Q	!Q!+"a1,"a1,"a1,#c) 4D(#22D 
 C<C1H(#22; 
 (1,1$t+ C<FSL(#22O  ??d&6&6&>/3tD$(#22D 
 #'s)%+"!%h,2)1 {{11"77#%!I-1!$YJ"%i!m"4KNI+5?[+HD( 3&!I-1y9q=9DNI+6t+<Q+?D(+6D(37>>/| {{//	)A-#&y9q=#A Q	*{{l*&2	''94(G((I5('$*>*>>G+,D(**D//0	A.78K8K.L+''3y+AA' +.i*@D'''7Y+>>'#	''1,>>++777D//0	A.78K8K.L+"4#3#3T5H5HI**++((	 '*#*+')K N )2J(>S_
 EH
r   )TrV   )rX   rY   rZ   r   r\   r^   r3   rE   r
   r}   ri   
memoryviewr	   rL   r~   r   r   r   r`   r   r2   rb   rb      s    MQ"'"7:"FJ"	"2%J67	tU{	$Ku K KZVV	eD(3-ui/?)@(4.PQ	RVr   rb   )=r[   rO   r_   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__rk   r   r   r   BINARYr   TEXTr   CONTINUATIONvaluer   r   r   r   r   r   r   r   r   r   r   tuple__new__r   rW   r   rb   )is   0r2   <module>r      s'   6    B B B ( 0 2  C C  9D'D1A'D U3s8_ D   %% >>  !--33 ~~##!!''%%~~##~~## MM	
K K\U UU (Es   E