ó
    %Äãg‰  ã                  óh   • S r SSKJr  SSKJrJr  SSKJrJrJ	r	J
r
  SSKJrJrJr  Sr " S S	5      rg
)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ÚProtocolErroré@   c                  óX   • \ rS rSrSrSSS jjrSS jrSS jrSS jrSS jr	SS jr
S	rg
)ÚFrameBufferé   zU
A buffer data structure for HTTP/2 data that allows iteraton in terms of
H2 frames.
c                ó‚   • SU l         SU l        U(       a  SOSU l        [        U R                  5      U l        / U l        g )Nó    r   s   PRI * HTTP/2.0

SM

)ÚdataÚmax_frame_sizeÚ	_preambleÚlenÚ_preamble_lenÚ_headers_buffer)ÚselfÚservers     Ú1/usr/lib/python3/dist-packages/h2/frame_buffer.pyÚ__init__ÚFrameBuffer.__init__    s6   € ØˆŒ	ØˆÔÞ@FÑ<ÈCˆŒÜ  §¡Ó0ˆÔØZ\ˆÕr   c                ó2  • U R                   (       aq  [        U5      n[        U R                   U5      nU R                  SU USU :w  a  Sn[	        U5      eXS nU =R                   U-  sl         U R                  US U l        U =R
                  U-  sl        g)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–   € ð ××Ü˜4“yˆHÜ # D×$6Ñ$6¸Ó AÐà�~‰~Ð0Ð0Ð1°TÐ:LÐ;LÐ5MÓMØ0�Ü# CÓ(Ð(àÐ*Ð+ˆDØ×ÒÐ"3Ñ3ÕØ!Ÿ^™^Ð,=Ð,>Ð?ˆDŒNà�	Š	�TÑŽ	r   c                ó\   • XR                   :”  a  SU SU R                    3n[        U5      eg)z2
Confirm that the frame is an appropriate length.
z Received overlong frame: length z, max N)r   r   )r   Úlengthr#   s      r   Ú_validate_frame_lengthÚ"FrameBuffer._validate_frame_length;   s9   € ð ×'Ñ'Ó'Ø4°V°H¸FÀ4×CVÑCVÐBWÐXˆCÜ$ SÓ)Ð)ð (r   c                ó  • U R                   (       Ga)  U R                   S   R                  nUSL=(       a&    [        U[        5      =(       a    UR                  U:H  nU(       d  Sn[	        U5      e[        U[        5      (       d   eU R                   R                  U5        [        U R                   5      [        :”  a  Sn[	        U5      eSUR                  ;   aZ  U R                   S   nUR                  R                  S5        SR                  S U R                    5       5      Ul        / U l         U$ Sn U$ [        U[        [        45      (       a-  SUR                  ;  a  U R                   R                  U5        SnU$ )z‰
Updates the internal header buffer. Returns a frame that should replace
the current one. May throw exceptions if this frame is invalid.
r   Nz"Invalid frame during header block.z&Too many continuation frames received.ÚEND_HEADERSr   c              3  ó8   #   • U  H  oR                   v •  M     g 7f©N)r   )Ú.0Úxs     r   Ú	<genexpr>Ú4FrameBuffer._update_header_buffer.<locals>.<genexpr>f   s   é € Ð!GÒ2F¨Q§&¦&Ò2Fùs   ‚)r   Ú	stream_idÚ
isinstancer   r   Úappendr   ÚCONTINUATION_BACKLOGÚflagsÚaddÚjoinr   r   r	   )r   Úfr2   Úvalid_framer#   s        r   Ú_update_header_bufferÚ!FrameBuffer._update_header_bufferC   s^  € ð ××ÐØ×,Ñ,¨QÑ/×9Ñ9ˆIà˜�÷ )Ü˜1Ô/Ó0÷)à—‘˜yÑ(ð ö
 Ø:�Ü# CÓ(Ð(Ü˜aÔ!2×3Ñ3Ð3Ð3ð × Ñ ×'Ñ'¨Ô*Ü�4×'Ñ'Ó(Ô+?Ó?Ø>�Ü# CÓ(Ð(ð  §¡Ó'Ø×(Ñ(¨Ñ+�Ø—‘—‘˜MÔ*ØŸ™Ñ!G°$×2FÒ2FÓ!GÓG�”Ø')�Ô$ð ˆð ‘ð ˆô ˜œ\Ô+;Ð<×=Ñ=Ø Q§W¡WÓ,ð × Ñ ×'Ñ'¨Ô*ØˆAàˆr   c                ó   • U $ r-   © )r   s    r   Ú__iter__ÚFrameBuffer.__iter__t   s   € Øˆr   c                óž  • [        U R                  5      S:  a  [        e [        R                  " [        U R                  S S 5      5      u  p[        U R                  5      US-   :  a  [        eU R                  U5         UR                  [        U R                  SSU-    5      5        U R                  SU-   S  U l        U R                  U5      nUb  U$ U R                  5       $ ! [        [        4 a  nSU< 3n[        U5      UeS nAff = f! [         a  nSn[        U5      UeS nAf[         a  nSn[        U5      UeS nAff = f)Né	   z$Received frame with invalid header: z&Received frame with non-compliant datazFrame data missing or invalid)r   r   ÚStopIterationr   Úparse_frame_headerÚ
memoryviewr   r   r   r(   Ú
parse_bodyr   r;   Ú__next__)r   r9   r'   Úerrr#   Ú	new_frames         r   rG   ÚFrameBuffer.__next__w   sC  € ô ˆt�y‰y‹>˜AÓÜÐð	.Ü×0Ò0´¸D¿I¹IÀbÀq¸MÓ1JÓK‰IˆAô ˆt�y‰y‹>˜F Q™JÓ&ÜÐð 	×#Ñ# FÔ+ð	6Ø�L‰Lœ D§I¡I¨a°°&±Ð$9Ó:Ô;ð —I‘I˜a ™h˜iÐ(ˆŒ	ð ×.Ñ.¨qÓ1ˆ	ð &Ñ1ˆyÐF°t·}±}³ÐFøôE !Ô"3Ð4ó 	.Ø8¸¹Ð@ˆCÜ Ó$¨#Ð-ûð	.ûô  ó 	.Ø:ˆCÜ Ó$¨#Ð-ûÜ ó 	6Ø1ˆCÜ'¨Ó,°#Ð5ûð	6ús;   ¡.C* Â*D Ã*DÃ:DÄDÄ
EÄD,Ä,EÄ9EÅE)r   r   r   r   r   N)F)r   ÚboolÚreturnÚNone)r   ÚbytesrL   rM   )r'   ÚintrL   rM   )r9   úFrame | NonerL   rP   )rL   r   )rL   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r$   r(   r;   r?   rG   Ú__static_attributes__r>   r   r   r   r      s(   † ñö
]ôô(*ô.ôb÷*Gr   r   N)rU   Ú
__future__r   Úhyperframe.exceptionsr   r   Úhyperframe.framer   r   r   r	   Ú
exceptionsr   r   r   r5   r   r>   r   r   Ú<module>r[      s4   ðñõ #ç Eß UÓ Uç PÑ Pð Ð ÷GGò GGr   