+
    Qi                    j    R t ^ RIHt ^ RIHtHt ^ RIHtHtH	t	H
t
 ^RIHtHtHt ^@t ! R R4      tR# )zy
h2/frame_buffer
~~~~~~~~~~~~~~~

A data structure that provides a way to iterate over a byte buffer in terms of
frames.
)annotations)InvalidDataErrorInvalidFrameError)ContinuationFrameFrameHeadersFramePushPromiseFrame)FrameDataMissingErrorFrameTooLargeErrorProtocolErrorc                  f    ] tR t^tRtRR R lltR R ltR R ltR R	 ltR
 R lt	R R lt
RtR# )FrameBufferzU
A buffer data structure for HTTP/2 data that allows iteraton in terms of
H2 frames.
c                    V ^8  d   QhRRRR/# )   serverboolreturnNone )formats   "d/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/h2/frame_buffer.py__annotate__FrameBuffer.__annotate__    s     ] ]t ] ]    c                	    \        4       V n        ^ V n        V'       d   RMRV n        \	        V P                  4      V n        . V n        R# )    s   PRI * HTTP/2.0

SM

r   N)	bytearray_datamax_frame_size	_preamblelen_preamble_len_headers_buffer)selfr   s   &&r   __init__FrameBuffer.__init__    s8    [
@F<C 0Z\r   c                    V ^8  d   QhRRRR/# )r   databytesr   r   r   )r   s   "r   r   r   '   s      U t r   c                H   V P                   '       dw   \        V4      p\        V P                   V4      pV P                  RV VRV 8w  d   Rp\	        V4      hWR pV ;P                   V,          un         V P                  VR V n        V ;P
                  V,          un        R# )z[
Add more data to the frame buffer.

:param data: A bytestring containing the byte buffer.
NzInvalid HTTP/2 preamble.)r!   r    minr   r   r   )r#   r'   data_lenof_which_preamblemsgs   &&   r   add_dataFrameBuffer.add_data'   s     4yH #D$6$6 A~~001T:L;L5MM0#C((*+D"33!^^,=,>?DN

d
r   c                    V ^8  d   QhRRRR/# )r   lengthintr   r   r   )r   s   "r   r   r   ;   s     * *S *T *r   c                `    WP                   8  d   RV RV P                    2p\        V4      hR# )z2
Confirm that the frame is an appropriate length.
z Received overlong frame: length z, max N)r   r
   )r#   r1   r-   s   && r   _validate_frame_length"FrameBuffer._validate_frame_length;   s9     '''4VHF4CVCVBWXC$S)) (r   c                    V ^8  d   QhRRRR/# )r   fzFrame | Noner   r   )r   s   "r   r   r   C   s     . .| . .r   c                .   V P                   '       Ed8   V P                   ^ ,          P                  pVRJ;'       d(    \        V\        4      ;'       d    VP                  V8H  pV'       g   Rp\	        V4      h\        V\        4      '       g   Q hV P                   P                  V4       \        V P                   4      \        8  d   Rp\	        V4      hRVP                  9   d_   V P                   ^ ,          pVP                  P                  R4       RP                  R V P                    4       4      Vn        . V n         V# Rp V# \        V\        \        34      '       d/   RVP                  9  d   V P                   P                  V4       RpV# )z
Updates the internal header buffer. Returns a frame that should replace
the current one. May throw exceptions if this frame is invalid.
Nz"Invalid frame during header block.z&Too many continuation frames received.END_HEADERSr   c              3  8   "   T F  qP                   x  K  	  R # 5iN)r'   ).0xs   & r   	<genexpr>4FrameBuffer._update_header_buffer.<locals>.<genexpr>f   s     !G2FQ&&2Fs   )r"   	stream_id
isinstancer   r   appendr    CONTINUATION_BACKLOGflagsaddjoinr'   r   r   )r#   r7   r@   valid_framer-   s   &&   r   _update_header_buffer!FrameBuffer._update_header_bufferC   sh    ,,Q/99I ) )1/0) )y( 
 :#C((a!23333   ''*4''(+??>#C(( '((+M*!G$2F2F!GG')$    \+;<==QWW,   ''*Ar   c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r   t   s      + r   c                	    V # r;   r   )r#   s   &r   __iter__FrameBuffer.__iter__t   s    r   c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r   w   s     *G *G% *Gr   c                	   \        V P                  4      ^	8  d   \        h \        P                  ! \        V P                  R,          4      4      w  r\        T P                  4      T^	,           8  d   \        hT P                  T4        TP                  \        T P                  ^	^	T,            4      4       T P                  ^	T,           R T n        T P                  T4      pTe   T# T P                  4       #   \        \        3 d   pRT: 2p\        T4      ThRp?ii ; i  \         d   pRp\        T4      ThRp?i\         d   pRp\        T4      ThRp?ii ; i)	   :NrP   Nz$Received frame with invalid header: Nz&Received frame with non-compliant datazFrame data missing or invalid)r    r   StopIterationr   parse_frame_header
memoryviewr   r   r   r4   
parse_bodyr	   rH   __next__)r#   r7   r1   errr-   	new_frames   &     r   rU   FrameBuffer.__next__w   sA    tzz?Q	.00DJJrN1KLIA tzz?VaZ' 	##F+	6LLDJJq6$:;< ZZ&	*
 ..q1	 &1yFt}}FE !"34 	.8@C$#-	.   	.:C$#-  	61C',#5	6sA   2C= .D( =D%D  D%(E"3EE"E"EE")r   r"   r   r!   r   N)F)__name__
__module____qualname____firstlineno____doc__r$   r.   r4   rH   rL   rU   __static_attributes__r   r   r   r   r      s.    
](*.b*G *Gr   r   N)r]   
__future__r   hyperframe.exceptionsr   r   hyperframe.framer   r   r   r   
exceptionsr	   r
   r   rC   r   r   r   r   <module>rc      s4    # E U U P P  GG GGr   